Skip to content

Commit 3557ee2

Browse files
ivanmorozov333zverevgeny
authored andcommitted
Optional columns feature flags (#7814)
Conflicts: ydb/core/protos/feature_flags.proto ydb/core/tx/columnshard/engines/scheme/versions/abstract_scheme.cpp
1 parent 6b8fd34 commit 3557ee2

File tree

4 files changed

+20
-3
lines changed

4 files changed

+20
-3
lines changed

ydb/core/formats/arrow/modifier/subset.h

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ class TSchemaSubset {
1414
TSchemaSubset() = default;
1515
TSchemaSubset(const std::set<ui32>& fieldsIdx, const ui32 fieldsCount);
1616

17+
static TSchemaSubset AllFieldsAccepted() {
18+
TSchemaSubset result;
19+
result.Exclude = true;
20+
return result;
21+
}
22+
1723
template <class T>
1824
std::vector<T> Apply(const std::vector<T>& fullSchema) const {
1925
if (FieldIdx.empty()) {

ydb/core/protos/feature_flags.proto

+2
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,6 @@ message TFeatureFlags {
146146
optional bool EnableSingleCompositeActionGroup = 131 [default = false];
147147
optional bool EnableResourcePoolsOnServerless = 132 [default = false];
148148
optional bool EnableChangefeedsOnIndexTables = 134 [default = false];
149+
optional bool EnableResourcePoolsCounters = 135 [default = false];
150+
optional bool EnableOptionalColumnsInColumnShard = 136 [default = false];
149151
}

ydb/core/tx/columnshard/engines/scheme/versions/abstract_scheme.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ TConclusion<std::shared_ptr<NArrow::TGeneralContainer>> ISnapshotSchema::Normali
5353
}
5454
}
5555
if (restoreColumnIds.contains(columnId)) {
56+
AFL_VERIFY(!!GetExternalDefaultValueVerified(columnId) || GetIndexInfo().IsNullableVerified(columnId))("column_name",
57+
GetIndexInfo().GetColumnName(columnId, false))("id", columnId);
5658
result->AddField(resultField,
5759
NArrow::TThreadSimpleArraysCache::Get(resultField->type(), GetExternalDefaultValueVerified(columnId), batch->num_rows()))
5860
.Validate();
@@ -114,8 +116,9 @@ TConclusion<std::shared_ptr<arrow::RecordBatch>> ISnapshotSchema::PrepareForModi
114116
Y_DEBUG_ABORT_UNLESS(NArrow::IsSortedAndUnique(batch, GetIndexInfo().GetPrimaryKey()));
115117

116118
switch (mType) {
119+
case NEvWrite::EModificationType::Replace:
117120
case NEvWrite::EModificationType::Upsert: {
118-
AFL_VERIFY(batch->num_columns() <= dstSchema->num_fields());
121+
AFL_VERIFY(batch->num_columns() <= dstSchema->num_fields());
119122
if (batch->num_columns() < dstSchema->num_fields()) {
120123
for (auto&& f : dstSchema->fields()) {
121124
if (GetIndexInfo().IsNullableVerified(f->name())) {
@@ -132,7 +135,6 @@ TConclusion<std::shared_ptr<arrow::RecordBatch>> ISnapshotSchema::PrepareForModi
132135
return batch;
133136
}
134137
case NEvWrite::EModificationType::Delete:
135-
case NEvWrite::EModificationType::Replace:
136138
case NEvWrite::EModificationType::Insert:
137139
case NEvWrite::EModificationType::Update:
138140
return batch;

ydb/core/tx/columnshard/operations/slice_builder/builder.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,14 @@ TConclusionStatus TBuildSlicesTask::DoExecute(const std::shared_ptr<ITask>& /*ta
5555
if (OriginalBatch->num_columns() != indexSchema->num_fields()) {
5656
AFL_VERIFY(OriginalBatch->num_columns() < indexSchema->num_fields())("original", OriginalBatch->num_columns())(
5757
"index", indexSchema->num_fields());
58-
58+
if (HasAppData() && !AppDataVerified().FeatureFlags.GetEnableOptionalColumnsInColumnShard()) {
59+
subset = NArrow::TSchemaSubset::AllFieldsAccepted();
60+
const std::vector<ui32>& columnIdsVector = ActualSchema->GetIndexInfo().GetColumnIds(false);
61+
const std::set<ui32> columnIdsSet(columnIdsVector.begin(), columnIdsVector.end());
62+
auto normalized =
63+
ActualSchema->NormalizeBatch(*ActualSchema, std::make_shared<NArrow::TGeneralContainer>(OriginalBatch), columnIdsSet).DetachResult();
64+
OriginalBatch = NArrow::ToBatch(normalized->BuildTableVerified(), true);
65+
}
5966
}
6067
WriteData.MutableWriteMeta().SetWriteMiddle2StartInstant(TMonotonic::Now());
6168
auto batches = BuildSlices();

0 commit comments

Comments
 (0)