From 7559213cf2915331db0d13e8c817983951986ec7 Mon Sep 17 00:00:00 2001 From: amory Date: Wed, 19 Feb 2025 18:35:56 +0800 Subject: [PATCH] [fix](serde)fix arrow serde with no value into column (#48053) --- .../data_types/serde/data_type_date64_serde.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/be/src/vec/data_types/serde/data_type_date64_serde.cpp b/be/src/vec/data_types/serde/data_type_date64_serde.cpp index 4cdd6b90326c03..bab93a43f78719 100644 --- a/be/src/vec/data_types/serde/data_type_date64_serde.cpp +++ b/be/src/vec/data_types/serde/data_type_date64_serde.cpp @@ -39,7 +39,6 @@ Status DataTypeDate64SerDe::serialize_one_cell_to_json(const IColumn& column, in auto result = check_column_const_set_readability(column, row_num); ColumnPtr ptr = result.first; row_num = result.second; - Int64 int_val = assert_cast(*ptr).get_element(row_num); if (options.date_olap_format) { tm time_tm; @@ -236,6 +235,19 @@ void DataTypeDate64SerDe::read_column_from_arrow(IColumn& column, const arrow::A v.cast_to_date(); col_data.emplace_back(binary_cast(v)); } + } else if (arrow_array->type()->id() == arrow::Type::STRING) { + // to be compatible with old version, we use string type for date. + auto concrete_array = dynamic_cast(arrow_array); + for (size_t value_i = start; value_i < end; ++value_i) { + Int64 val = 0; + auto val_str = concrete_array->GetString(value_i); + ReadBuffer rb(val_str.data(), val_str.size()); + read_datetime_text_impl(val, rb, ctz); + col_data.emplace_back(val); + } + } else { + throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT, + "Unsupported Arrow Type: " + arrow_array->type()->name()); } }