CREATE TABLE ... **EMPTY** AS SELECT

**Use case**

Create a table with the same structure as SELECT query returns but don't fill it.

**Describe alternatives you've considered**

CREATE TABLE ... AS DESCRIBE (SELECT ...)

\- more consistent but also more clunky.
StorageID table_id = table->as<ASTTableIdentifier>()->getTableId();
    query->setDatabase(table_id.database_name);
    query->setTable(table_id.table_name);
    query->uuid = table_id.uuid;
    query->cluster = cluster_str;
    if (to_table)
        query->to_table_id = to_table->as<ASTTableIdentifier>()->getTableId();
    query->set(query->columns_list, columns_list);
    query->set(query->storage, storage);
    query->set(query->inner_storage, inner_storage);
    query->is_watermark_strictly_ascending = is_watermark_strictly_ascending;
    query->is_watermark_ascending = is_watermark_ascending;
    query->is_watermark_bounded = is_watermark_bounded;
    query->watermark_function = watermark;
    query->allowed_lateness = allowed_lateness;
    query->lateness_function = lateness;
    query->is_populate = is_populate;
    tryGetIdentifierNameInto(as_database, query->as_database);
    tryGetIdentifierNameInto(as_table, query->as_table);
    query->set(query->select, select);
    return true;
}
bool ParserTableOverrideDeclaration::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
{
    ParserKeyword s_table_override("TABLE OVERRIDE");
    ParserIdentifier table_name_p;
    ParserToken lparen_p(TokenType::OpeningRoundBracket);
    ParserToken rparen_p(TokenType::ClosingRoundBracket);
    ParserTablePropertiesDeclarationList table_properties_p;
    ParserExpression expression_p;