If they are defined, they can override table-level settings.
if ((*curr_it)->info.partition_id != (*prev_it)->info.partition_id)
            {
                ++prev_it;
                ++curr_it;
                continue;
            }
            if ((*curr_it)->contains(**prev_it))
            {
                deactivate_part(prev_it);
                prev_it = curr_it;
                ++curr_it;
            }
            else if ((*prev_it)->contains(**curr_it))
            {
                auto next = std::next(curr_it);
                deactivate_part(curr_it);
                curr_it = next;
            }
            else
            {
                ++prev_it;
                ++curr_it;
            }
        }
    }
    resetObjectColumnsFromActiveParts(part_lock);
    calculateColumnAndSecondaryIndexSizesImpl();
    LOG_DEBUG(log, "Loaded data parts ({} items)", data_parts_indexes.size());
}
static bool isOldPartDirectory(const DiskPtr & disk, const String & directory_path, time_t threshold)