**Describe what's wrong**

If a column named `ALL` or `DISTINCT` appears in the first position of the select list in a distributed query, the query fails with `Syntax error`.

In the rewriten query the column name appears without quotation marks, so remote server interprets `DISTINCT` as part of `SELECT DISTINCT` instead of column name. Same thing applies to column named `ALL`.

**Does it reproduce on recent release?**

Yes, It reproduces on 21.11.5 official build

**How to reproduce**

* Which ClickHouse server version to use
* Which interface to use, if matters
* Non-default settings, if any
```sql
SET prefer_localhost_replica=0
```
* `CREATE TABLE` statements for all tables involved
```sql
CREATE TABLE  t0 ("KEY" Int64, "ALL" Int64, "DISTINCT" Int64) ENGINE = MergeTree() ORDER BY KEY
CREATE TABLE dist_t0 ("KEY" Int64, "ALL" Int64, "DISTINCT" Int64) ENGINE = Distributed(test_shard_localhost, default, t0)
```
* Sample data for all these tables, use [clickhouse-obfuscator](https://github.com/ClickHouse/ClickHouse/blob/master/programs/obfuscator/Obfuscator.cpp#L42-L80) if necessary
* Queries to run that lead to unexpected result

```sql
:) select "DISTINCT" from dist_t0

SELECT DISTINCT
FROM dist_t0

Query id: d9024cf2-777e-4f5e-a7fa-f9d2eb8dc661


0 rows in set. Elapsed: 0.013 sec. 

Received exception from server (version 21.11.5):
Code: 62. DB::Exception: Received from localhost:9000. DB::Exception: Received from localhost:9000. DB::Exception: Syntax error: failed at position 22 ('default'): default.t0. Expected one of: UNION, LIMIT, WHERE, WINDOW, DoubleColon, LIKE, GLOBAL NOT IN, end of query, HAVING, AS, DIV, IS, UUID, GROUP BY, INTO OUTFILE, OR, EXCEPT, QuestionMark, OFFSET, BETWEEN, NOT LIKE, MOD, PREWHERE, AND, Comma, alias, ORDER BY, SETTINGS, IN, ILIKE, INTERSECT, FROM, FORMAT, Dot, NOT ILIKE, WITH, NOT, Arrow, token, NOT IN, GLOBAL IN. (SYNTAX_ERROR)
```

{
    const std::string & disk_path = disk->getPath();
    const std::string key(disk_path + name);
    auto create_node_data = [&]()
    {
        ClusterNodeData data;
        data.connection_pool = StorageDistributedDirectoryMonitor::createPool(name, *this);
        data.directory_monitor = std::make_unique<StorageDistributedDirectoryMonitor>(
            *this, disk, relative_data_path + name,
            data.connection_pool,
            monitors_blocker,
            getContext()->getDistributedSchedulePool());
        return data;
    };
    
    if (startup)
    {
        auto tmp_node_data = create_node_data();
        std::lock_guard lock(cluster_nodes_mutex);
        auto & node_data = cluster_nodes_data[key];
        assert(!node_data.directory_monitor);
        node_data = std::move(tmp_node_data);
        return *node_data.directory_monitor;
    }
    else
    {
        std::lock_guard lock(cluster_nodes_mutex);
        auto & node_data = cluster_nodes_data[key];
        if (!node_data.directory_monitor)
        {