aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov333 <ivanmorozov@ydb.tech>2025-02-26 16:30:16 +0300
committerGitHub <noreply@github.com>2025-02-26 16:30:16 +0300
commit802da0937781316edf4bfd23db85a81bcb668f13 (patch)
treed6d6a3f41da8b2ca49d88229a722bc9f7dac74a9
parent7102e38a138198556c3dec40c409a8cbaa36d857 (diff)
downloadydb-802da0937781316edf4bfd23db85a81bcb668f13.tar.gz
fix compaction stats calculation (#15059)
-rw-r--r--ydb/core/tx/columnshard/engines/changes/compaction/sub_columns/builder.h18
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();