diff --git a/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.cpp index b876fa78ac904f..dfd44892453cda 100644 --- a/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.cpp @@ -60,16 +60,14 @@ ColumnChunkReader::ColumnChunkReader(io::BufferedStreamReader* reader, Status ColumnChunkReader::init() { size_t start_offset = - _metadata.__isset.dictionary_page_offset && _metadata.dictionary_page_offset > 0 - ? _metadata.dictionary_page_offset - : _metadata.data_page_offset; + _has_dict_page() ? _metadata.dictionary_page_offset : _metadata.data_page_offset; size_t chunk_size = _metadata.total_compressed_size; // create page reader _page_reader = create_page_reader(_stream_reader, _io_ctx, start_offset, chunk_size, _metadata.num_values, _offset_index); // get the block compression codec RETURN_IF_ERROR(get_block_compression_codec(_metadata.codec, &_block_compress_codec)); - if (_metadata.__isset.dictionary_page_offset && _metadata.dictionary_page_offset > 0) { + if (_has_dict_page()) { // seek to the directory page _page_reader->seek_to_page(_metadata.dictionary_page_offset); // Parse dictionary data when reading @@ -83,6 +81,10 @@ Status ColumnChunkReader::init() { return Status::OK(); } +bool ColumnChunkReader::_has_dict_page() const { + return _metadata.__isset.dictionary_page_offset && _metadata.dictionary_page_offset > 0; +} + Status ColumnChunkReader::next_page() { if (_state == HEADER_PARSED) { return Status::OK(); diff --git a/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.h b/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.h index a00a4683725762..531ae511a3e0e3 100644 --- a/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.h @@ -191,6 +191,7 @@ class ColumnChunkReader { private: enum ColumnChunkReaderState { NOT_INIT, INITIALIZED, HEADER_PARSED, DATA_LOADED, PAGE_SKIPPED }; + bool _has_dict_page() const; Status _decode_dict_page(); void _reserve_decompress_buf(size_t size); int32_t _get_type_length();