Skip to content

Commit 68720d1

Browse files
Fix column livecycle (#8580)
1 parent 693fe60 commit 68720d1

File tree

8 files changed

+37
-12
lines changed

8 files changed

+37
-12
lines changed

ydb/core/tx/columnshard/engines/portions/portion_info.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -592,11 +592,10 @@ template <class TExternalBlobInfo>
592592
TPortionInfo::TPreparedBatchData PrepareForAssembleImpl(const TPortionInfo& portion, const ISnapshotSchema& dataSchema, const ISnapshotSchema& resultSchema,
593593
THashMap<TChunkAddress, TExternalBlobInfo>& blobsData) {
594594
std::vector<TPortionInfo::TColumnAssemblingInfo> columns;
595-
auto arrowResultSchema = resultSchema.GetSchema();
596-
columns.reserve(arrowResultSchema->num_fields());
595+
columns.reserve(resultSchema.GetColumnIds().size());
597596
const ui32 rowsCount = portion.GetRecordsCount();
598-
for (auto&& i : arrowResultSchema->fields()) {
599-
columns.emplace_back(rowsCount, dataSchema.GetColumnLoaderOptional(i->name()), resultSchema.GetColumnLoaderVerified(i->name()));
597+
for (auto&& i : resultSchema.GetColumnIds()) {
598+
columns.emplace_back(rowsCount, dataSchema.GetColumnLoaderOptional(i), resultSchema.GetColumnLoaderVerified(i));
600599
}
601600
{
602601
int skipColumnId = -1;
@@ -628,7 +627,7 @@ TPortionInfo::TPreparedBatchData PrepareForAssembleImpl(const TPortionInfo& port
628627
preparedColumns.emplace_back(c.Compile());
629628
}
630629

631-
return TPortionInfo::TPreparedBatchData(std::move(preparedColumns), arrowResultSchema, rowsCount);
630+
return TPortionInfo::TPreparedBatchData(std::move(preparedColumns), resultSchema.GetSchema(), rowsCount);
632631
}
633632

634633
}

ydb/core/tx/columnshard/engines/scheme/abstract/index_info.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,15 @@ class IIndexInfo {
109109

110110
[[nodiscard]] static std::vector<ui32> AddSpecialFieldIds(const std::vector<ui32>& baseColumnIds) {
111111
std::vector<ui32> result = baseColumnIds;
112-
for (auto&& i : GetSystemColumnIds()) {
113-
result.emplace_back(i);
114-
}
112+
const auto& cIds = GetSystemColumnIds();
113+
result.insert(result.end(), cIds.begin(), cIds.end());
114+
return result;
115+
}
116+
117+
[[nodiscard]] static std::set<ui32> AddSpecialFieldIds(const std::set<ui32>& baseColumnIds) {
118+
std::set<ui32> result = baseColumnIds;
119+
const auto& cIds = GetSystemColumnIds();
120+
result.insert(cIds.begin(), cIds.end());
115121
return result;
116122
}
117123

ydb/core/tx/columnshard/engines/scheme/index_info.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ void TIndexInfo::InitializeCaches(const std::shared_ptr<IStoragesManager>& opera
334334
}
335335
SchemaWithSpecials = IIndexInfo::AddSpecialFields(Schema);
336336
SchemaColumnIdsWithSpecials = IIndexInfo::AddSpecialFieldIds(SchemaColumnIds);
337+
SchemaColumnIdsWithSpecialsSet = IIndexInfo::AddSpecialFieldIds(std::set<ui32>(SchemaColumnIds.begin(), SchemaColumnIds.end()));
337338

338339
for (auto&& c : Columns) {
339340
AFL_VERIFY(ArrowColumnByColumnIdCache.emplace(c.first, GetColumnFieldVerified(c.first)).second);

ydb/core/tx/columnshard/engines/scheme/index_info.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,9 @@ struct TIndexInfo : public NTable::TScheme::TTableSchema, public IIndexInfo {
255255
std::vector<TString> GetColumnNames(const std::vector<ui32>& ids) const;
256256
std::vector<std::string> GetColumnSTLNames(const std::vector<ui32>& ids) const;
257257
const std::vector<ui32>& GetColumnIds(const bool withSpecial = true) const;
258+
const std::set<ui32>& GetColumnIdsSet() const {
259+
return SchemaColumnIdsWithSpecialsSet;
260+
}
258261
const std::vector<ui32>& GetPKColumnIds() const {
259262
AFL_VERIFY(PKColumnIds.size());
260263
return PKColumnIds;
@@ -324,6 +327,7 @@ struct TIndexInfo : public NTable::TScheme::TTableSchema, public IIndexInfo {
324327
TString Name;
325328
std::vector<ui32> SchemaColumnIds;
326329
std::vector<ui32> SchemaColumnIdsWithSpecials;
330+
std::set<ui32> SchemaColumnIdsWithSpecialsSet;
327331
std::vector<ui32> PKColumnIds;
328332
std::shared_ptr<arrow::Schema> Schema;
329333
std::shared_ptr<arrow::Schema> SchemaWithSpecials;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class ISnapshotSchema {
2727
std::shared_ptr<NArrow::NAccessor::TColumnLoader> GetColumnLoaderVerified(const std::string& columnName) const;
2828

2929
bool IsSpecialColumnId(const ui32 columnId) const;
30+
virtual const std::set<ui32>& GetColumnIds() const = 0;
3031

3132
virtual NArrow::NAccessor::TColumnSaver GetColumnSaver(const ui32 columnId) const = 0;
3233
NArrow::NAccessor::TColumnSaver GetColumnSaver(const TString& columnName) const {

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
namespace NKikimr::NOlap {
66

77
TFilteredSnapshotSchema::TFilteredSnapshotSchema(ISnapshotSchema::TPtr originalSnapshot, const std::vector<ui32>& columnIds)
8-
: TFilteredSnapshotSchema(originalSnapshot, std::set(columnIds.begin(), columnIds.end()))
9-
{}
8+
: TFilteredSnapshotSchema(originalSnapshot, std::set(columnIds.begin(), columnIds.end())) {
9+
}
1010

1111
TFilteredSnapshotSchema::TFilteredSnapshotSchema(ISnapshotSchema::TPtr originalSnapshot, const std::set<ui32>& columnIds)
1212
: OriginalSnapshot(originalSnapshot)
@@ -48,7 +48,14 @@ std::shared_ptr<TColumnLoader> TFilteredSnapshotSchema::GetColumnLoaderOptional(
4848
}
4949

5050
std::optional<ui32> TFilteredSnapshotSchema::GetColumnIdOptional(const std::string& columnName) const {
51-
return OriginalSnapshot->GetColumnIdOptional(columnName);
51+
auto result = OriginalSnapshot->GetColumnIdOptional(columnName);
52+
if (!result) {
53+
return result;
54+
}
55+
if (!ColumnIds.contains(*result)) {
56+
return std::nullopt;
57+
}
58+
return result;
5259
}
5360

5461
int TFilteredSnapshotSchema::GetFieldIndex(const ui32 columnId) const {

ydb/core/tx/columnshard/engines/scheme/versions/filtered_scheme.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@ namespace NKikimr::NOlap {
99
class TFilteredSnapshotSchema: public ISnapshotSchema {
1010
ISnapshotSchema::TPtr OriginalSnapshot;
1111
std::shared_ptr<arrow::Schema> Schema;
12-
YDB_READONLY_DEF(std::set<ui32>, ColumnIds);
12+
std::set<ui32> ColumnIds;
1313
protected:
1414
virtual TString DoDebugString() const override;
1515
public:
1616
TFilteredSnapshotSchema(ISnapshotSchema::TPtr originalSnapshot, const std::vector<ui32>& columnIds);
1717
TFilteredSnapshotSchema(ISnapshotSchema::TPtr originalSnapshot, const std::set<ui32>& columnIds);
1818
TFilteredSnapshotSchema(ISnapshotSchema::TPtr originalSnapshot, const std::set<std::string>& columnNames);
1919

20+
virtual const std::set<ui32>& GetColumnIds() const override {
21+
return ColumnIds;
22+
}
2023
TColumnSaver GetColumnSaver(const ui32 columnId) const override;
2124
std::shared_ptr<TColumnLoader> GetColumnLoaderOptional(const ui32 columnId) const override;
2225
std::optional<ui32> GetColumnIdOptional(const std::string& columnName) const override;

ydb/core/tx/columnshard/engines/scheme/versions/snapshot_scheme.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ class TSnapshotSchema: public ISnapshotSchema {
2323
public:
2424
TSnapshotSchema(TIndexInfo&& indexInfo, const TSnapshot& snapshot);
2525

26+
virtual const std::set<ui32>& GetColumnIds() const override {
27+
return IndexInfo.GetColumnIdsSet();
28+
}
29+
2630
TColumnSaver GetColumnSaver(const ui32 columnId) const override;
2731
std::shared_ptr<TColumnLoader> GetColumnLoaderOptional(const ui32 columnId) const override;
2832
std::optional<ui32> GetColumnIdOptional(const std::string& columnName) const override;

0 commit comments

Comments
 (0)