(you don't have to strictly follow this form)

It seems that CH doesn't support  `FORMAT CustomSeparated` with http request
https://github.com/ClickHouse/ClickHouse/issues/12744#issuecomment-663738562

When I make a request with `format_custom_field_delimiter='^'`, I got an error
```
Code: 49, e.displayText() = DB::Exception: There is no checkpoint (version 20.1.2.4 (official build)) 
```
Bash script:
```
#!/bin/bash

find . -type f -name 'j.log' | while read f; do
  curl "http://localhost:8123
/?query=INSERT%20INTO%20mydb%20FORMAT%20CustomSeparated%20SETTINGS%20format_custom_escaping_rule%3D%27CSV%27%2C%20format_custom_field_delimiter%20%3D%20%27%5E%27" --data-binary "@${f}"
done
```
But all is OK, when I do it with client:
```
cat j.log |clickhouse-client  -q "INSERT into mydb FORMAT CustomSeparated SETTINGS format_custom_escaping_rule='CSV', format_custom_field_delimiter = '^'"
```


**How to reproduce**
* Which ClickHouse server version to use
 version 20.13.1.1 and github build `commit 6e34a0b71efc0e5af1cfb05b77a5e7b2568a2e49`
* Which interface to use, if matters
* Non-default settings, if any
* `CREATE TABLE` statements for all tables involved
```
CREATE TABLE mydb
(
	datetime  String,
	d1 String,
	d2 String
)
engine=MergeTree()
ORDER BY d1
SETTINGS index_granularity = 8192;
```
* Sample data for all these tables, use [clickhouse-obfuscator](https://github.com/ClickHouse/ClickHouse/blob/master/programs/obfuscator/Obfuscator.cpp#L42-L80) if necessary

j.log:
```
2021-Jan^d1^d2
```

* Queries to run that lead to unexpected result

**Expected behavior**
A clear and concise description of what you expected to happen.

**Error message and/or stacktrace**
If applicable, add screenshots to help explain your problem.

**Additional context**
Add any other context about the problem here.

if (joined_tables.tablesCount() == 1)
                {
                    storage_src = std::dynamic_pointer_cast<StorageDistributed>(joined_tables.getLeftTableStorage());
                    if (storage_src)
                    {
                        const auto select_with_union_query = std::make_shared<ASTSelectWithUnionQuery>();
                        select_with_union_query->list_of_selects = std::make_shared<ASTExpressionList>();
                        auto new_select_query = std::dynamic_pointer_cast<ASTSelectQuery>(select_query->clone());
                        select_with_union_query->list_of_selects->children.push_back(new_select_query);
                        new_select_query->replaceDatabaseAndTable(storage_src->getRemoteDatabaseName(), storage_src->getRemoteTableName());
                        new_query->select = select_with_union_query;
                    }
                }
            }
        }
        auto storage_dst = std::dynamic_pointer_cast<StorageDistributed>(table);
        if (storage_src && storage_dst && storage_src->cluster_name == storage_dst->cluster_name)
        {
            is_distributed_insert_select = true;
            if (settings.parallel_distributed_insert_select == PARALLEL_DISTRIBUTED_INSERT_SELECT_ALL)
            {
                new_query->table_id = StorageID(storage_dst->getRemoteDatabaseName(), storage_dst->getRemoteTableName());
            }
            const auto & cluster = storage_src->getCluster();
            const auto & shards_info = cluster->getShardsInfo();
            std::vector<std::unique_ptr<QueryPipeline>> pipelines;
            String new_query_str = queryToString(new_query);
            for (size_t shard_index : ext::range(0, shards_info.size()))
            {
                const auto & shard_info = shards_info[shard_index];