If they are defined, they can override table-level settings.
CompressionCodecPtr getCompressionCodecForPart(size_t part_size_compressed, const IMergeTreeDataPart::TTLInfos & ttl_infos, time_t current_time) const;
    std::lock_guard<std::mutex> getQueryIdSetLock() const { return std::lock_guard<std::mutex>(query_id_set_mutex); }
    
    
    bool insertQueryIdOrThrow(const String & query_id, size_t max_queries) const;
    bool insertQueryIdOrThrowNoLock(const String & query_id, size_t max_queries, const std::lock_guard<std::mutex> &) const;
    
    void removeQueryId(const String & query_id) const;
    void removeQueryIdNoLock(const String & query_id, const std::lock_guard<std::mutex> &) const;
    
    DataTypePtr getPartitionValueType() const;
    
    Block getSampleBlockWithVirtualColumns() const;
    
    
    Block getBlockWithVirtualPartColumns(const MergeTreeData::DataPartsVector & parts, bool one_part, bool ignore_empty = false) const;
    
    SimpleIncrement insert_increment;
    bool has_non_adaptive_index_granularity_parts = false;
    
    
    
    
    
    
    DataParts currently_moving_parts;
    
    mutable std::mutex moving_parts_mutex;
    PinnedPartUUIDsPtr getPinnedPartUUIDs() const;