diff options
| author | a-dyu <[email protected]> | 2025-09-01 06:27:54 +0300 |
|---|---|---|
| committer | a-dyu <[email protected]> | 2025-09-01 06:43:52 +0300 |
| commit | e44dac19e07f144fdf5735a58cbeb4d108ba7993 (patch) | |
| tree | b2b5cc91b65bdad2c061fbdb1569cc4432f7175d | |
| parent | 636f7611b6129d7340bc59a7c5503d4d54c6d299 (diff) | |
CHYT-636: Add minmax optimization with columnar statistics
* Changelog entry
Type: feature
Component: ytserver-clickhouse
Add optimization for better performance with min/max queries using columnar statistics from nodes.
commit_hash:e6d4f4e5fa25d5411a35c6e91780a364499740b7
| -rw-r--r-- | yt/yt/client/table_client/columnar_statistics.cpp | 9 | ||||
| -rw-r--r-- | yt/yt/client/table_client/columnar_statistics.h | 2 |
2 files changed, 6 insertions, 5 deletions
diff --git a/yt/yt/client/table_client/columnar_statistics.cpp b/yt/yt/client/table_client/columnar_statistics.cpp index 0b8904c2277..d14d8c66d34 100644 --- a/yt/yt/client/table_client/columnar_statistics.cpp +++ b/yt/yt/client/table_client/columnar_statistics.cpp @@ -28,31 +28,30 @@ TNamedColumnarStatistics& TNamedColumnarStatistics::operator+=(const TNamedColum namespace { -constexpr size_t MaxStringValueLength = 100; constexpr auto NullUnversionedValue = MakeNullValue<TUnversionedValue>(); //! Approximates long string values with shorter but lexicographically less ones. Other values are intact. TUnversionedOwningValue ApproximateMinValue(TUnversionedValue value) { - if (value.Type != EValueType::String || value.Length <= MaxStringValueLength) { + if (value.Type != EValueType::String || value.Length <= TColumnarStatistics::MaxStringValueLength) { value.Flags = EValueFlags::None; value.Id = 0; return value; } - return MakeUnversionedStringValue(value.AsStringBuf().SubString(0, MaxStringValueLength)); + return MakeUnversionedStringValue(value.AsStringBuf().SubString(0, TColumnarStatistics::MaxStringValueLength)); } //! Approximates long string values with shorter but lexicographically greater ones. Other values are intact. TUnversionedOwningValue ApproximateMaxValue(TUnversionedValue value) { - if (value.Type != EValueType::String || value.Length <= MaxStringValueLength) { + if (value.Type != EValueType::String || value.Length <= TColumnarStatistics::MaxStringValueLength) { value.Flags = EValueFlags::None; value.Id = 0; return value; } const char MaxChar = std::numeric_limits<unsigned char>::max(); - auto truncatedStringBuf = value.AsStringBuf().SubString(0, MaxStringValueLength); + auto truncatedStringBuf = value.AsStringBuf().SubString(0, TColumnarStatistics::MaxStringValueLength); while (!truncatedStringBuf.empty() && truncatedStringBuf.back() == MaxChar) { truncatedStringBuf.remove_suffix(1); diff --git a/yt/yt/client/table_client/columnar_statistics.h b/yt/yt/client/table_client/columnar_statistics.h index 27af62003b6..b1cea44c642 100644 --- a/yt/yt/client/table_client/columnar_statistics.h +++ b/yt/yt/client/table_client/columnar_statistics.h @@ -54,6 +54,8 @@ struct TLargeColumnarStatistics //! TColumnarStatistics stores per-column statistics of data stored in a chunk/table. struct TColumnarStatistics { + static constexpr size_t MaxStringValueLength = 100; + //! Per-column total data weight for chunks whose meta contains columnar statistics. std::vector<i64> ColumnDataWeights; //! Total weight of all write and delete timestamps. |
