6
6
#include < ydb/core/tx/columnshard/hooks/testing/controller.h>
7
7
#include < ydb/public/sdk/cpp/client/ydb_types/status_codes.h>
8
8
9
+ #include < ydb/core/statistics/events.h>
10
+
9
11
#include < library/cpp/testing/unittest/registar.h>
10
12
11
13
namespace NKikimr ::NKqp {
@@ -59,7 +61,7 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
59
61
60
62
{
61
63
auto alterQuery = TStringBuilder () <<
62
- R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
64
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
63
65
FEATURES=`{"column_names" : ["uid"], "false_positive_probability" : 0.05}`);
64
66
)" ;
65
67
auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
@@ -68,7 +70,7 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
68
70
}
69
71
{
70
72
auto alterQuery = TStringBuilder () <<
71
- R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_resource_id, TYPE=BLOOM_FILTER,
73
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_resource_id, TYPE=BLOOM_FILTER,
72
74
FEATURES=`{"column_names" : ["resource_id", "level"], "false_positive_probability" : 0.05}`);
73
75
)" ;
74
76
auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
@@ -105,6 +107,129 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
105
107
}
106
108
}
107
109
110
+ Y_UNIT_TEST (CountMinSketchIndex) {
111
+ auto settings = TKikimrSettings ()
112
+ .SetWithSampleTables (false );
113
+ TKikimrRunner kikimr (settings);
114
+
115
+ auto csController = NYDBTest::TControllers::RegisterCSControllerGuard<NYDBTest::NColumnShard::TController>();
116
+ csController->SetOverridePeriodicWakeupActivationPeriod (TDuration::Seconds (1 ));
117
+ csController->SetOverrideLagForCompactionBeforeTierings (TDuration::Seconds (1 ));
118
+ csController->SetOverrideReduceMemoryIntervalLimit (1LLU << 30 );
119
+
120
+ TLocalHelper (kikimr).CreateTestOlapTable ();
121
+ auto tableClient = kikimr.GetTableClient ();
122
+
123
+ Tests::NCommon::TLoggerInit (kikimr).SetComponents ({NKikimrServices::TX_COLUMNSHARD}, " CS" ).SetPriority (NActors::NLog::PRI_DEBUG).Initialize ();
124
+
125
+ {
126
+ auto alterQuery = TStringBuilder () <<
127
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=cms_ts, TYPE=COUNT_MIN_SKETCH,
128
+ FEATURES=`{"column_names" : ['timestamp']}`);
129
+ )" ;
130
+ auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
131
+ auto alterResult = session.ExecuteSchemeQuery (alterQuery).GetValueSync ();
132
+ UNIT_ASSERT_VALUES_EQUAL_C (alterResult.GetStatus (), NYdb::EStatus::SUCCESS, alterResult.GetIssues ().ToString ());
133
+ }
134
+
135
+ {
136
+ auto alterQuery = TStringBuilder () <<
137
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=cms_res_id, TYPE=COUNT_MIN_SKETCH,
138
+ FEATURES=`{"column_names" : ['resource_id']}`);
139
+ )" ;
140
+ auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
141
+ auto alterResult = session.ExecuteSchemeQuery (alterQuery).GetValueSync ();
142
+ UNIT_ASSERT_VALUES_EQUAL_C (alterResult.GetStatus (), NYdb::EStatus::SUCCESS, alterResult.GetIssues ().ToString ());
143
+ }
144
+
145
+ {
146
+ auto alterQuery = TStringBuilder () <<
147
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=cms_uid, TYPE=COUNT_MIN_SKETCH,
148
+ FEATURES=`{"column_names" : ['uid']}`);
149
+ )" ;
150
+ auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
151
+ auto alterResult = session.ExecuteSchemeQuery (alterQuery).GetValueSync ();
152
+ UNIT_ASSERT_VALUES_EQUAL_C (alterResult.GetStatus (), NYdb::EStatus::SUCCESS, alterResult.GetIssues ().ToString ());
153
+ }
154
+
155
+ {
156
+ auto alterQuery = TStringBuilder () <<
157
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=cms_level, TYPE=COUNT_MIN_SKETCH,
158
+ FEATURES=`{"column_names" : ['level']}`);
159
+ )" ;
160
+ auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
161
+ auto alterResult = session.ExecuteSchemeQuery (alterQuery).GetValueSync ();
162
+ UNIT_ASSERT_VALUES_EQUAL_C (alterResult.GetStatus (), NYdb::EStatus::SUCCESS, alterResult.GetIssues ().ToString ());
163
+ }
164
+
165
+ {
166
+ auto alterQuery = TStringBuilder () <<
167
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=cms_message, TYPE=COUNT_MIN_SKETCH,
168
+ FEATURES=`{"column_names" : ['message']}`);
169
+ )" ;
170
+ auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
171
+ auto alterResult = session.ExecuteSchemeQuery (alterQuery).GetValueSync ();
172
+ UNIT_ASSERT_VALUES_EQUAL_C (alterResult.GetStatus (), NYdb::EStatus::SUCCESS, alterResult.GetIssues ().ToString ());
173
+ }
174
+
175
+ WriteTestData (kikimr, " /Root/olapStore/olapTable" , 1000000 , 300000000 , 10000 );
176
+ WriteTestData (kikimr, " /Root/olapStore/olapTable" , 1100000 , 300100000 , 10000 );
177
+ WriteTestData (kikimr, " /Root/olapStore/olapTable" , 1200000 , 300200000 , 10000 );
178
+ WriteTestData (kikimr, " /Root/olapStore/olapTable" , 1300000 , 300300000 , 10000 );
179
+ WriteTestData (kikimr, " /Root/olapStore/olapTable" , 1400000 , 300400000 , 10000 );
180
+ WriteTestData (kikimr, " /Root/olapStore/olapTable" , 2000000 , 200000000 , 70000 );
181
+ WriteTestData (kikimr, " /Root/olapStore/olapTable" , 3000000 , 100000000 , 110000 );
182
+
183
+ csController->WaitActualization (TDuration::Seconds (10 ));
184
+ {
185
+ auto runtime = kikimr.GetTestServer ().GetRuntime ();
186
+ auto sender = runtime->AllocateEdgeActor ();
187
+
188
+ TAutoPtr<IEventHandle> handle;
189
+
190
+ size_t shard = 0 ;
191
+ std::set<ui64> pathids;
192
+ for (auto && i : csController->GetShardActualIds ()) {
193
+ Cerr << " >>> shard actual id: " << i << Endl;
194
+ for (auto && j : csController->GetPathIds (i)) {
195
+ Cerr << " >>> path id: " << j << Endl;
196
+ pathids.insert (j);
197
+ }
198
+ if (++shard == 3 )
199
+ break ;
200
+ }
201
+
202
+ UNIT_ASSERT (pathids.size () == 1 );
203
+ ui64 pathId = *pathids.begin ();
204
+
205
+ shard = 0 ;
206
+ for (auto && i : csController->GetShardActualIds ()) {
207
+ auto request = std::make_unique<NStat::TEvStatistics::TEvStatisticsRequest>();
208
+ request->Record .MutableTable ()->MutablePathId ()->SetLocalId (pathId);
209
+
210
+ runtime->Send (MakePipePerNodeCacheID (false ), sender, new TEvPipeCache::TEvForward (
211
+ request.release (), i, false ));
212
+ if (++shard == 3 )
213
+ break ;
214
+ }
215
+
216
+ auto sketch = std::unique_ptr<TCountMinSketch>(TCountMinSketch::Create ());
217
+ for (size_t shard = 0 ; shard < 3 ; ++shard) {
218
+ auto event = runtime->GrabEdgeEvent <NStat::TEvStatistics::TEvStatisticsResponse>(handle);
219
+ UNIT_ASSERT (event);
220
+
221
+ auto & response = event->Record ;
222
+ // Cerr << response << Endl;
223
+ UNIT_ASSERT_VALUES_EQUAL (response.GetStatus (), NKikimrStat::TEvStatisticsResponse::STATUS_SUCCESS);
224
+ UNIT_ASSERT (response.ColumnsSize () == 5 );
225
+ TString someData = response.GetColumns (0 ).GetStatistics (0 ).GetData ();
226
+ *sketch += *std::unique_ptr<TCountMinSketch>(TCountMinSketch::FromString (someData.data (), someData.size ()));
227
+ Cerr << " >>> sketch.GetElementCount() = " << sketch->GetElementCount () << Endl;
228
+ UNIT_ASSERT (sketch->GetElementCount () > 0 );
229
+ }
230
+ }
231
+ }
232
+
108
233
Y_UNIT_TEST (SchemeActualizationOnceOnStart) {
109
234
auto settings = TKikimrSettings ()
110
235
.SetWithSampleTables (false );
@@ -194,7 +319,7 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
194
319
195
320
{
196
321
auto alterQuery = TStringBuilder () << Sprintf (
197
- R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
322
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
198
323
FEATURES=`{"column_names" : ["uid"], "false_positive_probability" : 0.05, "storage_id" : "%s"}`);
199
324
)" , StorageId.data ());
200
325
auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
@@ -203,7 +328,7 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
203
328
}
204
329
{
205
330
auto alterQuery = TStringBuilder () << Sprintf (
206
- R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_resource_id, TYPE=BLOOM_FILTER,
331
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_resource_id, TYPE=BLOOM_FILTER,
207
332
FEATURES=`{"column_names" : ["resource_id", "level"], "false_positive_probability" : 0.05, "storage_id" : "%s"}`);
208
333
)" , StorageId.data ()
209
334
);
@@ -347,7 +472,7 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
347
472
348
473
{
349
474
auto alterQuery = TStringBuilder () <<
350
- R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
475
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
351
476
FEATURES=`{"column_names" : ["uid"], "false_positive_probability" : 0.05}`);
352
477
)" ;
353
478
auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
@@ -357,7 +482,7 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
357
482
358
483
{
359
484
auto alterQuery = TStringBuilder () <<
360
- R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
485
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
361
486
FEATURES=`{"column_names" : ["uid", "resource_id"], "false_positive_probability" : 0.05}`);
362
487
)" ;
363
488
auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
@@ -367,7 +492,7 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
367
492
368
493
{
369
494
auto alterQuery = TStringBuilder () <<
370
- R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
495
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
371
496
FEATURES=`{"column_names" : ["uid"], "false_positive_probability" : 0.005}`);
372
497
)" ;
373
498
auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
@@ -377,7 +502,7 @@ Y_UNIT_TEST_SUITE(KqpOlapIndexes) {
377
502
378
503
{
379
504
auto alterQuery = TStringBuilder () <<
380
- R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
505
+ R"( ALTER OBJECT `/Root/olapStore` (TYPE TABLESTORE) SET (ACTION=UPSERT_INDEX, NAME=index_uid, TYPE=BLOOM_FILTER,
381
506
FEATURES=`{"column_names" : ["uid"], "false_positive_probability" : 0.01}`);
382
507
)" ;
383
508
auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
0 commit comments