To `JSONEachRow`
ReadBuffer & in_,
    const Block & header_,
    Params params_,
    const FormatSettings & format_settings_,
    bool yield_strings_)
    : IRowInputFormat(header_, in_, std::move(params_)), format_settings(format_settings_), name_map(header_.columns()), yield_strings(yield_strings_)
{
    size_t num_columns = getPort().getHeader().columns();
    for (size_t i = 0; i < num_columns; ++i)
    {
        const String & column_name = columnName(i);
        name_map[column_name] = i;        
        if (format_settings_.import_nested_json)
        {
            const auto split = Nested::splitName(column_name);
            if (!split.second.empty())
            {
                const StringRef table_name(column_name.data(), split.first.size());
                name_map[table_name] = NESTED_FIELD;
            }
        }
    }
    prev_positions.resize(num_columns);
}
const String & JSONEachRowRowInputFormat::columnName(size_t i) const
{
    return getPort().getHeader().getByPosition(i).name;
}
inline size_t JSONEachRowRowInputFormat::columnIndex(const StringRef & name, size_t key_index)