Browse Source

[YQL] Added sorted orderings info to the statistics
commit_hash:7cd33f02e3ebdd079bc055b19c2008f1d3746061

pudge1000-7 3 months ago
parent
commit
09e8c873de
2 changed files with 43 additions and 3 deletions
  1. 33 3
      yql/essentials/core/yql_statistics.cpp
  2. 10 0
      yql/essentials/core/yql_statistics.h

+ 33 - 3
yql/essentials/core/yql_statistics.cpp

@@ -46,12 +46,42 @@ std::ostream& NYql::operator<<(std::ostream& os, const TOptimizerStatistics& s)
     os << "Type: " << ConvertToStatisticsTypeString(s.Type) << ", Nrows: " << s.Nrows
         << ", Ncols: " << s.Ncols << ", ByteSize: " << s.ByteSize << ", Cost: " << s.Cost;
     if (s.KeyColumns) {
-        for (const auto& c : s.KeyColumns->Data) {
-            os << ", " << c;
+        os << ", keys: ";
+
+        std::string tmp;
+        for (const auto& c: s.KeyColumns->Data) {
+            tmp.append(c).append(", ");
+        }
+
+        if (!tmp.empty()) {
+            tmp.pop_back();
+            tmp.pop_back();
         }
+        os << tmp;
     }
     os << ", Sel: " << s.Selectivity;
     os << ", Storage: " << ConvertToStatisticsTypeString(s.StorageType);
+    if (s.SortColumns) {
+        os << ", sorted: ";
+
+        std::string tmp;
+        for (size_t i = 0; i < s.SortColumns->Columns.size() && i < s.SortColumns->Aliases.size(); i++) {
+            auto c = s.SortColumns->Columns[i];
+            auto a = s.SortColumns->Aliases[i];
+            if (a.empty()) {
+                tmp.append(a).append(".");
+            }
+
+            tmp.append(c).append(", ");
+        }
+
+        if (!tmp.empty()) {
+            tmp.pop_back();
+            tmp.pop_back();
+        }
+
+        os << tmp;
+    }
     return os;
 }
 
@@ -91,6 +121,7 @@ TOptimizerStatistics& TOptimizerStatistics::operator+=(const TOptimizerStatistic
 
 std::shared_ptr<TOptimizerStatistics> NYql::OverrideStatistics(const NYql::TOptimizerStatistics& s, const TStringBuf& tablePath, const std::shared_ptr<NJson::TJsonValue>& stats) {
     auto res = std::make_shared<TOptimizerStatistics>(s.Type, s.Nrows, s.Ncols, s.ByteSize, s.Cost, s.KeyColumns, s.ColumnStatistics, s.StorageType, s.Specific);
+    res->SortColumns = s.SortColumns;
 
     auto dbStats = stats->GetMapSafe();
 
@@ -141,7 +172,6 @@ std::shared_ptr<TOptimizerStatistics> NYql::OverrideStatistics(const NYql::TOpti
 
                 TString countMinRaw{};
                 Base64StrictDecode(countMinBase64, countMinRaw);
-                
                 cStat.CountMinSketch.reset(NKikimr::TCountMinSketch::FromString(countMinRaw.data(), countMinRaw.size()));
             }
 

+ 10 - 0
yql/essentials/core/yql_statistics.h

@@ -53,6 +53,15 @@ struct TOptimizerStatistics {
         TKeyColumns(const TVector<TString>& vec) : Data(vec) {}
     };
 
+    struct TSortColumns : public TSimpleRefCount<TSortColumns> {
+        TVector<TString> Columns;
+        TVector<TString> Aliases;
+        TSortColumns(const TVector<TString>& cols, const TVector<TString>& aliases)
+            : Columns(cols)
+            , Aliases(aliases)
+        {}
+    };
+
     struct TColumnStatMap : public TSimpleRefCount<TColumnStatMap> {
         THashMap<TString,TColumnStatistics> Data;
         TColumnStatMap() {}
@@ -68,6 +77,7 @@ struct TOptimizerStatistics {
     TIntrusivePtr<TKeyColumns> KeyColumns;
     TIntrusivePtr<TColumnStatMap> ColumnStatistics;
     EStorageType StorageType = EStorageType::NA;
+    TIntrusivePtr<TSortColumns> SortColumns;
     std::shared_ptr<IProviderStatistics> Specific;
     std::shared_ptr<TVector<TString>> Labels = {};