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:
        BlockInputStreamWithBackgroundThread(
            ContextPtr context,
            const std::string & format,
            const Block & sample_block,
            const std::string & command_str,
            Poco::Logger * log_,
            std::function<void(WriteBufferFromFile &)> && send_data_)
            : log(log_),
            command(ShellCommand::execute(command_str)),
            send_data(std::move(send_data_)),
            thread([this] { send_data(command->in); })
        {
            stream = context->getInputFormat(format, command->out, sample_block, max_block_size);
        }
        ~BlockInputStreamWithBackgroundThread() override
        {
            if (thread.joinable())
                thread.join();
        }
        Block getHeader() const override
        {
            return stream->getHeader();
        }
    private:
        Block readImpl() override