Skip to content

Commit cb1675a

Browse files
authored
Fix: vector index description wasn't persisted (#11969)
1 parent 4805600 commit cb1675a

File tree

15 files changed

+155
-78
lines changed

15 files changed

+155
-78
lines changed

ydb/core/tx/schemeshard/schemeshard__conditional_erase.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,8 @@ struct TSchemeShard::TTxRunConditionalErase: public TSchemeShard::TRwTxBase {
230230
}
231231

232232
auto index = GetIndex(childPath);
233-
if (index->Type == NKikimrSchemeOp::EIndexTypeGlobalAsync) {
233+
if (index->Type == NKikimrSchemeOp::EIndexTypeGlobalAsync
234+
|| index->Type == NKikimrSchemeOp::EIndexTypeGlobalVectorKmeansTree) {
234235
continue;
235236
}
236237

@@ -267,6 +268,7 @@ struct TSchemeShard::TTxRunConditionalErase: public TSchemeShard::TRwTxBase {
267268
}
268269

269270
static TVector<std::pair<ui32, ui32>> MakeColumnIds(TTableInfo::TPtr mainTable, TTableIndexInfo::TPtr index, TTableInfo::TPtr indexImplTable) {
271+
Y_ABORT_UNLESS(index->Type != NKikimrSchemeOp::EIndexType::EIndexTypeGlobalVectorKmeansTree);
270272
TVector<std::pair<ui32, ui32>> result;
271273
THashSet<TString> keys;
272274

ydb/core/tx/schemeshard/schemeshard__init.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -987,18 +987,9 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
987987
return LoadBackupStatusesImpl(statuses, byShardBackupStatus, byMigratedShardBackupStatus, byTxShardStatus);
988988
}
989989

990-
typedef std::tuple<TPathId, ui64, NKikimrSchemeOp::EIndexType, NKikimrSchemeOp::EIndexState> TTableIndexRec;
990+
typedef std::tuple<TPathId, ui64, NKikimrSchemeOp::EIndexType, NKikimrSchemeOp::EIndexState, TString> TTableIndexRec;
991991
typedef TDeque<TTableIndexRec> TTableIndexRows;
992992

993-
template <typename SchemaTable, typename TRowSet>
994-
static TTableIndexRec MakeTableIndexRec(const TPathId& pathId, TRowSet& rowSet) {
995-
return std::make_tuple(pathId,
996-
rowSet.template GetValue<typename SchemaTable::AlterVersion>(),
997-
rowSet.template GetValue<typename SchemaTable::IndexType>(),
998-
rowSet.template GetValue<typename SchemaTable::State>()
999-
);
1000-
}
1001-
1002993
bool LoadTableIndexes(NIceDb::TNiceDb& db, TTableIndexRows& tableIndexes) const {
1003994
{
1004995
auto rowSet = db.Table<Schema::TableIndex>().Range().Select();
@@ -1007,7 +998,13 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
1007998
}
1008999
while (!rowSet.EndOfSet()) {
10091000
const auto pathId = Self->MakeLocalId(TLocalPathId(rowSet.GetValue<Schema::TableIndex::PathId>()));
1010-
tableIndexes.push_back(MakeTableIndexRec<Schema::TableIndex>(pathId, rowSet));
1001+
tableIndexes.emplace_back(
1002+
pathId,
1003+
rowSet.GetValue<Schema::TableIndex::AlterVersion>(),
1004+
rowSet.GetValue<Schema::TableIndex::IndexType>(),
1005+
rowSet.GetValue<Schema::TableIndex::State>(),
1006+
rowSet.GetValue<Schema::TableIndex::Description>()
1007+
);
10111008

10121009
if (!rowSet.Next()) {
10131010
return false;
@@ -1024,7 +1021,13 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
10241021
TOwnerId(rowSet.GetValue<Schema::MigratedTableIndex::OwnerPathId>()),
10251022
TLocalPathId(rowSet.GetValue<Schema::MigratedTableIndex::LocalPathId>())
10261023
);
1027-
tableIndexes.push_back(MakeTableIndexRec<Schema::MigratedTableIndex>(pathId, rowSet));
1024+
tableIndexes.emplace_back(
1025+
pathId,
1026+
rowSet.GetValue<Schema::MigratedTableIndex::AlterVersion>(),
1027+
rowSet.GetValue<Schema::MigratedTableIndex::IndexType>(),
1028+
rowSet.GetValue<Schema::MigratedTableIndex::State>(),
1029+
TString{}
1030+
);
10281031

10291032
if (!rowSet.Next()) {
10301033
return false;
@@ -2791,6 +2794,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
27912794
ui64 alterVersion = std::get<1>(rec);
27922795
TTableIndexInfo::EType indexType = std::get<2>(rec);
27932796
TTableIndexInfo::EState state = std::get<3>(rec);
2797+
auto description = std::get<4>(rec);
27942798

27952799
Y_VERIFY_S(Self->PathsById.contains(pathId), "Path doesn't exist, pathId: " << pathId);
27962800
TPathElement::TPtr path = Self->PathsById.at(pathId);
@@ -2799,7 +2803,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
27992803
<< ", path type: " << NKikimrSchemeOp::EPathType_Name(path->PathType));
28002804

28012805
Y_ABORT_UNLESS(!Self->Indexes.contains(pathId));
2802-
Self->Indexes[pathId] = new TTableIndexInfo(alterVersion, indexType, state);
2806+
Self->Indexes[pathId] = new TTableIndexInfo(alterVersion, indexType, state, description);
28032807
Self->IncrementPathDbRefCount(pathId);
28042808
}
28052809

@@ -2816,6 +2820,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
28162820
ui64 alterVersion = rowset.GetValue<Schema::TableIndexAlterData::AlterVersion>();
28172821
TTableIndexInfo::EType indexType = rowset.GetValue<Schema::TableIndexAlterData::IndexType>();
28182822
TTableIndexInfo::EState state = rowset.GetValue<Schema::TableIndexAlterData::State>();
2823+
auto description = rowset.GetValue<Schema::TableIndexAlterData::Description>();
28192824

28202825
Y_VERIFY_S(Self->PathsById.contains(pathId), "Path doesn't exist, pathId: " << pathId);
28212826
TPathElement::TPtr path = Self->PathsById.at(pathId);
@@ -2828,7 +2833,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
28282833
auto tableIndex = Self->Indexes.at(pathId);
28292834
Y_ABORT_UNLESS(tableIndex->AlterData == nullptr);
28302835
Y_ABORT_UNLESS(tableIndex->AlterVersion < alterVersion);
2831-
tableIndex->AlterData = new TTableIndexInfo(alterVersion, indexType, state);
2836+
tableIndex->AlterData = new TTableIndexInfo(alterVersion, indexType, state, description);
28322837

28332838
Y_VERIFY_S(Self->PathsById.contains(path->ParentPathId), "Parent path is not found"
28342839
<< ", index pathId: " << pathId

ydb/core/tx/schemeshard/schemeshard__operation_consistent_copy_tables.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ NKikimrSchemeOp::TModifyScheme CreateIndexTask(NKikimr::NSchemeShard::TTableInde
3535
operation->SetName(dst.LeafName());
3636

3737
operation->SetType(indexInfo->Type);
38+
Y_ABORT_UNLESS(indexInfo->Type != NKikimrSchemeOp::EIndexType::EIndexTypeGlobalVectorKmeansTree);
3839
for (const auto& keyName: indexInfo->IndexKeys) {
3940
*operation->MutableKeyColumnNames()->Add() = keyName;
4041
}
@@ -174,9 +175,14 @@ bool CreateConsistentCopyTables(
174175
}
175176

176177
Y_ABORT_UNLESS(srcIndexPath.Base()->PathId == pathId);
178+
TTableIndexInfo::TPtr indexInfo = context.SS->Indexes.at(pathId);
179+
if (indexInfo->Type == NKikimrSchemeOp::EIndexType::EIndexTypeGlobalVectorKmeansTree) {
180+
result = {CreateReject(nextId, NKikimrScheme::EStatus::StatusInvalidParameter,
181+
"Consistent copy table doesn't support table with vector index")};
182+
return false;
183+
}
177184
Y_VERIFY_S(srcIndexPath.Base()->GetChildren().size() == 1, srcIndexPath.PathString() << " has children " << srcIndexPath.Base()->GetChildren().size() << " but 1 expected");
178185

179-
TTableIndexInfo::TPtr indexInfo = context.SS->Indexes.at(pathId);
180186
result.push_back(CreateNewTableIndex(NextPartId(nextId, result), CreateIndexTask(indexInfo, dstIndexPath)));
181187

182188
TString srcImplTableName = srcIndexPath.Base()->GetChildren().begin()->first;

ydb/core/tx/schemeshard/schemeshard__operation_copy_table.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,10 @@ TVector<ISubOperation::TPtr> CreateCopyTable(TOperationId nextId, const TTxTrans
862862
auto operation = schema.MutableCreateTableIndex();
863863
operation->SetName(name);
864864
operation->SetType(indexInfo->Type);
865+
if (indexInfo->Type == NKikimrSchemeOp::EIndexType::EIndexTypeGlobalVectorKmeansTree) {
866+
return {CreateReject(nextId, NKikimrScheme::EStatus::StatusInvalidParameter,
867+
"Copy table doesn't support table with vector index")};
868+
}
865869
for (const auto& keyName: indexInfo->IndexKeys) {
866870
*operation->MutableKeyColumnNames()->Add() = keyName;
867871
}

ydb/core/tx/schemeshard/schemeshard_build_index__create.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ class TSchemeShard::TIndexBuilder::TTxCreate: public TSchemeShard::TIndexBuilder
229229
NKikimrSchemeOp::TVectorIndexKmeansTreeDescription vectorIndexKmeansTreeDescription;
230230
*vectorIndexKmeansTreeDescription.MutableSettings() = index.global_vector_kmeans_tree_index().vector_settings();
231231
buildInfo.SpecializedIndexDescription = vectorIndexKmeansTreeDescription;
232+
buildInfo.KMeans.K = std::max<ui32>(2, vectorIndexKmeansTreeDescription.GetSettings().clusters());
233+
buildInfo.KMeans.Levels = std::max<ui32>(1, vectorIndexKmeansTreeDescription.GetSettings().levels());
232234
break;
233235
}
234236
case Ydb::Table::TableIndex::TypeCase::TYPE_NOT_SET:

ydb/core/tx/schemeshard/schemeshard_impl.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1695,7 +1695,8 @@ void TSchemeShard::PersistTableIndex(NIceDb::TNiceDb& db, const TPathId& pathId)
16951695
db.Table<Schema::TableIndex>().Key(element->PathId.LocalPathId).Update(
16961696
NIceDb::TUpdate<Schema::TableIndex::AlterVersion>(alterData->AlterVersion),
16971697
NIceDb::TUpdate<Schema::TableIndex::IndexType>(alterData->Type),
1698-
NIceDb::TUpdate<Schema::TableIndex::State>(alterData->State));
1698+
NIceDb::TUpdate<Schema::TableIndex::State>(alterData->State),
1699+
NIceDb::TUpdate<Schema::TableIndex::Description>(alterData->SerializeDescription()));
16991700

17001701
db.Table<Schema::TableIndexAlterData>().Key(element->PathId.LocalPathId).Delete();
17011702

@@ -1730,7 +1731,8 @@ void TSchemeShard::PersistTableIndexAlterData(NIceDb::TNiceDb& db, const TPathId
17301731
db.Table<Schema::TableIndexAlterData>().Key(elem->PathId.LocalPathId).Update(
17311732
NIceDb::TUpdate<Schema::TableIndexAlterData::AlterVersion>(alterData->AlterVersion),
17321733
NIceDb::TUpdate<Schema::TableIndexAlterData::IndexType>(alterData->Type),
1733-
NIceDb::TUpdate<Schema::TableIndexAlterData::State>(alterData->State));
1734+
NIceDb::TUpdate<Schema::TableIndexAlterData::State>(alterData->State),
1735+
NIceDb::TUpdate<Schema::TableIndexAlterData::Description>(alterData->SerializeDescription()));
17341736

17351737
for (ui32 keyIdx = 0; keyIdx < alterData->IndexKeys.size(); ++keyIdx) {
17361738
db.Table<Schema::TableIndexKeysAlterData>().Key(elem->PathId.LocalPathId, keyIdx).Update(
@@ -7477,19 +7479,19 @@ void TSchemeShard::ResolveSA() {
74777479
StatisticsAggregatorId = subDomainInfo->GetTenantStatisticsAggregatorID();
74787480
LOG_DEBUG_S(TlsActivationContext->AsActorContext(), NKikimrServices::STATISTICS,
74797481
"ResolveSA(), StatisticsAggregatorId=" << StatisticsAggregatorId
7480-
<< ", at schemeshard: " << TabletID());
7482+
<< ", at schemeshard: " << TabletID());
74817483
ConnectToSA();
74827484
}
74837485
}
74847486

74857487
void TSchemeShard::ConnectToSA() {
74867488
if (!EnableStatistics)
74877489
return;
7488-
7490+
74897491
if (!StatisticsAggregatorId) {
74907492
LOG_DEBUG_S(TlsActivationContext->AsActorContext(), NKikimrServices::STATISTICS,
74917493
"ConnectToSA(), no StatisticsAggregatorId"
7492-
<< ", at schemeshard: " << TabletID());
7494+
<< ", at schemeshard: " << TabletID());
74937495
return;
74947496
}
74957497
auto policy = NTabletPipe::TClientRetryPolicy::WithRetries();
@@ -7606,8 +7608,8 @@ TDuration TSchemeShard::SendBaseStatsToSA() {
76067608
<< ", path count: " << count
76077609
<< ", at schemeshard: " << TabletID());
76087610

7609-
return TDuration::Seconds(SendStatsIntervalMinSeconds
7610-
+ RandomNumber<ui64>(SendStatsIntervalMaxSeconds - SendStatsIntervalMinSeconds));
7611+
return TDuration::Seconds(SendStatsIntervalMinSeconds
7612+
+ RandomNumber<ui64>(SendStatsIntervalMaxSeconds - SendStatsIntervalMinSeconds));
76117613
}
76127614

76137615
} // namespace NSchemeShard

ydb/core/tx/schemeshard/schemeshard_info_types.h

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2371,11 +2371,16 @@ struct TTableIndexInfo : public TSimpleRefCount<TTableIndexInfo> {
23712371
using EType = NKikimrSchemeOp::EIndexType;
23722372
using EState = NKikimrSchemeOp::EIndexState;
23732373

2374-
TTableIndexInfo(ui64 version, EType type, EState state)
2374+
TTableIndexInfo(ui64 version, EType type, EState state, std::string_view description)
23752375
: AlterVersion(version)
23762376
, Type(type)
23772377
, State(state)
2378-
{}
2378+
{
2379+
if (type == NKikimrSchemeOp::EIndexType::EIndexTypeGlobalVectorKmeansTree) {
2380+
Y_ABORT_UNLESS(SpecializedIndexDescription.emplace<NKikimrSchemeOp::TVectorIndexKmeansTreeDescription>()
2381+
.ParseFromString(description));
2382+
}
2383+
}
23792384

23802385
TTableIndexInfo(const TTableIndexInfo&) = default;
23812386

@@ -2391,8 +2396,20 @@ struct TTableIndexInfo : public TSimpleRefCount<TTableIndexInfo> {
23912396
return result;
23922397
}
23932398

2399+
TString SerializeDescription() const {
2400+
return std::visit([]<typename T>(const T& v) {
2401+
if constexpr (std::is_same_v<std::monostate, T>) {
2402+
return TString{};
2403+
} else {
2404+
TString str{v.SerializeAsString()};
2405+
Y_ABORT_UNLESS(!str.empty());
2406+
return str;
2407+
}
2408+
}, SpecializedIndexDescription);
2409+
}
2410+
23942411
static TPtr NotExistedYet(EType type) {
2395-
return new TTableIndexInfo(0, type, EState::EIndexStateInvalid);
2412+
return new TTableIndexInfo(0, type, EState::EIndexStateInvalid, {});
23962413
}
23972414

23982415
static TPtr Create(const NKikimrSchemeOp::TIndexCreationConfig& config, TString& errMsg) {
@@ -2405,7 +2422,7 @@ struct TTableIndexInfo : public TSimpleRefCount<TTableIndexInfo> {
24052422

24062423
TPtr alterData = result->CreateNextVersion();
24072424
alterData->IndexKeys.assign(config.GetKeyColumnNames().begin(), config.GetKeyColumnNames().end());
2408-
Y_ABORT_UNLESS(alterData->IndexKeys.size());
2425+
Y_ABORT_UNLESS(!alterData->IndexKeys.empty());
24092426
alterData->IndexDataColumns.assign(config.GetDataColumnNames().begin(), config.GetDataColumnNames().end());
24102427

24112428
alterData->State = config.HasState() ? config.GetState() : EState::EIndexStateReady;

ydb/core/tx/schemeshard/schemeshard_schema.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,9 +1022,11 @@ struct Schema : NIceDb::Schema {
10221022
struct AlterVersion : Column<3, NScheme::NTypeIds::Uint64> {};
10231023
struct IndexType : Column<4, NScheme::NTypeIds::Uint32> { using Type = NKikimrSchemeOp::EIndexType; static constexpr Type Default = NKikimrSchemeOp::EIndexTypeInvalid; };
10241024
struct State : Column<5, NScheme::NTypeIds::Uint32> { using Type = NKikimrSchemeOp::EIndexState; static constexpr Type Default = NKikimrSchemeOp::EIndexStateInvalid; };
1025+
// One of the SpecializedIndexDescription protobufs serialized as a string.
1026+
struct Description : Column<6, NScheme::NTypeIds::String> {};
10251027

10261028
using TKey = TableKey<PathId>;
1027-
using TColumns = TableColumns<PathId, AlterVersion, IndexType, State>;
1029+
using TColumns = TableColumns<PathId, AlterVersion, IndexType, State, Description>;
10281030
};
10291031

10301032
struct MigratedTableIndex : Table<67> {
@@ -1043,9 +1045,11 @@ struct Schema : NIceDb::Schema {
10431045
struct AlterVersion : Column<3, NScheme::NTypeIds::Uint64> {};
10441046
struct IndexType : Column<4, NScheme::NTypeIds::Uint32> { using Type = NKikimrSchemeOp::EIndexType; static constexpr Type Default = NKikimrSchemeOp::EIndexTypeInvalid; };
10451047
struct State : Column<5, NScheme::NTypeIds::Uint32> { using Type = NKikimrSchemeOp::EIndexState; static constexpr Type Default = NKikimrSchemeOp::EIndexStateInvalid; };
1048+
// One of the SpecializedIndexDescription protobufs serialized as a string.
1049+
struct Description : Column<6, NScheme::NTypeIds::String> {};
10461050

10471051
using TKey = TableKey<PathId>;
1048-
using TColumns = TableColumns<PathId, AlterVersion, IndexType, State>;
1052+
using TColumns = TableColumns<PathId, AlterVersion, IndexType, State, Description>;
10491053
};
10501054

10511055
struct TableIndexKeys : Table<40> {
@@ -1326,7 +1330,7 @@ struct Schema : NIceDb::Schema {
13261330
struct AlterMainTableTxDone : Column<33, NScheme::NTypeIds::Bool> {};
13271331

13281332
// Serialized as string NKikimrSchemeOp::TIndexCreationConfig protobuf.
1329-
struct CreationConfig : Column<34, NScheme::NTypeIds::String> { using Type = TString; };
1333+
struct CreationConfig : Column<34, NScheme::NTypeIds::String> {};
13301334

13311335
struct ReadRowsBilled : Column<35, NScheme::NTypeIds::Uint64> {};
13321336
struct ReadBytesBilled : Column<36, NScheme::NTypeIds::Uint64> {};
@@ -1440,7 +1444,7 @@ struct Schema : NIceDb::Schema {
14401444
struct LocalShardIdx : Column<3, NScheme::NTypeIds::Uint64> { using Type = TLocalShardIdx; };
14411445

14421446
struct Range : Column<4, NScheme::NTypeIds::String> { using Type = NKikimrTx::TKeyRange; };
1443-
struct LastKeyAck : Column<5, NScheme::NTypeIds::String> { using Type = TString; };
1447+
struct LastKeyAck : Column<5, NScheme::NTypeIds::String> {};
14441448

14451449
struct Status : Column<6, NScheme::NTypeIds::Uint32> { using Type = NKikimrIndexBuilder::EBuildStatus; };
14461450
struct Message : Column<7, NScheme::NTypeIds::Utf8> {};

ydb/core/tx/schemeshard/ut_helpers/helpers.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,14 +1703,16 @@ namespace NSchemeShardUT_Private {
17031703
case NKikimrSchemeOp::EIndexTypeGlobalVectorKmeansTree: {
17041704
auto& settings = *index.mutable_global_vector_kmeans_tree_index();
17051705

1706-
auto& vectorIndexSettings = *settings.mutable_vector_settings()->mutable_settings();
1707-
if (cfg.VectorIndexSettings) {
1708-
cfg.VectorIndexSettings->SerializeTo(vectorIndexSettings);
1706+
auto& kmeansTreeSettings = *settings.mutable_vector_settings();
1707+
if (cfg.KMeansTreeSettings) {
1708+
cfg.KMeansTreeSettings->SerializeTo(kmeansTreeSettings);
17091709
} else {
17101710
// some random valid settings
1711-
vectorIndexSettings.set_vector_type(Ydb::Table::VectorIndexSettings::VECTOR_TYPE_FLOAT);
1712-
vectorIndexSettings.set_vector_dimension(42);
1713-
vectorIndexSettings.set_metric(Ydb::Table::VectorIndexSettings::DISTANCE_COSINE);
1711+
kmeansTreeSettings.mutable_settings()->set_vector_type(Ydb::Table::VectorIndexSettings::VECTOR_TYPE_FLOAT);
1712+
kmeansTreeSettings.mutable_settings()->set_vector_dimension(42);
1713+
kmeansTreeSettings.mutable_settings()->set_metric(Ydb::Table::VectorIndexSettings::DISTANCE_COSINE);
1714+
kmeansTreeSettings.set_clusters(4);
1715+
kmeansTreeSettings.set_levels(5);
17141716
}
17151717

17161718
if (cfg.GlobalIndexSettings) {

ydb/core/tx/schemeshard/ut_helpers/helpers.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464

6565
namespace NYdb::NTable {
6666
struct TGlobalIndexSettings;
67-
struct TVectorIndexSettings;
67+
struct TKMeansTreeSettings;
6868
}
6969

7070
namespace NSchemeShardUT_Private {
@@ -375,7 +375,7 @@ namespace NSchemeShardUT_Private {
375375
TVector<TString> DataColumns;
376376
TVector<NYdb::NTable::TGlobalIndexSettings> GlobalIndexSettings = {};
377377
// implementation note: it was made a pointer, not optional, to enable forward declaration
378-
std::unique_ptr<NYdb::NTable::TVectorIndexSettings> VectorIndexSettings = {};
378+
std::unique_ptr<NYdb::NTable::TKMeansTreeSettings> KMeansTreeSettings = {};
379379
};
380380

381381
std::unique_ptr<TEvIndexBuilder::TEvCreateRequest> CreateBuildColumnRequest(ui64 id, const TString& dbName, const TString& src, const TString& columnName, const Ydb::TypedValue& literal);

0 commit comments

Comments
 (0)