MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / buildCustomKeyFilterIfNeeded

Function buildCustomKeyFilterIfNeeded

src/Planner/PlannerJoinTree.cpp:606–638  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

604}
605
606std::optional<FilterDAGInfo> buildCustomKeyFilterIfNeeded(const StoragePtr & storage,
607 SelectQueryInfo & table_expression_query_info,
608 PlannerContextPtr & planner_context)
609{
610 const auto & query_context = planner_context->getQueryContext();
611 const auto & settings = query_context->getSettingsRef();
612
613 if (settings[Setting::parallel_replicas_count] <= 1 || settings[Setting::parallel_replicas_custom_key].value.empty())
614 return {};
615
616 auto custom_key_ast = parseCustomKeyForTable(settings[Setting::parallel_replicas_custom_key], *query_context);
617 if (!custom_key_ast)
618 throw DB::Exception(
619 ErrorCodes::BAD_ARGUMENTS,
620 "Parallel replicas processing with custom_key has been requested "
621 "(setting 'max_parallel_replicas'), but the table does not have custom_key defined for it "
622 " or it's invalid (setting 'parallel_replicas_custom_key')");
623
624 LOG_TRACE(getLogger("Planner"), "Processing query on a replica using custom_key '{}'", settings[Setting::parallel_replicas_custom_key].value);
625
626 auto metadata_snapshot = storage->getInMemoryMetadataPtr(query_context, false);
627 auto parallel_replicas_custom_filter_ast = getCustomKeyFilterForParallelReplica(
628 settings[Setting::parallel_replicas_count],
629 settings[Setting::parallel_replica_offset],
630 std::move(custom_key_ast),
631 {settings[Setting::parallel_replicas_mode],
632 settings[Setting::parallel_replicas_custom_key_range_lower],
633 settings[Setting::parallel_replicas_custom_key_range_upper]},
634 metadata_snapshot->columns,
635 query_context);
636
637 return buildFilterInfo(parallel_replicas_custom_filter_ast, table_expression_query_info.table_expression, planner_context);
638}
639
640/// Parse `additional_table_filters` for this table expression and assign the AST into
641/// `table_expression_query_info.additional_filter_ast`. This is the pure, side-effect-free

Callers 1

Calls 8

parseCustomKeyForTableFunction · 0.85
buildFilterInfoFunction · 0.85
ExceptionClass · 0.50
getLoggerFunction · 0.50
getQueryContextMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected