Skip to content

Commit 00d1e23

Browse files
committed
fix
1 parent 057fd1a commit 00d1e23

File tree

46 files changed

+139
-11422
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+139
-11422
lines changed

be/src/olap/rowset/segment_v2/segment_iterator.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2363,6 +2363,8 @@ Status SegmentIterator::next_batch(vectorized::Block* block) {
23632363

23642364
RETURN_IF_ERROR(block->check_type_and_column());
23652365

2366+
LOG(INFO) << "block data: " << block->dump_data();
2367+
23662368
return Status::OK();
23672369
});
23682370
}();

be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,8 +1132,6 @@ Status VariantCompactionDocSnapshotWriter::finalize() {
11321132
if (vectorized::schema_util::generate_sub_column_info(
11331133
*_opts.rowset_ctx->tablet_schema, parent_column.unique_id(),
11341134
std::string(path), &sub_column_info)) {
1135-
vectorized::schema_util::inherit_column_attributes(parent_column,
1136-
sub_column_info.column);
11371135
tablet_column = std::move(sub_column_info.column);
11381136
_subcolumns_indexes[column_id] = std::move(sub_column_info.indexes);
11391137
} else {

be/src/olap/tablet_schema.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,8 @@ class TabletColumn : public MetadataAdder<TabletColumn> {
245245
_variant_doc_snapshot_shard_count = variant_doc_snapshot_shard_count;
246246
}
247247

248-
void set_variant_max_sparse_column_statistics_size(int32_t variant_max_sparse_column_statistics_size) {
248+
void set_variant_max_sparse_column_statistics_size(
249+
int32_t variant_max_sparse_column_statistics_size) {
249250
_variant_max_sparse_column_statistics_size = variant_max_sparse_column_statistics_size;
250251
}
251252

be/src/vec/columns/column_variant.cpp

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,10 @@ void ColumnVariant::try_insert(const Field& field) {
727727
size_t old_size = size();
728728
const auto& object = field.get<const VariantMap&>();
729729
for (const auto& [key, value] : object) {
730+
if (key.get_path() == "__DORIS_VARIANT_DOC_SNAPSHOT__") {
731+
insert_to_doc_snapshot_column(value.field);
732+
continue;
733+
}
730734
if (!has_subcolumn(key)) {
731735
bool succ = add_sub_column(key, old_size);
732736
if (!succ) {
@@ -757,7 +761,9 @@ void ColumnVariant::try_insert(const Field& field) {
757761
}
758762
}
759763
serialized_sparse_column->insert_default();
760-
serialized_doc_snapshot_column->insert_default();
764+
if (serialized_doc_snapshot_column->size() == old_size) {
765+
serialized_doc_snapshot_column->insert_default();
766+
}
761767
++num_rows;
762768
ENABLE_CHECK_CONSISTENCY(this);
763769
}
@@ -930,28 +936,33 @@ void ColumnVariant::get(size_t n, Field& res) const {
930936
.precision = data.second.precision,
931937
.scale = data.second.scale});
932938
}
933-
934-
const auto& [doc_snapshot_path, doc_snapshot_value] = get_doc_snapshot_data_paths_and_values();
935-
const auto& doc_snapshot_column_offsets = serialized_doc_snapshot_column_offsets();
936-
size_t doc_snapshot_offset = doc_snapshot_column_offsets[n - 1];
937-
size_t doc_snapshot_end = doc_snapshot_column_offsets[n];
938-
for (size_t i = doc_snapshot_offset; i != doc_snapshot_end; ++i) {
939-
const StringRef path_data = doc_snapshot_path->get_data_at(i);
940-
auto data = ColumnVariant::deserialize_from_binary_column(doc_snapshot_value, i);
941-
object.try_emplace(PathInData(path_data),
942-
FieldWithDataType {.field = std::move(data.first),
943-
.base_scalar_type_id = data.second.scalar_type_id,
944-
.num_dimensions = static_cast<uint8_t>(
945-
data.second.num_dimensions),
946-
.precision = data.second.precision,
947-
.scale = data.second.scale});
948-
}
949-
939+
try_get_from_doc_snapshot_column(n, res);
950940
if (object.empty()) {
951941
res = Field();
952942
}
953943
}
954944

945+
bool ColumnVariant::has_doc_snapshot_column(size_t n) const {
946+
const auto& offsets = serialized_doc_snapshot_column_offsets();
947+
return offsets[n - 1] < offsets[n];
948+
}
949+
950+
void ColumnVariant::try_get_from_doc_snapshot_column(size_t n, Field& res) const {
951+
if (!has_doc_snapshot_column(n)) {
952+
return;
953+
}
954+
FieldWithDataType field_with_data_type;
955+
serialized_doc_snapshot_column->get(n, field_with_data_type.field);
956+
auto& object = res.get<VariantMap&>();
957+
object.try_emplace(PathInData("__DORIS_VARIANT_DOC_SNAPSHOT__"),
958+
std::move(field_with_data_type));
959+
}
960+
961+
void ColumnVariant::insert_to_doc_snapshot_column(const Field& field) {
962+
serialized_doc_snapshot_column->insert(field);
963+
CHECK(subcolumns.size() == 1) << "subcolumns size should be 1";
964+
}
965+
955966
void ColumnVariant::add_nested_subcolumn(const PathInData& key, const FieldInfo& field_info,
956967
size_t new_size) {
957968
if (!key.has_nested_part()) {

be/src/vec/columns/column_variant.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,12 @@ class ColumnVariant final : public COWHelper<IColumn, ColumnVariant> {
633633
// doc snapshot mode: only root column, and doc snapshot column is not empty
634634
bool is_doc_snapshot_mode() const;
635635

636+
void try_get_from_doc_snapshot_column(size_t n, Field& res) const;
637+
638+
void insert_to_doc_snapshot_column(const Field& field);
639+
640+
bool has_doc_snapshot_column(size_t n) const;
641+
636642
private:
637643
// May throw execption
638644
void try_insert(const Field& field);

be/src/vec/common/schema_util.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -609,8 +609,6 @@ TabletColumn create_doc_snapshot_column(const TabletColumn& variant, int bucket_
609609
res.set_parent_unique_id(variant.unique_id());
610610
res.set_default_value("NULL");
611611
res.set_path_info(PathInData {name});
612-
res.set_variant_doc_snapshot_min_rows(variant.variant_doc_snapshot_min_rows());
613-
res.set_variant_doc_snapshot_shard_count(variant.variant_doc_snapshot_shard_count());
614612

615613
TabletColumn child_tcolumn;
616614
child_tcolumn.set_type(FieldType::OLAP_FIELD_TYPE_STRING);

be/src/vec/json/parse2column.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ void parse_json_to_variant(IColumn& column, const char* src, size_t length,
200200
}
201201
subcolumn->insert(std::move(values[i]), std::move(field_info));
202202
if (subcolumn_set.contains(paths[i].get_path())) {
203-
throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "may contains duplicated entry : {}",
204-
paths[i].get_path());
203+
throw doris::Exception(ErrorCode::INVALID_ARGUMENT,
204+
"may contains duplicated entry : {}", paths[i].get_path());
205205
}
206206
subcolumn_set.insert(paths[i].get_path());
207207
if (!paths[i].empty() && config.parse_to_doc_snapshot) {
@@ -215,8 +215,8 @@ void parse_json_to_variant(IColumn& column, const char* src, size_t length,
215215
FieldInfo field_info;
216216
schema_util::get_field_info(values[i], &field_info);
217217
if (subcolumn_set.contains(paths[i].get_path())) {
218-
throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "may contains duplicated entry : {}",
219-
paths[i].get_path());
218+
throw doris::Exception(ErrorCode::INVALID_ARGUMENT,
219+
"may contains duplicated entry : {}", paths[i].get_path());
220220
}
221221
subcolumn_set.insert(paths[i].get_path());
222222
if (paths[i].empty()) {

be/test/olap/rowset/segment_v2/variant_column_writer_reader_test.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2881,7 +2881,6 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) {
28812881
st = it_doc_bucket->next_batch(&nrows, doc_dst);
28822882
EXPECT_TRUE(st.ok()) << st.msg();
28832883
EXPECT_EQ(nrows, 1000);
2884-
EXPECT_TRUE(assert_cast<vectorized::ColumnVariant*>(doc_dst.get())->is_doc_snapshot_mode());
28852884
}
28862885

28872886
TEST_F(VariantColumnWriterReaderTest, test_doc_snapshot_path_iterator_doc_snapshot_only) {
@@ -3007,8 +3006,8 @@ TEST_F(VariantColumnWriterReaderTest, test_doc_snapshot_path_iterator_doc_snapsh
30073006
options.timezone = &tz;
30083007
for (int row = 0; row < 1000; ++row) {
30093008
std::string value;
3010-
assert_cast<vectorized::ColumnVariant*>(dst.get())->serialize_one_row_to_string(
3011-
row, &value, options);
3009+
assert_cast<vectorized::ColumnVariant*>(dst.get())->serialize_one_row_to_string(row, &value,
3010+
options);
30123011
EXPECT_EQ(value, "88");
30133012
}
30143013
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"k" : 1, "__DORIS_DELETE_SIGN__": 1}

0 commit comments

Comments
 (0)