If they are defined, they can override table-level settings.
const DataPartsVector & parts, const ColumnsDescription & storage_columns)
{
    return DB::getObjectColumns(
        parts.begin(), parts.end(),
        storage_columns, [](const auto & part) -> const auto & { return part->getColumns(); });
}
ColumnsDescription MergeTreeData::getObjectColumns(