May be useful to interface with some external program, e.g. I want to use `clickhouse-format` to beautify the queries for performance test reports.

For now, DDL dictionaries don't work for `clickhouse-local` at all (https://github.com/ClickHouse/ClickHouse/issues/22354)

We should do it through DDL, because the xml config route looks hopeless. `clickhouse-local` can't even load server's `config.xml` properly.
{
    public:
        PoolBlockInputStreamWithBackgroundThread(
            std::shared_ptr<ProcessPool> process_pool_,
            std::unique_ptr<ShellCommand> && command_,
            BlockInputStreamPtr && stream_,
            size_t read_rows_,
            Poco::Logger * log_,
            std::function<void(WriteBufferFromFile &)> && send_data_)
            : process_pool(process_pool_)
            , command(std::move(command_))
            , stream(std::move(stream_))
            , rows_to_read(read_rows_)
            , log(log_)
            , send_data(std::move(send_data_))
            , thread([this]
            {
                try
                {
                    send_data(command->in);
                }
                catch (...)
                {
                    std::lock_guard<std::mutex> lck(exception_during_read_lock);
                    exception_during_read = std::current_exception();
                }
            })
        {}
        ~PoolBlockInputStreamWithBackgroundThread() override