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)



ProfileEvents::increment(ProfileEvents::MergeTreeDataWriterBlocksAlreadySorted);
    }
    Names partition_key_columns = metadata_snapshot->getPartitionKey().column_names;
    if (context->getSettingsRef().optimize_on_insert)
        block = mergeBlock(block, sort_description, partition_key_columns, perm_ptr, data.merging_params);
    
    size_t expected_size = block.bytes();
    
    
    if (expected_size == 0)
        return temp_part;
    DB::IMergeTreeDataPart::TTLInfos move_ttl_infos;
    const auto & move_ttl_entries = metadata_snapshot->getMoveTTLs();
    for (const auto & ttl_entry : move_ttl_entries)
        updateTTL(ttl_entry, move_ttl_infos, move_ttl_infos.moves_ttl[ttl_entry.result_column], block, false);
    ReservationPtr reservation = data.reserveSpacePreferringTTLRules(metadata_snapshot, expected_size, move_ttl_infos, time(nullptr), 0, true);
    VolumePtr volume = data.getStoragePolicy()->getVolume(0);
    auto new_data_part = data.createPart(
        part_name,
        data.choosePartType(expected_size, block.rows()),
        new_part_info,
        createVolumeFromReservation(reservation, volume),
        TMP_PREFIX + part_name);
    if (data.storage_settings.get()->assign_part_uuids)
        new_data_part->uuid = UUIDHelpers::generateV4();
    const auto & data_settings = data.getSettings();
    SerializationInfo::Settings settings{data_settings->ratio_of_defaults_for_sparse_serialization, true};
    SerializationInfoByName infos(columns, settings);
    infos.add(block);
    new_data_part->setColumns(columns);