From 10a6e70d4a0f215831496c7e79f507fc687fa1ae Mon Sep 17 00:00:00 2001 From: eldenmoon <15605149486@163.com> Date: Wed, 20 Dec 2023 23:22:49 +0800 Subject: [PATCH 1/2] [Improve](compile) add `__AVX2__` macro for JsonbParser --- be/src/vec/columns/column_object.cpp | 6 ++++++ be/src/vec/data_types/serde/data_type_jsonb_serde.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/be/src/vec/columns/column_object.cpp b/be/src/vec/columns/column_object.cpp index 730161cf5b8986..3185952edfe4b2 100644 --- a/be/src/vec/columns/column_object.cpp +++ b/be/src/vec/columns/column_object.cpp @@ -65,6 +65,12 @@ #include "vec/data_types/data_type_nullable.h" #include "vec/data_types/get_least_supertype.h" +#ifdef __AVX2__ +#include "util/jsonb_parser_simd.h" +#else +#include "util/jsonb_parser.h" +#endif + namespace doris::vectorized { namespace { diff --git a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp index b3f67d5e990db3..8a6b26e9bd885b 100644 --- a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp +++ b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp @@ -26,6 +26,12 @@ #include "common/status.h" #include "exprs/json_functions.h" #include "runtime/jsonb_value.h" + +#ifdef __AVX2__ +#include "util/jsonb_parser_simd.h" +#else +#include "util/jsonb_parser.h" +#endif namespace doris { namespace vectorized { From 26b5725f0096539b63bec229ea024a9d32454163 Mon Sep 17 00:00:00 2001 From: eldenmoon <15605149486@163.com> Date: Wed, 20 Dec 2023 23:37:00 +0800 Subject: [PATCH 2/2] throw exception instead of CHECK --- be/src/vec/columns/column_object.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/be/src/vec/columns/column_object.cpp b/be/src/vec/columns/column_object.cpp index 3185952edfe4b2..f44fc62ed982ea 100644 --- a/be/src/vec/columns/column_object.cpp +++ b/be/src/vec/columns/column_object.cpp @@ -1161,8 +1161,14 @@ void ColumnObject::merge_sparse_to_root_column() { rapidjson::Writer writer(buffer); root.Accept(writer); bool res = parser.parse(buffer.GetString(), buffer.GetSize()); - CHECK(res) << "buffer:" << std::string(buffer.GetString(), buffer.GetSize()) - << ", row_num:" << i; + if (!res) { + throw Exception(ErrorCode::INVALID_ARGUMENT, + "parse json failed, doc: {}" + ", row_num:{}" + ", error:{}", + std::string(buffer.GetString(), buffer.GetSize()), i, + JsonbErrMsg::getErrMsg(parser.getErrorCode())); + } result_column_ptr->insert_data(parser.getWriter().getOutput()->getBuffer(), parser.getWriter().getOutput()->getSize()); result_column_nullable->get_null_map_data().push_back(0);