If they are defined, they can override table-level settings.
void rename(const String & new_table_path, const StorageID & new_table_id) override;
    
    
    
    
    
    void checkAlterIsPossible(const AlterCommands & commands, ContextPtr context) const override;
    
    
    void checkMutationIsPossible(const MutationCommands & commands, const Settings & settings) const override;
    
    void checkAlterPartitionIsPossible(const PartitionCommands & commands, const StorageMetadataPtr & metadata_snapshot, const Settings & settings) const override;
    
    void changeSettings(
        const ASTPtr & new_settings,
        AlterLockHolder & table_lock_holder);
    
    void reportBrokenPart(const String & name) const
    {
        broken_part_callback(name);
    }
    
    
    void reportBrokenPart(MergeTreeData::DataPartPtr & data_part) const;
    
    
    static ASTPtr extractKeyExpressionList(const ASTPtr & node)