diff options
author | ivanmorozov333 <ivanmorozov@ydb.tech> | 2025-02-26 16:30:16 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-26 16:30:16 +0300 |
commit | 802da0937781316edf4bfd23db85a81bcb668f13 (patch) | |
tree | d6d6a3f41da8b2ca49d88229a722bc9f7dac74a9 | |
parent | 7102e38a138198556c3dec40c409a8cbaa36d857 (diff) | |
download | ydb-802da0937781316edf4bfd23db85a81bcb668f13.tar.gz |
fix compaction stats calculation (#15059)
-rw-r--r-- | ydb/core/tx/columnshard/engines/changes/compaction/sub_columns/builder.h | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/ydb/core/tx/columnshard/engines/changes/compaction/sub_columns/builder.h b/ydb/core/tx/columnshard/engines/changes/compaction/sub_columns/builder.h index 71ecda7b8f..2e085c52d7 100644 --- a/ydb/core/tx/columnshard/engines/changes/compaction/sub_columns/builder.h +++ b/ydb/core/tx/columnshard/engines/changes/compaction/sub_columns/builder.h @@ -32,7 +32,8 @@ private: class TGeneralAccessorBuilder { private: std::variant<TSparsedBuilder, TPlainBuilder> Builder; - + YDB_READONLY(ui32, FilledRecordsCount, 0); + YDB_READONLY(ui64, FilledRecordsSize, 0); public: TGeneralAccessorBuilder(TSparsedBuilder&& builder) : Builder(std::move(builder)) { @@ -61,6 +62,8 @@ private: } }; std::visit(TVisitor(recordIndex, value), Builder); + ++FilledRecordsCount; + FilledRecordsSize += value.size(); } std::shared_ptr<NArrow::NAccessor::IChunkedArray> Finish(const ui32 recordsCount) { struct TVisitor { @@ -89,11 +92,16 @@ private: AFL_VERIFY(RecordIndex); auto portionOthersData = OthersBuilder->Finish(Remapper.BuildRemapInfo(OthersBuilder->GetStatsByKeyIndex(), Settings, RecordIndex)); std::vector<std::shared_ptr<NArrow::NAccessor::IChunkedArray>> arrays; - for (auto&& i : ColumnBuilders) { - arrays.emplace_back(i.Finish(RecordIndex)); + TDictStats::TBuilder statsBuilder; + for (ui32 idx = 0; idx < ColumnBuilders.size(); ++idx) { + if (ColumnBuilders[idx].GetFilledRecordsCount()) { + statsBuilder.Add(ResultColumnStats.GetColumnName(idx), ColumnBuilders[idx].GetFilledRecordsCount(), + ColumnBuilders[idx].GetFilledRecordsSize(), ResultColumnStats.GetAccessorType(idx)); + arrays.emplace_back(ColumnBuilders[idx].Finish(RecordIndex)); + } } - TColumnsData cData( - ResultColumnStats, std::make_shared<NArrow::TGeneralContainer>(ResultColumnStats.BuildColumnsSchema()->fields(), std::move(arrays))); + auto stats = statsBuilder.Finish(); + TColumnsData cData(stats, std::make_shared<NArrow::TGeneralContainer>(stats.BuildColumnsSchema()->fields(), std::move(arrays))); Results.back().emplace_back( std::make_shared<TSubColumnsArray>(std::move(cData), std::move(portionOthersData), arrow::binary(), RecordIndex, Settings)); Initialize(); |