@Override
    public void clone(RowData from, RowData[] batch, int position) {

        RecyclableJoinedRowData recyclable;
        if (batch[position] instanceof RecyclableJoinedRowData) {
            recyclable = (RecyclableJoinedRowData) batch[position];
        } else {
            recyclable = new RecyclableJoinedRowData(rowType.getFieldCount(), metadataConverters.length);
        }

        RowData physical =
                RowDataCloneUtil.clonePhysical(from, recyclable.getPhysicalRowData(), rowType, fieldSerializers);
        RowData meta = RowDataCloneUtil.cloneMeta(from, recyclable.getMetaRowData(), metadataConverters);
        batch[position] = recyclable.replace(physical.getRowKind(), physical, meta, System.currentTimeMillis());
    }
Copy from iceberg-flink:iceberg-flink-1.15:1.3.1
inlong-sort/sort-flink/sort-flink-v1.15/sort-connectors/iceberg/src/main/java/org/apache/inlong/sort/iceberg/source/reader/RowDataRecordFactory.java