If they are defined, they can override table-level settings.
getSettings()->check_sample_column_is_correct);
        }
        if (command.type == AlterCommand::ADD_INDEX && !is_custom_partitioned)
        {
            throw Exception(
                "ALTER ADD INDEX is not supported for tables with the old syntax",
                ErrorCodes::BAD_ARGUMENTS);
        }
        if (command.type == AlterCommand::ADD_PROJECTION)
        {
            if (!is_custom_partitioned)
                throw Exception(
                    "ALTER ADD PROJECTION is not supported for tables with the old syntax",
                    ErrorCodes::BAD_ARGUMENTS);
            
            if (supportsReplication() && getSettings()->allow_remote_fs_zero_copy_replication)
            {
                auto storage_policy = getStoragePolicy();
                auto disks = storage_policy->getDisks();
                for (const auto & disk : disks)
                {
                    if (disk->supportZeroCopyReplication())
                        throw Exception(ErrorCodes::NOT_IMPLEMENTED, "ALTER ADD PROJECTION is not supported when zero-copy replication is enabled for table. "
                                        "Currently disk '{}' supports zero copy replication", disk->getName());
                }
            }
        }
        if (command.type == AlterCommand::RENAME_COLUMN)
        {
            if (columns_in_keys.contains(command.column_name))