@@ -168,6 +168,7 @@ void parse_json_to_variant(IColumn& column, const char* src, size_t length,
168168 auto [doc_snapshot_data_paths, doc_snapshot_data_values] =
169169 column_variant.get_doc_snapshot_data_paths_and_values ();
170170 auto & doc_snapshot_data_offsets = column_variant.serialized_doc_snapshot_column_offsets ();
171+ std::unordered_set<std::string> subcolumn_set;
171172 if (config.parse_to_subcolumns ) {
172173 for (size_t i = 0 ; i < paths.size (); ++i) {
173174 FieldInfo field_info;
@@ -198,6 +199,11 @@ void parse_json_to_variant(IColumn& column, const char* src, size_t length,
198199 paths[i].get_path ());
199200 }
200201 subcolumn->insert (std::move (values[i]), std::move (field_info));
202+ if (subcolumn_set.contains (paths[i].get_path ())) {
203+ throw doris::Exception (ErrorCode::INVALID_ARGUMENT, " may contains duplicated entry : {}" ,
204+ paths[i].get_path ());
205+ }
206+ subcolumn_set.insert (paths[i].get_path ());
201207 if (!paths[i].empty () && config.parse_to_doc_snapshot ) {
202208 subcolumn->serialize_to_sparse_column (doc_snapshot_data_paths, paths[i].get_path (),
203209 doc_snapshot_data_values, old_num_rows);
@@ -208,6 +214,11 @@ void parse_json_to_variant(IColumn& column, const char* src, size_t length,
208214 for (size_t i = 0 ; i < paths.size (); ++i) {
209215 FieldInfo field_info;
210216 schema_util::get_field_info (values[i], &field_info);
217+ if (subcolumn_set.contains (paths[i].get_path ())) {
218+ throw doris::Exception (ErrorCode::INVALID_ARGUMENT, " may contains duplicated entry : {}" ,
219+ paths[i].get_path ());
220+ }
221+ subcolumn_set.insert (paths[i].get_path ());
211222 if (paths[i].empty ()) {
212223 column_variant.get_subcolumn (paths[i])->insert (std::move (values[i]),
213224 std::move (field_info));
0 commit comments