Skip to content

Commit 04583b0

Browse files
author
liutang123
committed
In FixLengthDictDecoder and ByteArrayDictDecoder, don't exec ColumnDictI32::insert_many_dict_data when dict data is empty.
1 parent 608ea70 commit 04583b0

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

be/src/vec/exec/format/parquet/byte_array_dict_decoder.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ Status ByteArrayDictDecoder::read_dict_values_to_column(MutableColumnPtr& doris_
8181
MutableColumnPtr ByteArrayDictDecoder::convert_dict_column_to_string_column(
8282
const ColumnInt32* dict_column) {
8383
auto res = ColumnString::create();
84+
if (_dict_items.empty()) {
85+
if (dict_column->size() > 0) {
86+
LOG(ERROR) << "Attempt to convert dict column with empty dictionary, column size: "
87+
<< dict_column->size();
88+
}
89+
return res;
90+
}
8491
std::vector<StringRef> dict_values(dict_column->size());
8592
const auto& data = dict_column->get_data();
8693
for (size_t i = 0; i < dict_column->size(); ++i) {
@@ -106,7 +113,7 @@ Status ByteArrayDictDecoder::_decode_values(MutableColumnPtr& doris_column, Data
106113
size_t non_null_size = select_vector.num_values() - select_vector.num_nulls();
107114
if (doris_column->is_column_dictionary()) {
108115
ColumnDictI32& dict_column = assert_cast<ColumnDictI32&>(*doris_column);
109-
if (dict_column.dict_size() == 0) {
116+
if (dict_column.dict_size() == 0 && !_dict_items.empty()) {
110117
//If the dictionary grows too big, whether in size or number of distinct values,
111118
// the encoding will fall back to the plain encoding.
112119
dict_column.insert_many_dict_data(_dict_items.data(),

be/src/vec/exec/format/parquet/fix_length_dict_decoder.hpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class FixLengthDictDecoder final : public BaseDictDecoder {
8181
ColumnSelectVector& select_vector, bool is_dict_filter) {
8282
size_t non_null_size = select_vector.num_values() - select_vector.num_nulls();
8383
if (doris_column->is_column_dictionary() &&
84-
assert_cast<ColumnDictI32&>(*doris_column).dict_size() == 0) {
84+
assert_cast<ColumnDictI32&>(*doris_column).dict_size() == 0 && !_dict_items.empty()) {
8585
std::vector<StringRef> dict_items;
8686

8787
char* dict_item_address = (char*)_dict.get();
@@ -213,6 +213,13 @@ class FixLengthDictDecoder final : public BaseDictDecoder {
213213

214214
MutableColumnPtr convert_dict_column_to_string_column(const ColumnInt32* dict_column) override {
215215
auto res = ColumnString::create();
216+
if (_dict_items.empty()) {
217+
if (dict_column->size() > 0) {
218+
LOG(ERROR) << "Attempt to convert dict column with empty dictionary, column size: "
219+
<< dict_column->size();
220+
}
221+
return res;
222+
}
216223
std::vector<StringRef> dict_values;
217224
dict_values.reserve(dict_column->size());
218225
const auto& data = dict_column->get_data();

0 commit comments

Comments
 (0)