**Describe the situation**

```
SELECT * FROM test.hits INTO OUTFILE 'dump.csv' FORMAT CSV

8873898 rows in set. Elapsed: 32.487 sec. Processed 8.87 million rows, 8.46 GB (273.15 thousand rows/s., 260.42 MB/s.)
```

is bounded by single CPU core. Too slow :(
if (out_logs_buf)
    {
        out_logs_buf->next(
        out_logs_buf.reset(
    }
    std_out.next(
}
/// Receive the block that serves as an example of the structure of table where data will be inserted.
bool ClientBase::receiveSampleBlock(Block & out, ColumnsDescription & columns_description, ASTPtr parsed_query)
{
    while (true)
    {
        Packet packet = connection->receivePacket(
        switch (packet.type)
        {
            case Protocol::Server::Data:
                out = packet.block;
                return true;
            case Protocol::Server::Exception:
                onReceiveExceptionFromServer(std::move(packet.exception)
                return false;
            case Protocol::Server::Log:
                onLogData(packet.block
                break;
            case Protocol::Server::TableColumns:
                columns_description = ColumnsDescription::parse(packet.multistring_message[1]
                return receiveSampleBlock(out, columns_description, parsed_query
            default:
                throw NetException(
                    "Unexpected packet from server (expected Data, Exception or Log, got "