Good day everyone! I have stumbled upon an interesting issue with  semi-structured data experimental feature . 


When inserting into a partitioned MergeTree with JSON column and  crossing partition boundaries  the  error is thrown 
`DB::Exception: ColumnObject must be converted to ColumnTuple before use. (LOGICAL_ERROR)`

The  issue can be reproduced on ` 22.3.2.1` release


**How to reproduce**

* Which ClickHouse server version to use -  22.3.2.1
* Which interface to use, if matters - does not  seem to play any role
* Non-default settings, if any  - allow_experimental_object_type enabled
* `CREATE TABLE` statements for all tables involved 
```DROP TABLE IF EXISTS jsonTest;
CREATE TABLE jsonTest
(
    `data` JSON,
    `creationDateUnix` UInt32 CODEC(DoubleDelta, ZSTD(1))
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(toDate(creationDateUnix))
ORDER BY (creationDateUnix);

DROP TABLE IF EXISTS source;
CREATE TABLE source
(
    `sourceData` String,
    `creationDateUnix` UInt32 CODEC(DoubleDelta, ZSTD(1))
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(toDate(creationDateUnix))
ORDER BY (creationDateUnix);


truncate source;
insert into source (sourceData,creationDateUnix)
select coalesce(actionDetailStr,'{}'), creationDateUnix from statOptJSONstr;   


truncate jsonTest; 
insert into jsonTest(data, creationDateUnix)
select sourceData,creationDateUnix from source; -- this statement fails with 
 DB::Exception: ColumnObject must be converted to ColumnTuple before use. (LOGICAL_ERROR) (version 22.3.2.1)
 ```
I have noticed that if the  data belongs  to  only one partition  there  is no issue.
For  non-partitioned tables  issue is not reproducible  as well. 

following statement  can be used  for  checking my  assumption above
```
insert into jsonTest(data, creationDateUnix)
select  sourceData, creationDateUnix from source  Where  toYYYYMMDD(toDate(creationDateUnix)) between 20181130  and 20181201;
```

[Here  is my  dataset in parquet](https://drive.google.com/file/d/13fmXEcfLi-qGrBTz5UUB6hWOMUcPM6xb/view?usp=sharing)

**Expected behavior**

Expected  behavior is successful insertion of data

**Error message and/or stacktrace**

SQL Error [1002]: ClickHouse exception, code: 1002, host: localhost, port: 8123; Code: 49. DB::Exception: ColumnObject must be converted to ColumnTuple before use. (LOGICAL_ERROR) (version 22.3.2.1)



bool inserted;
        partitions_map.emplace(key, it, inserted);
        if (inserted)
        {
            if (max_parts && partitions_count >= max_parts)
                throw Exception("Too many partitions for single INSERT block (more than " + toString(max_parts) + "). The limit is controlled by 'max_partitions_per_insert_block' setting. Large number of partitions is a common misconception. It will lead to severe negative performance impact, including slow server startup, slow INSERT queries and slow SELECT queries. Recommended total number of partitions for a table is under 1000..10000. Please note, that partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast). Partitions are intended for data manipulation (DROP PARTITION, etc).", ErrorCodes::TOO_MANY_PARTS);
            partition_num_to_first_row.push_back(i);
            it->getMapped() = partitions_count;
            ++partitions_count;
            
            if (partitions_count == 2)
            {
                selector = IColumn::Selector(num_rows);
                std::fill(selector.begin(), selector.begin() + i, 0);
            }
        }
        if (partitions_count > 1)
            selector[i] = it->getMapped();
    }
}
void updateTTL(
    const TTLDescription & ttl_entry,
    IMergeTreeDataPart::TTLInfos & ttl_infos,
    DB::MergeTreeDataPartTTLInfo & ttl_info,
    const Block & block,
    bool update_part_min_max_ttls)
{
    auto ttl_column = ITTLAlgorithm::executeExpressionAndGetColumn(ttl_entry.expression, block, ttl_entry.result_column);
    if (const ColumnUInt16 * column_date = typeid_cast<const ColumnUInt16 *>(ttl_column.get()))
    {