

such as
```
create view view1 as 
with t as (select number n from numbers(3))
select n from t
```
Block as_select_sample = InterpreterSelectWithUnionQuery::getSampleBlock(create.select->clone(), getContext());
        properties.columns = ColumnsDescription(as_select_sample.getNamesAndTypesList());
    }
    else if (create.as_table_function)
    {
        
        auto table_function = TableFunctionFactory::instance().get(create.as_table_function, getContext());
        properties.columns = table_function->getActualTableStructure(getContext());
        assert(!properties.columns.empty());
    }
    else
        throw Exception("Incorrect CREATE query: required list of column descriptions or AS section or SELECT.", ErrorCodes::INCORRECT_QUERY);
    
    if (!create.columns_list)
        create.set(create.columns_list, std::make_shared<ASTColumns>());
    ASTPtr new_columns = formatColumns(properties.columns);
    ASTPtr new_indices = formatIndices(properties.indices);
    ASTPtr new_constraints = formatConstraints(properties.constraints);
    create.columns_list->setOrReplace(create.columns_list->columns, new_columns);
    create.columns_list->setOrReplace(create.columns_list->indices, new_indices);
    create.columns_list->setOrReplace(create.columns_list->constraints, new_constraints);
    validateTableStructure(create, properties);
    
    setEngine(create);
    assert(as_database_saved.empty() && as_table_saved.empty());
    std::swap(create.as_database, as_database_saved);
    std::swap(create.as_table, as_table_saved);
    return properties;
}
void InterpreterCreateQuery::validateTableStructure(const ASTCreateQuery & create,