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

Method StorageWindowView

src/Storages/WindowView/StorageWindowView.cpp:1252–1345  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1250}
1251
1252StorageWindowView::StorageWindowView(
1253 const StorageID & table_id_,
1254 ContextPtr context_,
1255 const ASTCreateQuery & query,
1256 const ColumnsDescription & columns_,
1257 const String & comment,
1258 LoadingStrictnessLevel mode)
1259 : IStorage(table_id_)
1260 , WithContext(context_->getGlobalContext())
1261 , log(getLogger(fmt::format("StorageWindowView({}.{})", table_id_.database_name, table_id_.table_name)))
1262 , fire_signal_timeout_s(context_->getSettingsRef()[Setting::wait_for_window_view_fire_signal_timeout].totalSeconds())
1263 , clean_interval_usec(context_->getSettingsRef()[Setting::window_view_clean_interval].totalMicroseconds())
1264{
1265 if (context_->getSettingsRef()[Setting::allow_experimental_analyzer])
1266 disabled_due_to_analyzer = true;
1267
1268 if (mode <= LoadingStrictnessLevel::CREATE)
1269 throwIfWindowViewIsDisabled();
1270
1271 if (!query.select)
1272 throw Exception(ErrorCodes::INCORRECT_QUERY, "SELECT query is not specified for {}", getName());
1273
1274 StorageInMemoryMetadata storage_metadata;
1275 storage_metadata.setColumns(columns_);
1276 storage_metadata.setComment(comment);
1277 setInMemoryMetadata(storage_metadata);
1278
1279 /// If the target table is not set, use inner target table
1280 auto to_table_id = query.getTargetTableID(ViewTarget::To);
1281 has_inner_target_table = to_table_id.empty();
1282 auto * to_table_engine = query.getTargetInnerEngine(ViewTarget::To);
1283
1284 if (has_inner_target_table && !to_table_engine)
1285 throw Exception(ErrorCodes::INCORRECT_QUERY,
1286 "You must specify where to save results of a WindowView query: "
1287 "either ENGINE or an existing table in a TO clause");
1288
1289 if (query.select->list_of_selects->children.size() != 1)
1290 throw Exception(
1291 ErrorCodes::QUERY_IS_NOT_SUPPORTED_IN_WINDOW_VIEW,
1292 "UNION is not supported for {}", getName());
1293
1294 /// Extract information about watermark, lateness.
1295 eventTimeParser(query);
1296
1297 auto inner_query = initInnerQuery(query.select->list_of_selects->children.at(0)->as<ASTSelectQuery &>(), context_);
1298
1299 if (auto * inner_storage = query.getTargetInnerEngine(ViewTarget::Inner))
1300 inner_table_engine = inner_storage->clone();
1301 inner_table_id = StorageID(getStorageID().database_name, generateInnerTableName(getStorageID()));
1302 inner_fetch_query = generateInnerFetchQuery(inner_table_id);
1303
1304 target_table_id = has_inner_target_table ? StorageID(table_id_.database_name, generateTargetTableName(table_id_)) : to_table_id;
1305
1306 if (is_proctime)
1307 next_fire_signal = getWindowUpperBound(now());
1308
1309 std::exchange(has_inner_table, true);

Callers

nothing calls this directly

Calls 15

generateInnerTableNameFunction · 0.85
generateInnerFetchQueryFunction · 0.85
generateTargetTableNameFunction · 0.85
getInnerTableCreateQueryFunction · 0.85
getTargetInnerEngineMethod · 0.80
setInternalMethod · 0.80
getFullTableNameMethod · 0.80
nowFunction · 0.70
getLoggerFunction · 0.50
formatFunction · 0.50
ExceptionClass · 0.50
getNameFunction · 0.50

Tested by

no test coverage detected