Skip to content

Conversation

@AshinGau
Copy link
Member

@AshinGau AshinGau commented Aug 21, 2023

Proposed changes

A row of complex type may be stored across two(or more) pages, and the parameter align_rows indicates that whether the reader should read the remaining value of the last row in previous page.

Further comments

If this is a relatively large or complex change, kick off the discussion at dev@doris.apache.org by explaining why you chose the solution you did and what alternatives you considered, etc...

@AshinGau
Copy link
Member Author

run buildall

@github-actions
Copy link
Contributor

clang-tidy review says "All clean, LGTM! 👍"

@hello-stephen
Copy link
Contributor

(From new machine)TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 45.44 seconds
stream load tsv: 536 seconds loaded 74807831229 Bytes, about 133 MB/s
stream load json: 20 seconds loaded 2358488459 Bytes, about 112 MB/s
stream load orc: 66 seconds loaded 1101869774 Bytes, about 15 MB/s
stream load parquet: 30 seconds loaded 861443392 Bytes, about 27 MB/s
insert into select: 29.2 seconds inserted 10000000 Rows, about 342K ops/s
storage size: 17162081550 Bytes

Copy link
Contributor

@morningman morningman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@github-actions
Copy link
Contributor

PR approved by at least one committer and no changes requested.

@github-actions github-actions bot added approved Indicates a PR has been approved by one committer. reviewed labels Aug 22, 2023
@github-actions
Copy link
Contributor

PR approved by anyone and no changes requested.

Copy link
Contributor

@kaka11chen kaka11chen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@morningman morningman merged commit 9d2e23b into apache:master Aug 22, 2023
xiaokang pushed a commit that referenced this pull request Aug 22, 2023
…23277)

A row of complex type may be stored across two(or more) pages, and the parameter `align_rows` indicates that whether the reader should read the remaining value of the last row in previous page.
@xiaokang xiaokang mentioned this pull request Aug 30, 2023
morningman pushed a commit that referenced this pull request Feb 18, 2025
…ing Parquet complex type cross-page data (#47734)

### What problem does this PR solve?


Related PR: #23277

Problem Summary:
Previously, you may encounter this error when reading parquet complex
types. This PR is mainly to fix this problem.
```
[fragment_mgr.cpp:549] report error status: cur path:  xxx. parquet. Read parquet file   xxxx.parquet failed, reason = [E-1721][E-1721] Size of filter doesn't match size of column: size=3156, filter.size=12544

0#  doris::Exception::Exception(int, std::basic_string_view<char, std::char_traits<char> > const&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:173
1#  doris::Exception::Exception<unsigned long&, unsigned long&>(int, std::basic_string_view<char, std::char_traits<char> > const&, unsigned long&, unsigned long&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:187
2#  doris::vectorized::ColumnVector<unsigned char>::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/columns_common.h:86
3#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:373
4#  doris::vectorized::ColumnStruct::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_struct.cpp:289
5#  doris::vectorized::ColumnArray::filter_generic(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/common/cow.h:402
6#  doris::vectorized::ColumnArray::filter_nullable(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_array.cpp:877
7#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:371
8#  doris::vectorized::Block::filter_block_internal(doris::vectorized::Block*, std::vector<unsigned int, std::allocator<unsigned int> > const&, doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/core/block.cpp:790
9#  doris::vectorized::RowGroupReader::next_batch(doris::vectorized::Block*, unsigned long, unsigned long*, bool*) at /be/src/vec/exec/format/parquet/vparquet_group_reader.cpp:0
10# doris::vectorized::ParquetReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:486
11# doris::vectorized::IcebergTableReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:491
12# doris::vectorized::VFileScanner::_get_block_wrapped(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
13# doris::vectorized::VFileScanner::_get_block_impl(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
14# doris::vectorized::VScanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:0
15# doris::vectorized::VScanner::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:101
16# doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>) at /be/src/common/status.h:378
```
github-actions bot pushed a commit that referenced this pull request Feb 18, 2025
…ing Parquet complex type cross-page data (#47734)

### What problem does this PR solve?


Related PR: #23277

Problem Summary:
Previously, you may encounter this error when reading parquet complex
types. This PR is mainly to fix this problem.
```
[fragment_mgr.cpp:549] report error status: cur path:  xxx. parquet. Read parquet file   xxxx.parquet failed, reason = [E-1721][E-1721] Size of filter doesn't match size of column: size=3156, filter.size=12544

0#  doris::Exception::Exception(int, std::basic_string_view<char, std::char_traits<char> > const&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:173
1#  doris::Exception::Exception<unsigned long&, unsigned long&>(int, std::basic_string_view<char, std::char_traits<char> > const&, unsigned long&, unsigned long&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:187
2#  doris::vectorized::ColumnVector<unsigned char>::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/columns_common.h:86
3#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:373
4#  doris::vectorized::ColumnStruct::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_struct.cpp:289
5#  doris::vectorized::ColumnArray::filter_generic(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/common/cow.h:402
6#  doris::vectorized::ColumnArray::filter_nullable(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_array.cpp:877
7#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:371
8#  doris::vectorized::Block::filter_block_internal(doris::vectorized::Block*, std::vector<unsigned int, std::allocator<unsigned int> > const&, doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/core/block.cpp:790
9#  doris::vectorized::RowGroupReader::next_batch(doris::vectorized::Block*, unsigned long, unsigned long*, bool*) at /be/src/vec/exec/format/parquet/vparquet_group_reader.cpp:0
10# doris::vectorized::ParquetReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:486
11# doris::vectorized::IcebergTableReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:491
12# doris::vectorized::VFileScanner::_get_block_wrapped(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
13# doris::vectorized::VFileScanner::_get_block_impl(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
14# doris::vectorized::VScanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:0
15# doris::vectorized::VScanner::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:101
16# doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>) at /be/src/common/status.h:378
```
github-actions bot pushed a commit that referenced this pull request Feb 18, 2025
…ing Parquet complex type cross-page data (#47734)

### What problem does this PR solve?


Related PR: #23277

Problem Summary:
Previously, you may encounter this error when reading parquet complex
types. This PR is mainly to fix this problem.
```
[fragment_mgr.cpp:549] report error status: cur path:  xxx. parquet. Read parquet file   xxxx.parquet failed, reason = [E-1721][E-1721] Size of filter doesn't match size of column: size=3156, filter.size=12544

0#  doris::Exception::Exception(int, std::basic_string_view<char, std::char_traits<char> > const&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:173
1#  doris::Exception::Exception<unsigned long&, unsigned long&>(int, std::basic_string_view<char, std::char_traits<char> > const&, unsigned long&, unsigned long&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:187
2#  doris::vectorized::ColumnVector<unsigned char>::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/columns_common.h:86
3#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:373
4#  doris::vectorized::ColumnStruct::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_struct.cpp:289
5#  doris::vectorized::ColumnArray::filter_generic(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/common/cow.h:402
6#  doris::vectorized::ColumnArray::filter_nullable(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_array.cpp:877
7#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:371
8#  doris::vectorized::Block::filter_block_internal(doris::vectorized::Block*, std::vector<unsigned int, std::allocator<unsigned int> > const&, doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/core/block.cpp:790
9#  doris::vectorized::RowGroupReader::next_batch(doris::vectorized::Block*, unsigned long, unsigned long*, bool*) at /be/src/vec/exec/format/parquet/vparquet_group_reader.cpp:0
10# doris::vectorized::ParquetReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:486
11# doris::vectorized::IcebergTableReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:491
12# doris::vectorized::VFileScanner::_get_block_wrapped(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
13# doris::vectorized::VFileScanner::_get_block_impl(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
14# doris::vectorized::VScanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:0
15# doris::vectorized::VScanner::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:101
16# doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>) at /be/src/common/status.h:378
```
lzyy2024 pushed a commit to lzyy2024/doris that referenced this pull request Feb 21, 2025
…ing Parquet complex type cross-page data (apache#47734)

### What problem does this PR solve?


Related PR: apache#23277

Problem Summary:
Previously, you may encounter this error when reading parquet complex
types. This PR is mainly to fix this problem.
```
[fragment_mgr.cpp:549] report error status: cur path:  xxx. parquet. Read parquet file   xxxx.parquet failed, reason = [E-1721][E-1721] Size of filter doesn't match size of column: size=3156, filter.size=12544

0#  doris::Exception::Exception(int, std::basic_string_view<char, std::char_traits<char> > const&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:173
1#  doris::Exception::Exception<unsigned long&, unsigned long&>(int, std::basic_string_view<char, std::char_traits<char> > const&, unsigned long&, unsigned long&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:187
2#  doris::vectorized::ColumnVector<unsigned char>::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/columns_common.h:86
3#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:373
4#  doris::vectorized::ColumnStruct::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_struct.cpp:289
5#  doris::vectorized::ColumnArray::filter_generic(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/common/cow.h:402
6#  doris::vectorized::ColumnArray::filter_nullable(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_array.cpp:877
7#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:371
8#  doris::vectorized::Block::filter_block_internal(doris::vectorized::Block*, std::vector<unsigned int, std::allocator<unsigned int> > const&, doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/core/block.cpp:790
9#  doris::vectorized::RowGroupReader::next_batch(doris::vectorized::Block*, unsigned long, unsigned long*, bool*) at /be/src/vec/exec/format/parquet/vparquet_group_reader.cpp:0
10# doris::vectorized::ParquetReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:486
11# doris::vectorized::IcebergTableReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:491
12# doris::vectorized::VFileScanner::_get_block_wrapped(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
13# doris::vectorized::VFileScanner::_get_block_impl(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
14# doris::vectorized::VScanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:0
15# doris::vectorized::VScanner::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:101
16# doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>) at /be/src/common/status.h:378
```
koarz pushed a commit to koarz/doris that referenced this pull request Jun 4, 2025
…ing Parquet complex type cross-page data (apache#47734)

### What problem does this PR solve?


Related PR: apache#23277

Problem Summary:
Previously, you may encounter this error when reading parquet complex
types. This PR is mainly to fix this problem.
```
[fragment_mgr.cpp:549] report error status: cur path:  xxx. parquet. Read parquet file   xxxx.parquet failed, reason = [E-1721][E-1721] Size of filter doesn't match size of column: size=3156, filter.size=12544

0#  doris::Exception::Exception(int, std::basic_string_view<char, std::char_traits<char> > const&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:173
1#  doris::Exception::Exception<unsigned long&, unsigned long&>(int, std::basic_string_view<char, std::char_traits<char> > const&, unsigned long&, unsigned long&) at //ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/basic_string.h:187
2#  doris::vectorized::ColumnVector<unsigned char>::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/columns_common.h:86
3#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:373
4#  doris::vectorized::ColumnStruct::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_struct.cpp:289
5#  doris::vectorized::ColumnArray::filter_generic(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/common/cow.h:402
6#  doris::vectorized::ColumnArray::filter_nullable(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_array.cpp:877
7#  doris::vectorized::ColumnNullable::filter(doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/columns/column_nullable.cpp:371
8#  doris::vectorized::Block::filter_block_internal(doris::vectorized::Block*, std::vector<unsigned int, std::allocator<unsigned int> > const&, doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const&) at /be/src/vec/core/block.cpp:790
9#  doris::vectorized::RowGroupReader::next_batch(doris::vectorized::Block*, unsigned long, unsigned long*, bool*) at /be/src/vec/exec/format/parquet/vparquet_group_reader.cpp:0
10# doris::vectorized::ParquetReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:486
11# doris::vectorized::IcebergTableReader::get_next_block(doris::vectorized::Block*, unsigned long*, bool*) at /be/src/common/status.h:491
12# doris::vectorized::VFileScanner::_get_block_wrapped(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
13# doris::vectorized::VFileScanner::_get_block_impl(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/common/status.h:491
14# doris::vectorized::VScanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:0
15# doris::vectorized::VScanner::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /be/src/vec/exec/scan/vscanner.cpp:101
16# doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>, std::shared_ptr<doris::vectorized::ScanTask>) at /be/src/common/status.h:378
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by one committer. dev/2.0.1-merged p0_w reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants