diff --git a/dbms/src/Storages/StorageMergeTree.cpp b/dbms/src/Storages/StorageMergeTree.cpp index 79079aa3095..64950a47437 100644 --- a/dbms/src/Storages/StorageMergeTree.cpp +++ b/dbms/src/Storages/StorageMergeTree.cpp @@ -151,6 +151,11 @@ std::optional StorageMergeTree::totalRows() const return getTotalActiveSizeInRows(); } +std::optional StorageMergeTree::totalBytes() const +{ + return getTotalActiveSizeInBytes(); +} + BlockOutputStreamPtr StorageMergeTree::write(const ASTPtr & /*query*/, const Context & context) { return std::make_shared(*this, context.getSettingsRef().max_partitions_per_insert_block); diff --git a/dbms/src/Storages/StorageMergeTree.h b/dbms/src/Storages/StorageMergeTree.h index 93d7ac89832..8161e0b5c4b 100644 --- a/dbms/src/Storages/StorageMergeTree.h +++ b/dbms/src/Storages/StorageMergeTree.h @@ -46,6 +46,7 @@ public: unsigned num_streams) override; std::optional totalRows() const override; + std::optional totalBytes() const override; BlockOutputStreamPtr write(const ASTPtr & query, const Context & context) override; diff --git a/dbms/src/Storages/StorageReplicatedMergeTree.cpp b/dbms/src/Storages/StorageReplicatedMergeTree.cpp index 3d4a3bd9451..90c0d3418e6 100644 --- a/dbms/src/Storages/StorageReplicatedMergeTree.cpp +++ b/dbms/src/Storages/StorageReplicatedMergeTree.cpp @@ -2995,9 +2995,9 @@ Pipes StorageReplicatedMergeTree::read( } -std::optional StorageReplicatedMergeTree::totalRows() const +template +void StorageReplicatedMergeTree::foreachCommittedParts(const Func & func) const { - size_t res = 0; auto max_added_blocks = getMaxAddedBlocks(); auto lock = lockParts(); for (auto & part : getDataPartsStateRange(DataPartState::Committed)) @@ -3009,8 +3009,21 @@ std::optional StorageReplicatedMergeTree::totalRows() const if (blocks_iterator == max_added_blocks.end() || part->info.max_block > blocks_iterator->second) continue; - res += part->rows_count; + func(part); } +} + +std::optional StorageReplicatedMergeTree::totalRows() const +{ + UInt64 res = 0; + foreachCommittedParts([&res](auto & part) { res += part->rows_count; }); + return res; +} + +std::optional StorageReplicatedMergeTree::totalBytes() const +{ + UInt64 res = 0; + foreachCommittedParts([&res](auto & part) { res += part->getBytesOnDisk(); }); return res; } diff --git a/dbms/src/Storages/StorageReplicatedMergeTree.h b/dbms/src/Storages/StorageReplicatedMergeTree.h index 1b92310b39d..b8132329ae4 100644 --- a/dbms/src/Storages/StorageReplicatedMergeTree.h +++ b/dbms/src/Storages/StorageReplicatedMergeTree.h @@ -96,6 +96,7 @@ public: unsigned num_streams) override; std::optional totalRows() const override; + std::optional totalBytes() const override; BlockOutputStreamPtr write(const ASTPtr & query, const Context & context) override; @@ -287,6 +288,9 @@ private: /// True if replica was created for existing table with fixed granularity bool other_replicas_fixed_granularity = false; + template + void foreachCommittedParts(const Func & func) const; + /** Creates the minimum set of nodes in ZooKeeper. */ void createTableIfNotExists();