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

Method loadTablesAsync

src/Databases/TablesLoader.cpp:37–104  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

35}
36
37LoadTaskPtrs TablesLoader::loadTablesAsync(LoadJobSet load_after)
38{
39 bool need_resolve_dependencies = !global_context->getConfigRef().has("ignore_table_dependencies_on_metadata_loading");
40
41 /// Load all Lazy, MySQL, PostgreSQL, SQLite, etc databases first.
42 /// Note that this loading is NOT async because it should be fast and it cannot have any dependencies
43 for (auto & database : databases)
44 {
45 if (need_resolve_dependencies && database.second->supportsLoadingInTopologicalOrder())
46 databases_to_load.push_back(database.first);
47 else
48 database.second->loadStoredObjects(global_context, strictness_mode);
49 }
50
51 if (databases_to_load.empty())
52 return {};
53
54 LoadTaskPtrs result;
55
56 /// Read and parse metadata from Ordinary, Atomic, Materialized*, Replicated, etc databases. Build dependency graph.
57 for (auto & database_name : databases_to_load)
58 {
59 databases[database_name]->beforeLoadingMetadata(global_context, strictness_mode);
60 databases[database_name]->loadTablesMetadata(global_context, metadata, isLoadingFromExistingMetadata(strictness_mode));
61 }
62
63 LOG_INFO(log, "Parsed metadata of {} tables in {} databases in {} sec",
64 metadata.parsed_tables.size(), databases_to_load.size(), stopwatch.elapsedSeconds());
65
66 stopwatch.restart();
67
68 buildDependencyGraph();
69
70 /// Update existing info (it's important for ATTACH DATABASE)
71 DatabaseCatalog::instance().addDependencies(referential_dependencies, loading_dependencies, mv_from_dependencies);
72
73 /// Remove tables that do not exist
74 removeUnresolvableDependencies();
75
76 /// Compatibility setting which should be enabled by default on attach
77 /// Otherwise server will be unable to start for some old-format of IPv6/IPv4 types of columns
78 ContextMutablePtr load_context = Context::createCopy(global_context);
79 load_context->setSetting("cast_ipv4_ipv6_default_on_conversion_error", 1);
80
81 for (const auto & table_id : all_loading_dependencies.getTablesSortedByDependency())
82 {
83 /// Gather tasks to load before this table
84 LoadTaskPtrs load_dependency_tasks;
85 for (const StorageID & dependency_id : all_loading_dependencies.getDependencies(table_id))
86 load_dependency_tasks.push_back(load_table[dependency_id.getFullTableName()]);
87
88 // Make load table task
89 auto table_name = table_id.getQualifiedName();
90 const auto & path_and_query = metadata.parsed_tables[table_name];
91 auto task = databases[table_name.database]->loadTableFromMetadataAsync(
92 async_loader,
93 getGoals(load_dependency_tasks, load_after),
94 load_context,

Callers 4

createDatabaseMethod · 0.80
loadMetadataFunction · 0.80
loadMetadataSystemFunction · 0.80

Calls 15

getGoalsFunction · 0.85
getFullTableNameMethod · 0.80
hasMethod · 0.45
push_backMethod · 0.45
loadStoredObjectsMethod · 0.45
emptyMethod · 0.45
beforeLoadingMetadataMethod · 0.45
loadTablesMetadataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected