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.
if (!create.attach && !settings.allow_experimental_geo_types)
    {
        for (const auto & name_and_type_pair : properties.columns.getAllPhysical())
        {
            const auto & type = name_and_type_pair.type->getName();
            if (type == "MultiPolygon" || type == "Polygon" || type == "Ring" || type == "Point")
            {
                String message = "Cannot create table with column '" + name_and_type_pair.name + "' which type is '"
                                 + type + "' because experimental geo types are not allowed. "
                                 + "Set setting allow_experimental_geo_types = 1 in order to allow it";
                throw Exception(message, ErrorCodes::ILLEGAL_COLUMN);
            }
        }
    }
    if (!create.attach && !settings.allow_experimental_object_type)
    {
        for (const auto & [name, type] : properties.columns.getAllPhysical())
        {
            if (isObject(type))
            {
                throw Exception(ErrorCodes::ILLEGAL_COLUMN,
                    "Cannot create table with column '{}' which type is '{}' "
                    "because experimental Object type is not allowed. "
                    "Set setting allow_experimental_object_type = 1 in order to allow it",
                    name, type->getName());
            }
        }
    }
}
String InterpreterCreateQuery::getTableEngineName(DefaultTableEngine default_table_engine)