Don't require the `--structure` argument.
auto res = lseek(file_in.getFD(), 0, SEEK_SET);
        if (-1 == res)
            throwFromErrno("Input must be seekable file (it will be read twice).", ErrorCodes::CANNOT_SEEK_THROUGH_FILE);
    }
    Obfuscator obfuscator(header, seed, markov_model_params);
    UInt64 max_block_size = 8192;
    
    UInt64 source_rows = 0;
    bool rewind_needed = false;
    if (load_from_file.empty())
    {
        if (!silent)
            std::cerr << "Training models\n";
        Pipe pipe(context->getInputFormat(input_format, file_in, header, max_block_size));
        QueryPipeline pipeline(std::move(pipe));
        PullingPipelineExecutor executor(pipeline);
        Block block;
        while (executor.pull(block))
        {
            obfuscator.train(block.getColumns());
            source_rows += block.rows();
            if (!silent)
                std::cerr << "Processed " << source_rows << " rows\n";
        }
        obfuscator.finalize();
        rewind_needed = true;
    }
    else
    {