If they are defined, they can override table-level settings.
PartitionCommandsResultInfo unfreezeAll(
        const String & backup_name,
        ContextPtr context,
        TableLockHolder & table_lock_holder);
    
    bool hasDataToBackup() const override { return true; }
    
    BackupEntries backupData(ContextPtr context, const ASTs & partitions) override;
    static BackupEntries backupDataParts(const DataPartsVector & data_parts);
    
    RestoreTaskPtr restoreDataParts(
        const std::unordered_set<String> & partition_ids,
        const BackupPtr & backup,
        const String & data_path_in_backup,
        SimpleIncrement * increment);
    
    void movePartitionToDisk(const ASTPtr & partition, const String & name, bool moving_part, ContextPtr context);
    
    void movePartitionToVolume(const ASTPtr & partition, const String & name, bool moving_part, ContextPtr context);
    
    
    
    void checkPartitionCanBeDropped(const ASTPtr & partition, ContextPtr local_context);
    void checkPartCanBeDropped(const String & part_name);
    Pipe alterPartition(
        const StorageMetadataPtr & metadata_snapshot,
        const PartitionCommands & commands,
        ContextPtr query_context) override;
    size_t getColumnCompressedSize(const std::string & name) const