
**Describe the bug**
See the code in `Pipe.cpp`. The logic of `if` not consistent with the logs below.  Can `checkSource` be passed when `source.getOutputs().size() == 2` ? 
```
static void checkSource(const IProcessor & source)
{
    ......
    if (source.getOutputs().size() > 1)
        throw Exception("Source for pipe should have single or two outputs, but " + source.getName() + " has " +
                        toString(source.getOutputs().size()) + " outputs.", ErrorCodes::LOGICAL_ERROR);
}
``` 



port = &transform->getOutputs().front();
            if (collected_processors)
                collected_processors->emplace_back(transform);
            processors.emplace_back(std::move(transform));
        }
    };
    for (auto & port : output_ports)
        add_transform(port, StreamType::Main);
    add_transform(totals_port, StreamType::Totals);
    add_transform(extremes_port, StreamType::Extremes);
    header = std::move(new_header);
}
void Pipe::addSimpleTransform(const ProcessorGetter & getter)
{
    addSimpleTransform([&](const Block & stream_header, StreamType) { return getter(stream_header); });
}
void Pipe::resize(size_t num_streams, bool force, bool strict)
{
    if (output_ports.empty())
        throw Exception("Cannot resize an empty Pipe.", ErrorCodes::LOGICAL_ERROR);
    if (!force && num_streams == numOutputPorts())
        return;
    ProcessorPtr resize;
    if (strict)
        resize = std::make_shared<StrictResizeProcessor>(getHeader(), numOutputPorts(), num_streams);
    else
        resize = std::make_shared<ResizeProcessor>(getHeader(), numOutputPorts(), num_streams);
    addTransform(std::move(resize));
}
void Pipe::setSinks(const Pipe::ProcessorGetterWithStreamKind & getter)