diff --git a/be/src/exec/parquet_writer.cpp b/be/src/exec/parquet_writer.cpp index 374b4fea20..b0d3fdf2ff 100644 --- a/be/src/exec/parquet_writer.cpp +++ b/be/src/exec/parquet_writer.cpp @@ -382,6 +382,17 @@ parquet::RowGroupWriter* ParquetWriterWrapper::get_rg_writer() { return _rg_writer; } +template +void ParquetWriterWrapper::write_int32_column(int index, T* item) { + parquet::RowGroupWriter* rgWriter = get_rg_writer(); + parquet::Int32Writer* col_writer = static_cast(rgWriter->column(index)); + int32_t value = 0; + if (item != nullptr) { + value = *item; + } + col_writer->WriteBatch(1, nullptr, nullptr, &value); +} + Status ParquetWriterWrapper::_write_one_row(TupleRow* row) { int num_columns = _output_expr_ctxs.size(); try { @@ -400,18 +411,16 @@ Status ParquetWriterWrapper::_write_one_row(TupleRow* row) { } break; } - case TYPE_TINYINT: - case TYPE_SMALLINT: + case TYPE_TINYINT: { + write_int32_column(index, static_cast(item)); + break; + } + case TYPE_SMALLINT: { + write_int32_column(index, static_cast(item)); + break; + } case TYPE_INT: { - parquet::RowGroupWriter* rgWriter = get_rg_writer(); - parquet::Int32Writer* col_writer = - static_cast(rgWriter->column(index)); - if (item != nullptr) { - col_writer->WriteBatch(1, nullptr, nullptr, static_cast(item)); - } else { - int32_t default_int32 = 0; - col_writer->WriteBatch(1, nullptr, nullptr, &default_int32); - } + write_int32_column(index, static_cast(item)); break; } case TYPE_BIGINT: { diff --git a/be/src/exec/parquet_writer.h b/be/src/exec/parquet_writer.h index 302ea90ba1..59b8600129 100644 --- a/be/src/exec/parquet_writer.h +++ b/be/src/exec/parquet_writer.h @@ -120,6 +120,9 @@ public: int64_t written_len(); private: + template + void write_int32_column(int index, T* item); + std::shared_ptr _outstream; std::shared_ptr _properties; std::shared_ptr _schema;