From 3c9b7d5ea42bff453188123fe58aa29550122a61 Mon Sep 17 00:00:00 2001 From: Qi Chen Date: Thu, 26 Dec 2024 11:23:18 +0800 Subject: [PATCH] [opt](parquet-reader)Implement late materialization of parquet complex types. (#44098) ### What problem does this PR solve? Problem Summary: Late materialization is not supported when querying fields with complex types. ### Release note [opt](parquet-reader)Implement late materialization of parquet complex types. --- .../exec/format/parquet/parquet_common.cpp | 152 +-- .../vec/exec/format/parquet/parquet_common.h | 156 ++- .../format/parquet/vparquet_column_reader.cpp | 170 ++- .../format/parquet/vparquet_column_reader.h | 60 +- .../format/parquet/vparquet_group_reader.cpp | 58 +- .../format/parquet/vparquet_group_reader.h | 6 +- .../exec/format/parquet/vparquet_reader.cpp | 3 +- .../vec/exec/parquet/parquet_common_test.cpp | 457 ++++++++ .../parquet_nested_type_cross_page_test.cpp | 179 ++++ .../vec/exec/parquet/parquet_thrift_test.cpp | 8 +- .../parquet_nested_types/create_table.hql | 58 ++ .../parquet_nested_types/data.tar.gz | Bin 0 -> 36976 bytes .../nested_cross_page_test1.py | 192 ++++ .../nested_cross_page_test2.py | 287 +++++ .../nested_cross_page_test3.py | 196 ++++ .../multi_catalog/parquet_nested_types/run.sh | 12 + .../hive/test_parquet_nested_types.out | 985 ++++++++++++++++++ .../hive/test_parquet_nested_types.groovy | 209 ++++ 18 files changed, 2965 insertions(+), 223 deletions(-) create mode 100644 be/test/vec/exec/parquet/parquet_common_test.cpp create mode 100644 be/test/vec/exec/parquet/parquet_nested_type_cross_page_test.cpp create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data.tar.gz create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test1.py create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test2.py create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test3.py create mode 100755 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/run.sh create mode 100644 regression-test/data/external_table_p0/hive/test_parquet_nested_types.out create mode 100644 regression-test/suites/external_table_p0/hive/test_parquet_nested_types.groovy diff --git a/be/src/vec/exec/format/parquet/parquet_common.cpp b/be/src/vec/exec/format/parquet/parquet_common.cpp index 59e12fcc71a463..f71f511edd30ce 100644 --- a/be/src/vec/exec/format/parquet/parquet_common.cpp +++ b/be/src/vec/exec/format/parquet/parquet_common.cpp @@ -28,24 +28,19 @@ const int32_t ParquetInt96::JULIAN_EPOCH_OFFSET_DAYS = 2440588; const int64_t ParquetInt96::MICROS_IN_DAY = 86400000000; const int64_t ParquetInt96::NANOS_PER_MICROSECOND = 1000; -ColumnSelectVector::ColumnSelectVector(const uint8_t* filter_map, size_t filter_map_size, - bool filter_all) { - build(filter_map, filter_map_size, filter_all); -} - -void ColumnSelectVector::build(const uint8_t* filter_map, size_t filter_map_size, bool filter_all) { +Status FilterMap::init(const uint8_t* filter_map_data, size_t filter_map_size, bool filter_all) { _filter_all = filter_all; - _filter_map = filter_map; + _filter_map_data = filter_map_data; _filter_map_size = filter_map_size; if (filter_all) { _has_filter = true; _filter_ratio = 1; - } else if (filter_map == nullptr) { + } else if (filter_map_data == nullptr) { _has_filter = false; _filter_ratio = 0; } else { - size_t filter_count = - simd::count_zero_num(reinterpret_cast(filter_map), filter_map_size); + size_t filter_count = simd::count_zero_num(reinterpret_cast(filter_map_data), + filter_map_size); if (filter_count == filter_map_size) { _has_filter = true; _filter_all = true; @@ -58,109 +53,68 @@ void ColumnSelectVector::build(const uint8_t* filter_map, size_t filter_map_size _filter_ratio = 0; } } + return Status::OK(); } -void ColumnSelectVector::set_run_length_null_map(const std::vector& run_length_null_map, - size_t num_values, NullMap* null_map) { - _num_values = num_values; - _num_nulls = 0; - _read_index = 0; - size_t map_index = 0; - bool is_null = false; - if (_has_filter) { - // No run length null map is generated when _filter_all = true - DCHECK(!_filter_all); - _data_map.resize(num_values); - for (auto& run_length : run_length_null_map) { - if (is_null) { - _num_nulls += run_length; - for (int i = 0; i < run_length; ++i) { - _data_map[map_index++] = FILTERED_NULL; - } - } else { - for (int i = 0; i < run_length; ++i) { - _data_map[map_index++] = FILTERED_CONTENT; - } - } - is_null = !is_null; - } - size_t num_read = 0; - DCHECK_LE(_filter_map_index + num_values, _filter_map_size); - for (size_t i = 0; i < num_values; ++i) { - if (_filter_map[_filter_map_index++]) { - _data_map[i] = _data_map[i] == FILTERED_NULL ? NULL_DATA : CONTENT; - num_read++; - } - } - _num_filtered = num_values - num_read; - if (null_map != nullptr && num_read > 0) { - NullMap& map_data_column = *null_map; - auto null_map_index = map_data_column.size(); - map_data_column.resize(null_map_index + num_read); - if (_num_nulls == 0) { - memset(map_data_column.data() + null_map_index, 0, num_read); - } else if (_num_nulls == num_values) { - memset(map_data_column.data() + null_map_index, 1, num_read); - } else { - for (size_t i = 0; i < num_values; ++i) { - if (_data_map[i] == CONTENT) { - map_data_column[null_map_index++] = (UInt8) false; - } else if (_data_map[i] == NULL_DATA) { - map_data_column[null_map_index++] = (UInt8) true; - } - } - } - } - } else { - _num_filtered = 0; - _run_length_null_map = &run_length_null_map; - if (null_map != nullptr) { - NullMap& map_data_column = *null_map; - auto null_map_index = map_data_column.size(); - map_data_column.resize(null_map_index + num_values); - - for (auto& run_length : run_length_null_map) { - if (is_null) { - memset(map_data_column.data() + null_map_index, 1, run_length); - null_map_index += run_length; - _num_nulls += run_length; - } else { - memset(map_data_column.data() + null_map_index, 0, run_length); - null_map_index += run_length; - } - is_null = !is_null; - } - } else { - for (auto& run_length : run_length_null_map) { - if (is_null) { - _num_nulls += run_length; - } - is_null = !is_null; - } - } - } -} - -bool ColumnSelectVector::can_filter_all(size_t remaining_num_values) { +bool FilterMap::can_filter_all(size_t remaining_num_values, size_t filter_map_index) { if (!_has_filter) { return false; } if (_filter_all) { // all data in normal columns can be skipped when _filter_all = true, // so the remaining_num_values should be less than the remaining filter map size. - DCHECK_LE(remaining_num_values + _filter_map_index, _filter_map_size); + DCHECK_LE(remaining_num_values + filter_map_index, _filter_map_size); // return true always, to make sure that the data in normal columns can be skipped. return true; } - if (remaining_num_values + _filter_map_index > _filter_map_size) { + if (remaining_num_values + filter_map_index > _filter_map_size) { return false; } - return simd::count_zero_num(reinterpret_cast(_filter_map + _filter_map_index), - remaining_num_values) == remaining_num_values; -} + return simd::count_zero_num( + reinterpret_cast(_filter_map_data + filter_map_index), + remaining_num_values) == remaining_num_values; +} + +Status FilterMap::generate_nested_filter_map(const std::vector& rep_levels, + std::vector& nested_filter_map_data, + std::unique_ptr* nested_filter_map, + size_t* current_row_ptr, size_t start_index) const { + if (!has_filter() || filter_all()) { + return Status::InternalError(fmt::format( + "FilterMap::generate_nested_filter_map failed: has_filter={}, filter_all={}", + has_filter(), filter_all())); + } + + if (rep_levels.empty()) { + return Status::OK(); + } + + nested_filter_map_data.resize(rep_levels.size()); -void ColumnSelectVector::skip(size_t num_values) { - _filter_map_index += num_values; + size_t current_row = current_row_ptr ? *current_row_ptr : 0; + + for (size_t i = start_index; i < rep_levels.size(); i++) { + if (i != start_index && rep_levels[i] == 0) { + current_row++; + if (current_row >= _filter_map_size) { + return Status::InvalidArgument(fmt::format( + "current_row >= _filter_map_size. current_row: {}, _filter_map_size: {}", + current_row, _filter_map_size)); + } + } + nested_filter_map_data[i] = _filter_map_data[current_row]; + } + + if (current_row_ptr) { + *current_row_ptr = current_row; + } + + auto new_filter = std::make_unique(); + RETURN_IF_ERROR( + new_filter->init(nested_filter_map_data.data(), nested_filter_map_data.size(), false)); + *nested_filter_map = std::move(new_filter); + + return Status::OK(); } ParsedVersion::ParsedVersion(std::string application, std::optional version, diff --git a/be/src/vec/exec/format/parquet/parquet_common.h b/be/src/vec/exec/format/parquet/parquet_common.h index da374d5fe793f8..e4c394c05d2489 100644 --- a/be/src/vec/exec/format/parquet/parquet_common.h +++ b/be/src/vec/exec/format/parquet/parquet_common.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include "vec/columns/column_nullable.h" @@ -69,42 +70,148 @@ struct ParquetInt96 { #pragma pack() static_assert(sizeof(ParquetInt96) == 12, "The size of ParquetInt96 is not 12."); -class ColumnSelectVector { +class FilterMap { public: - enum DataReadType : uint8_t { CONTENT = 0, NULL_DATA, FILTERED_CONTENT, FILTERED_NULL }; + FilterMap() = default; + Status init(const uint8_t* filter_map_data, size_t filter_map_size, bool filter_all); - ColumnSelectVector(const uint8_t* filter_map, size_t filter_map_size, bool filter_all); + Status generate_nested_filter_map(const std::vector& rep_levels, + std::vector& nested_filter_map_data, + std::unique_ptr* nested_filter_map, + size_t* current_row_ptr, size_t start_index = 0) const; - ColumnSelectVector() = default; + const uint8_t* filter_map_data() const { return _filter_map_data; } + size_t filter_map_size() const { return _filter_map_size; } + bool has_filter() const { return _has_filter; } + bool filter_all() const { return _filter_all; } + double filter_ratio() const { return _has_filter ? _filter_ratio : 0; } - void build(const uint8_t* filter_map, size_t filter_map_size, bool filter_all); + bool can_filter_all(size_t remaining_num_values, size_t filter_map_index); - const uint8_t* filter_map() { return _filter_map; } +private: + bool _has_filter = false; + bool _filter_all = false; + const uint8_t* _filter_map_data = nullptr; + size_t _filter_map_size = 0; + double _filter_ratio = 0; +}; - size_t num_values() const { return _num_values; } +class ColumnSelectVector { +public: + enum DataReadType : uint8_t { CONTENT = 0, NULL_DATA, FILTERED_CONTENT, FILTERED_NULL }; - size_t num_nulls() const { return _num_nulls; } + ColumnSelectVector() = default; - size_t num_filtered() const { return _num_filtered; } + Status init(const std::vector& run_length_null_map, size_t num_values, + NullMap* null_map, FilterMap* filter_map, size_t filter_map_index, + const std::unordered_set* skipped_indices = nullptr) { + _num_values = num_values; + _num_nulls = 0; + _read_index = 0; + size_t map_index = 0; + bool is_null = false; + _has_filter = filter_map->has_filter(); + + if (filter_map->has_filter()) { + // No run length null map is generated when _filter_all = true + DCHECK(!filter_map->filter_all()); + _data_map.resize(num_values); + for (auto& run_length : run_length_null_map) { + if (is_null) { + _num_nulls += run_length; + for (int i = 0; i < run_length; ++i) { + _data_map[map_index++] = FILTERED_NULL; + } + } else { + for (int i = 0; i < run_length; ++i) { + _data_map[map_index++] = FILTERED_CONTENT; + } + } + is_null = !is_null; + } - double filter_ratio() const { return _has_filter ? _filter_ratio : 0; } + size_t num_read = 0; + size_t i = 0; + size_t valid_count = 0; - void fallback_filter() { _has_filter = false; } + while (valid_count < num_values) { + DCHECK_LT(filter_map_index + i, filter_map->filter_map_size()); - bool has_filter() const { return _has_filter; } + if (skipped_indices != nullptr && + skipped_indices->count(filter_map_index + i) > 0) { + ++i; + continue; + } - bool can_filter_all(size_t remaining_num_values); + if (filter_map->filter_map_data()[filter_map_index + i]) { + _data_map[valid_count] = + _data_map[valid_count] == FILTERED_NULL ? NULL_DATA : CONTENT; + num_read++; + } + ++valid_count; + ++i; + } - bool filter_all() const { return _filter_all; } + _num_filtered = num_values - num_read; - void skip(size_t num_values); + if (null_map != nullptr && num_read > 0) { + NullMap& map_data_column = *null_map; + auto null_map_index = map_data_column.size(); + map_data_column.resize(null_map_index + num_read); - void reset() { - if (_has_filter) { - _filter_map_index = 0; + if (_num_nulls == 0) { + memset(map_data_column.data() + null_map_index, 0, num_read); + } else if (_num_nulls == num_values) { + memset(map_data_column.data() + null_map_index, 1, num_read); + } else { + for (size_t i = 0; i < num_values; ++i) { + if (_data_map[i] == CONTENT) { + map_data_column[null_map_index++] = (UInt8) false; + } else if (_data_map[i] == NULL_DATA) { + map_data_column[null_map_index++] = (UInt8) true; + } + } + } + } + } else { + _num_filtered = 0; + _run_length_null_map = &run_length_null_map; + if (null_map != nullptr) { + NullMap& map_data_column = *null_map; + auto null_map_index = map_data_column.size(); + map_data_column.resize(null_map_index + num_values); + + for (auto& run_length : run_length_null_map) { + if (is_null) { + memset(map_data_column.data() + null_map_index, 1, run_length); + null_map_index += run_length; + _num_nulls += run_length; + } else { + memset(map_data_column.data() + null_map_index, 0, run_length); + null_map_index += run_length; + } + is_null = !is_null; + } + } else { + for (auto& run_length : run_length_null_map) { + if (is_null) { + _num_nulls += run_length; + } + is_null = !is_null; + } + } } + return Status::OK(); } + size_t num_values() const { return _num_values; } + + size_t num_nulls() const { return _num_nulls; } + + size_t num_filtered() const { return _num_filtered; } + + bool has_filter() const { return _has_filter; } + template size_t get_next_run(DataReadType* data_read_type) { DCHECK_EQ(_has_filter, has_filter); @@ -137,22 +244,11 @@ class ColumnSelectVector { } } - void set_run_length_null_map(const std::vector& run_length_null_map, - size_t num_values, NullMap* null_map = nullptr); - private: std::vector _data_map; // the length of non-null values and null values are arranged in turn. const std::vector* _run_length_null_map; - bool _has_filter = false; - // only used when the whole batch is skipped - bool _filter_all = false; - const uint8_t* _filter_map = nullptr; - size_t _filter_map_size = 0; - double _filter_ratio = 0; - size_t _filter_map_index = 0; - - // generated in set_run_length_null_map + bool _has_filter; size_t _num_values; size_t _num_nulls; size_t _num_filtered; diff --git a/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp index d09b1a261abd81..d11b3153b4917c 100644 --- a/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp @@ -238,7 +238,7 @@ Status ScalarColumnReader::_skip_values(size_t num_values) { } Status ScalarColumnReader::_read_values(size_t num_values, ColumnPtr& doris_column, - DataTypePtr& type, ColumnSelectVector& select_vector, + DataTypePtr& type, FilterMap& filter_map, bool is_dict_filter) { if (num_values == 0) { return Status::OK(); @@ -301,9 +301,12 @@ Status ScalarColumnReader::_read_values(size_t num_values, ColumnPtr& doris_colu } null_map.emplace_back((u_short)remaining); } + ColumnSelectVector select_vector; { SCOPED_RAW_TIMER(&_decode_null_map_time); - select_vector.set_run_length_null_map(null_map, num_values, map_data_column); + RETURN_IF_ERROR(select_vector.init(null_map, num_values, map_data_column, &filter_map, + _filter_map_index)); + _filter_map_index += num_values; } return _chunk_reader->decode_values(data_column, type, select_vector, is_dict_filter); } @@ -314,9 +317,12 @@ Status ScalarColumnReader::_read_values(size_t num_values, ColumnPtr& doris_colu * whether the reader should read the remaining value of the last row in previous page. */ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, + FilterMap& filter_map, size_t batch_size, size_t* read_rows, bool* eof, bool is_dict_filter, - bool align_rows = false) { + bool align_rows) { + std::unique_ptr nested_filter_map; + + FilterMap* current_filter_map = &filter_map; size_t origin_size = 0; if (align_rows) { origin_size = _rep_levels.size(); @@ -326,17 +332,22 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType } else { _rep_levels.resize(0); _def_levels.resize(0); + if (_nested_filter_map_data) { + _nested_filter_map_data->resize(0); + } } size_t parsed_rows = 0; size_t remaining_values = _chunk_reader->remaining_num_values(); bool has_rep_level = _chunk_reader->max_rep_level() > 0; bool has_def_level = _chunk_reader->max_def_level() > 0; + // Handle repetition levels (indicates nesting structure) if (has_rep_level) { LevelDecoder& rep_decoder = _chunk_reader->rep_level_decoder(); + // Read repetition levels until batch is full or no more values while (parsed_rows <= batch_size && remaining_values > 0) { level_t rep_level = rep_decoder.get_next(); - if (rep_level == 0) { + if (rep_level == 0) { // rep_level 0 indicates start of new row if (parsed_rows == batch_size) { rep_decoder.rewind_one(); break; @@ -346,12 +357,26 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType _rep_levels.emplace_back(rep_level); remaining_values--; } + + // Generate nested filter map + if (filter_map.has_filter() && (!filter_map.filter_all())) { + if (_nested_filter_map_data == nullptr) { + _nested_filter_map_data.reset(new std::vector()); + } + RETURN_IF_ERROR(filter_map.generate_nested_filter_map( + _rep_levels, *_nested_filter_map_data, &nested_filter_map, + &_orig_filter_map_index, origin_size)); + // Update current_filter_map to nested_filter_map + current_filter_map = nested_filter_map.get(); + } } else if (!align_rows) { // case : required child columns in struct type parsed_rows = std::min(remaining_values, batch_size); remaining_values -= parsed_rows; _rep_levels.resize(parsed_rows, 0); } + + // Process definition levels (indicates null values) size_t parsed_values = _chunk_reader->remaining_num_values() - remaining_values; _def_levels.resize(origin_size + parsed_values); if (has_def_level) { @@ -360,6 +385,7 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType std::fill(_def_levels.begin() + origin_size, _def_levels.end(), 0); } + // Handle nullable columns MutableColumnPtr data_column; std::vector null_map; NullMap* map_data_column = nullptr; @@ -375,10 +401,16 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType } data_column = doris_column->assume_mutable(); } + + // Process definition levels to build null map size_t has_read = origin_size; size_t ancestor_nulls = 0; + size_t null_size = 0; + size_t nonnull_size = 0; null_map.emplace_back(0); bool prev_is_null = false; + std::unordered_set ancestor_null_indices; + while (has_read < origin_size + parsed_values) { level_t def_level = _def_levels[has_read++]; size_t loop_read = 1; @@ -386,16 +418,23 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType has_read++; loop_read++; } + if (def_level < _field_schema->repeated_parent_def_level) { - // when def_level is less than repeated_parent_def_level, it means that level - // will affect its ancestor. + for (size_t i = 0; i < loop_read; i++) { + ancestor_null_indices.insert(has_read - loop_read + i); + } ancestor_nulls += loop_read; continue; } + bool is_null = def_level < _field_schema->definition_level; + if (is_null) { + null_size += loop_read; + } else { + nonnull_size += loop_read; + } + if (prev_is_null == is_null && (USHRT_MAX - null_map.back() >= loop_read)) { - // If whether the values are nullable in current loop is the same the previous values, - // we can save the memory usage in null map null_map.back() += loop_read; } else { if (!(prev_is_null ^ is_null)) { @@ -413,29 +452,78 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType } size_t num_values = parsed_values - ancestor_nulls; - { - SCOPED_RAW_TIMER(&_decode_null_map_time); - select_vector.set_run_length_null_map(null_map, num_values, map_data_column); - } - RETURN_IF_ERROR(_chunk_reader->decode_values(data_column, type, select_vector, is_dict_filter)); - if (ancestor_nulls != 0) { - RETURN_IF_ERROR(_chunk_reader->skip_values(ancestor_nulls, false)); - } - if (!align_rows) { - *read_rows = parsed_rows; + // Handle filtered values + if (current_filter_map->filter_all()) { + // Skip all values if everything is filtered + if (null_size > 0) { + RETURN_IF_ERROR(_chunk_reader->skip_values(null_size, false)); + } + if (nonnull_size > 0) { + RETURN_IF_ERROR(_chunk_reader->skip_values(nonnull_size, true)); + } + if (ancestor_nulls != 0) { + RETURN_IF_ERROR(_chunk_reader->skip_values(ancestor_nulls, false)); + } + } else { + ColumnSelectVector select_vector; + { + SCOPED_RAW_TIMER(&_decode_null_map_time); + RETURN_IF_ERROR( + select_vector.init(null_map, num_values, map_data_column, current_filter_map, + _nested_filter_map_data ? origin_size : _filter_map_index, + &ancestor_null_indices)); + } + + RETURN_IF_ERROR( + _chunk_reader->decode_values(data_column, type, select_vector, is_dict_filter)); + if (ancestor_nulls != 0) { + RETURN_IF_ERROR(_chunk_reader->skip_values(ancestor_nulls, false)); + } } + *read_rows += parsed_rows; + _filter_map_index += parsed_values; + + // Handle cross-page reading if (_chunk_reader->remaining_num_values() == 0) { if (_chunk_reader->has_next_page()) { RETURN_IF_ERROR(_chunk_reader->next_page()); RETURN_IF_ERROR(_chunk_reader->load_page_data()); - select_vector.reset(); - return _read_nested_column(doris_column, type, select_vector, 0, read_rows, eof, + return _read_nested_column(doris_column, type, filter_map, 0, read_rows, eof, is_dict_filter, true); } else { *eof = true; } } + + // Apply filtering to repetition and definition levels + if (current_filter_map->has_filter()) { + if (current_filter_map->filter_all()) { + _rep_levels.resize(0); + _def_levels.resize(0); + } else { + std::vector filtered_rep_levels; + std::vector filtered_def_levels; + filtered_rep_levels.reserve(_rep_levels.size()); + filtered_def_levels.reserve(_def_levels.size()); + + const uint8_t* filter_map_data = current_filter_map->filter_map_data(); + + for (size_t i = 0; i < _rep_levels.size(); i++) { + if (filter_map_data[i]) { + filtered_rep_levels.push_back(_rep_levels[i]); + filtered_def_levels.push_back(_def_levels[i]); + } + } + + _rep_levels = std::move(filtered_rep_levels); + _def_levels = std::move(filtered_def_levels); + } + } + + // Prepare for next row + ++_orig_filter_map_index; + if (_rep_levels.size() > 0) { // make sure the rows of complex type are aligned correctly, // so the repetition level of first element should be 0, meaning a new row is started. @@ -443,6 +531,7 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType } return Status::OK(); } + Status ScalarColumnReader::read_dict_values_to_column(MutableColumnPtr& doris_column, bool* has_dict) { bool loaded; @@ -474,7 +563,7 @@ Status ScalarColumnReader::_try_load_dict_page(bool* loaded, bool* has_dict) { } Status ScalarColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, + FilterMap& filter_map, size_t batch_size, size_t* read_rows, bool* eof, bool is_dict_filter) { if (_converter == nullptr) { _converter = parquet::PhysicalToLogicalConverter::get_converter( @@ -499,8 +588,8 @@ Status ScalarColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr } if (_nested_column) { RETURN_IF_ERROR(_chunk_reader->load_page_data_idempotent()); - RETURN_IF_ERROR(_read_nested_column(resolved_column, resolved_type, select_vector, - batch_size, read_rows, eof, is_dict_filter)); + RETURN_IF_ERROR(_read_nested_column(resolved_column, resolved_type, filter_map, + batch_size, read_rows, eof, is_dict_filter, false)); break; } @@ -518,16 +607,16 @@ Status ScalarColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr bool skip_whole_batch = false; // Determining whether to skip page or batch will increase the calculation time. // When the filtering effect is greater than 60%, it is possible to skip the page or batch. - if (select_vector.has_filter() && select_vector.filter_ratio() > 0.6) { + if (filter_map.has_filter() && filter_map.filter_ratio() > 0.6) { // lazy read size_t remaining_num_values = 0; for (auto& range : read_ranges) { remaining_num_values += range.last_row - range.first_row; } if (batch_size >= remaining_num_values && - select_vector.can_filter_all(remaining_num_values)) { + filter_map.can_filter_all(remaining_num_values, _filter_map_index)) { // We can skip the whole page if the remaining values is filtered by predicate columns - select_vector.skip(remaining_num_values); + _filter_map_index += remaining_num_values; _current_row_index += _chunk_reader->remaining_num_values(); RETURN_IF_ERROR(_chunk_reader->skip_page()); *read_rows = remaining_num_values; @@ -537,9 +626,9 @@ Status ScalarColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr break; } skip_whole_batch = batch_size <= remaining_num_values && - select_vector.can_filter_all(batch_size); + filter_map.can_filter_all(batch_size, _filter_map_index); if (skip_whole_batch) { - select_vector.skip(batch_size); + _filter_map_index += batch_size; } } // load page data to decode or skip values @@ -557,7 +646,7 @@ Status ScalarColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr RETURN_IF_ERROR(_skip_values(read_values)); } else { RETURN_IF_ERROR(_read_values(read_values, resolved_column, resolved_type, - select_vector, is_dict_filter)); + filter_map, is_dict_filter)); } has_read += read_values; _current_row_index += read_values; @@ -585,7 +674,7 @@ Status ArrayColumnReader::init(std::unique_ptr element_read } Status ArrayColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, + FilterMap& filter_map, size_t batch_size, size_t* read_rows, bool* eof, bool is_dict_filter) { MutableColumnPtr data_column; NullMap* null_map_ptr = nullptr; @@ -611,7 +700,7 @@ Status ArrayColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr& (reinterpret_cast(remove_nullable(type).get())) ->get_nested_type()); // read nested column - RETURN_IF_ERROR(_element_reader->read_column_data(element_column, element_type, select_vector, + RETURN_IF_ERROR(_element_reader->read_column_data(element_column, element_type, filter_map, batch_size, read_rows, eof, is_dict_filter)); if (*read_rows == 0) { return Status::OK(); @@ -636,7 +725,7 @@ Status MapColumnReader::init(std::unique_ptr key_reader, } Status MapColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, + FilterMap& filter_map, size_t batch_size, size_t* read_rows, bool* eof, bool is_dict_filter) { MutableColumnPtr data_column; NullMap* null_map_ptr = nullptr; @@ -669,12 +758,12 @@ Status MapColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr& t size_t value_rows = 0; bool key_eof = false; bool value_eof = false; - RETURN_IF_ERROR(_key_reader->read_column_data(key_column, key_type, select_vector, batch_size, + RETURN_IF_ERROR(_key_reader->read_column_data(key_column, key_type, filter_map, batch_size, &key_rows, &key_eof, is_dict_filter)); + while (value_rows < key_rows && !value_eof) { size_t loop_rows = 0; - select_vector.reset(); - RETURN_IF_ERROR(_value_reader->read_column_data(value_column, value_type, select_vector, + RETURN_IF_ERROR(_value_reader->read_column_data(value_column, value_type, filter_map, key_rows - value_rows, &loop_rows, &value_eof, is_dict_filter)); value_rows += loop_rows; @@ -705,7 +794,7 @@ Status StructColumnReader::init( return Status::OK(); } Status StructColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, + FilterMap& filter_map, size_t batch_size, size_t* read_rows, bool* eof, bool is_dict_filter) { MutableColumnPtr data_column; NullMap* null_map_ptr = nullptr; @@ -748,22 +837,21 @@ Status StructColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr _read_column_names.insert(doris_name); - select_vector.reset(); + // select_vector.reset(); size_t field_rows = 0; bool field_eof = false; if (not_missing_column_id == -1) { not_missing_column_id = i; RETURN_IF_ERROR(_child_readers[doris_name]->read_column_data( - doris_field, doris_type, select_vector, batch_size, &field_rows, &field_eof, + doris_field, doris_type, filter_map, batch_size, &field_rows, &field_eof, is_dict_filter)); *read_rows = field_rows; *eof = field_eof; } else { while (field_rows < *read_rows && !field_eof) { size_t loop_rows = 0; - select_vector.reset(); RETURN_IF_ERROR(_child_readers[doris_name]->read_column_data( - doris_field, doris_type, select_vector, *read_rows - field_rows, &loop_rows, + doris_field, doris_type, filter_map, *read_rows - field_rows, &loop_rows, &field_eof, is_dict_filter)); field_rows += loop_rows; } diff --git a/be/src/vec/exec/format/parquet/vparquet_column_reader.h b/be/src/vec/exec/format/parquet/vparquet_column_reader.h index 4c6e5b1eac9f60..51cdc3dbbd7520 100644 --- a/be/src/vec/exec/format/parquet/vparquet_column_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_column_reader.h @@ -121,8 +121,8 @@ class ParquetColumnReader { : _row_ranges(row_ranges), _ctz(ctz), _io_ctx(io_ctx) {} virtual ~ParquetColumnReader() = default; virtual Status read_column_data(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, - size_t* read_rows, bool* eof, bool is_dict_filter) = 0; + FilterMap& filter_map, size_t batch_size, size_t* read_rows, + bool* eof, bool is_dict_filter) = 0; virtual Status read_dict_values_to_column(MutableColumnPtr& doris_column, bool* has_dict) { return Status::NotSupported("read_dict_values_to_column is not supported"); @@ -144,6 +144,8 @@ class ParquetColumnReader { virtual Statistics statistics() = 0; virtual void close() = 0; + virtual void reset_filter_map_index() = 0; + protected: void _generate_read_ranges(int64_t start_index, int64_t end_index, std::list& read_ranges); @@ -157,6 +159,8 @@ class ParquetColumnReader { int64_t _current_row_index = 0; int _row_range_index = 0; int64_t _decode_null_map_time = 0; + + size_t _filter_map_index = 0; }; class ScalarColumnReader : public ParquetColumnReader { @@ -171,9 +175,9 @@ class ScalarColumnReader : public ParquetColumnReader { _offset_index(offset_index) {} ~ScalarColumnReader() override { close(); } Status init(io::FileReaderSPtr file, FieldSchema* field, size_t max_buf_size); - Status read_column_data(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, size_t* read_rows, - bool* eof, bool is_dict_filter) override; + Status read_column_data(ColumnPtr& doris_column, DataTypePtr& type, FilterMap& filter_map, + size_t batch_size, size_t* read_rows, bool* eof, + bool is_dict_filter) override; Status read_dict_values_to_column(MutableColumnPtr& doris_column, bool* has_dict) override; MutableColumnPtr convert_dict_column_to_string_column(const ColumnInt32* dict_column) override; const std::vector& get_rep_level() const override { return _rep_levels; } @@ -184,6 +188,11 @@ class ScalarColumnReader : public ParquetColumnReader { } void close() override {} + void reset_filter_map_index() override { + _filter_map_index = 0; // nested + _orig_filter_map_index = 0; + } + private: tparquet::ColumnChunk _chunk_meta; const tparquet::OffsetIndex* _offset_index; @@ -192,13 +201,15 @@ class ScalarColumnReader : public ParquetColumnReader { std::vector _rep_levels; std::vector _def_levels; std::unique_ptr _converter = nullptr; + std::unique_ptr> _nested_filter_map_data = nullptr; + size_t _orig_filter_map_index = 0; Status _skip_values(size_t num_values); Status _read_values(size_t num_values, ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, bool is_dict_filter); - Status _read_nested_column(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, - size_t* read_rows, bool* eof, bool is_dict_filter, bool align_rows); + FilterMap& filter_map, bool is_dict_filter); + Status _read_nested_column(ColumnPtr& doris_column, DataTypePtr& type, FilterMap& filter_map, + size_t batch_size, size_t* read_rows, bool* eof, bool is_dict_filter, + bool align_rows); Status _try_load_dict_page(bool* loaded, bool* has_dict); }; @@ -210,9 +221,9 @@ class ArrayColumnReader : public ParquetColumnReader { : ParquetColumnReader(row_ranges, ctz, io_ctx) {} ~ArrayColumnReader() override { close(); } Status init(std::unique_ptr element_reader, FieldSchema* field); - Status read_column_data(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, size_t* read_rows, - bool* eof, bool is_dict_filter) override; + Status read_column_data(ColumnPtr& doris_column, DataTypePtr& type, FilterMap& filter_map, + size_t batch_size, size_t* read_rows, bool* eof, + bool is_dict_filter) override; const std::vector& get_rep_level() const override { return _element_reader->get_rep_level(); } @@ -222,6 +233,8 @@ class ArrayColumnReader : public ParquetColumnReader { Statistics statistics() override { return _element_reader->statistics(); } void close() override {} + void reset_filter_map_index() override { _element_reader->reset_filter_map_index(); } + private: std::unique_ptr _element_reader; }; @@ -236,9 +249,9 @@ class MapColumnReader : public ParquetColumnReader { Status init(std::unique_ptr key_reader, std::unique_ptr value_reader, FieldSchema* field); - Status read_column_data(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, size_t* read_rows, - bool* eof, bool is_dict_filter) override; + Status read_column_data(ColumnPtr& doris_column, DataTypePtr& type, FilterMap& filter_map, + size_t batch_size, size_t* read_rows, bool* eof, + bool is_dict_filter) override; const std::vector& get_rep_level() const override { return _key_reader->get_rep_level(); @@ -256,6 +269,11 @@ class MapColumnReader : public ParquetColumnReader { void close() override {} + void reset_filter_map_index() override { + _key_reader->reset_filter_map_index(); + _value_reader->reset_filter_map_index(); + } + private: std::unique_ptr _key_reader; std::unique_ptr _value_reader; @@ -272,9 +290,9 @@ class StructColumnReader : public ParquetColumnReader { Status init( std::unordered_map>&& child_readers, FieldSchema* field); - Status read_column_data(ColumnPtr& doris_column, DataTypePtr& type, - ColumnSelectVector& select_vector, size_t batch_size, size_t* read_rows, - bool* eof, bool is_dict_filter) override; + Status read_column_data(ColumnPtr& doris_column, DataTypePtr& type, FilterMap& filter_map, + size_t batch_size, size_t* read_rows, bool* eof, + bool is_dict_filter) override; const std::vector& get_rep_level() const override { if (!_read_column_names.empty()) { @@ -306,6 +324,12 @@ class StructColumnReader : public ParquetColumnReader { void close() override {} + void reset_filter_map_index() override { + for (const auto& reader : _child_readers) { + reader.second->reset_filter_map_index(); + } + } + private: std::unordered_map> _child_readers; std::set _read_column_names; diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp index b9259be936bb31..a9854b53f3beec 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp @@ -317,9 +317,9 @@ Status RowGroupReader::next_batch(Block* block, size_t batch_size, size_t* read_ // call _do_lazy_read recursively when current batch is skipped return _do_lazy_read(block, batch_size, read_rows, batch_eof); } else { - ColumnSelectVector run_length_vector; + FilterMap filter_map; RETURN_IF_ERROR(_read_column_data(block, _lazy_read_ctx.all_read_columns, batch_size, - read_rows, batch_eof, run_length_vector)); + read_rows, batch_eof, filter_map)); RETURN_IF_ERROR( _fill_partition_columns(block, *read_rows, _lazy_read_ctx.partition_columns)); RETURN_IF_ERROR(_fill_missing_columns(block, *read_rows, _lazy_read_ctx.missing_columns)); @@ -389,7 +389,7 @@ void RowGroupReader::_merge_read_ranges(std::vector& row_ranges) { Status RowGroupReader::_read_column_data(Block* block, const std::vector& columns, size_t batch_size, size_t* read_rows, bool* batch_eof, - ColumnSelectVector& select_vector) { + FilterMap& filter_map) { size_t batch_read_rows = 0; bool has_eof = false; for (auto& read_col_name : columns) { @@ -420,11 +420,12 @@ Status RowGroupReader::_read_column_data(Block* block, const std::vectorreset_filter_map_index(); while (!col_eof && col_read_rows < batch_size) { size_t loop_rows = 0; RETURN_IF_ERROR(_column_readers[read_col_name]->read_column_data( - column_ptr, column_type, select_vector, batch_size - col_read_rows, &loop_rows, + column_ptr, column_type, filter_map, batch_size - col_read_rows, &loop_rows, &col_eof, is_dict_filter)); col_read_rows += loop_rows; } @@ -445,7 +446,7 @@ Status RowGroupReader::_read_column_data(Block* block, const std::vector select_vector_ptr = nullptr; + std::unique_ptr filter_map_ptr = nullptr; size_t pre_read_rows; bool pre_eof; std::vector columns_to_filter; @@ -460,9 +461,9 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re // read predicate columns pre_read_rows = 0; pre_eof = false; - ColumnSelectVector run_length_vector; + FilterMap filter_map; RETURN_IF_ERROR(_read_column_data(block, _lazy_read_ctx.predicate_columns.first, batch_size, - &pre_read_rows, &pre_eof, run_length_vector)); + &pre_read_rows, &pre_eof, filter_map)); if (pre_read_rows == 0) { DCHECK_EQ(pre_eof, true); break; @@ -504,9 +505,10 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re block->get_by_position(0).column->assume_mutable()->clear(); } - const uint8_t* __restrict filter_map = result_filter.data(); - select_vector_ptr.reset(new ColumnSelectVector(filter_map, pre_read_rows, can_filter_all)); - if (select_vector_ptr->filter_all()) { + const uint8_t* __restrict filter_map_data = result_filter.data(); + filter_map_ptr.reset(new FilterMap()); + RETURN_IF_ERROR(filter_map_ptr->init(filter_map_data, pre_read_rows, can_filter_all)); + if (filter_map_ptr->filter_all()) { for (auto& col : _lazy_read_ctx.predicate_columns.first) { // clean block to read predicate columns block->get_by_name(col).column->assume_mutable()->clear(); @@ -526,7 +528,7 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re // If continuous batches are skipped, we can cache them to skip a whole page _cached_filtered_rows += pre_read_rows; } else { // pre_eof - // If select_vector_ptr->filter_all() and pre_eof, we can skip whole row group. + // If filter_map_ptr->filter_all() and pre_eof, we can skip whole row group. *read_rows = 0; *batch_eof = true; _lazy_read_filtered_rows += pre_read_rows; @@ -541,17 +543,17 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re return Status::Cancelled("cancelled"); } - if (select_vector_ptr == nullptr) { + if (filter_map_ptr == nullptr) { DCHECK_EQ(pre_read_rows + _cached_filtered_rows, 0); *read_rows = 0; *batch_eof = true; return Status::OK(); } - ColumnSelectVector& select_vector = *select_vector_ptr; + FilterMap& filter_map = *filter_map_ptr; std::unique_ptr rebuild_filter_map = nullptr; if (_cached_filtered_rows != 0) { - _rebuild_select_vector(select_vector, rebuild_filter_map, pre_read_rows); + RETURN_IF_ERROR(_rebuild_filter_map(filter_map, rebuild_filter_map, pre_read_rows)); pre_read_rows += _cached_filtered_rows; _cached_filtered_rows = 0; } @@ -560,7 +562,8 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re size_t lazy_read_rows; bool lazy_eof; RETURN_IF_ERROR(_read_column_data(block, _lazy_read_ctx.lazy_read_columns, pre_read_rows, - &lazy_read_rows, &lazy_eof, select_vector)); + &lazy_read_rows, &lazy_eof, filter_map)); + if (pre_read_rows != lazy_read_rows) { return Status::Corruption("Can't read the same number of rows when doing lazy read"); } @@ -568,7 +571,7 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re // we set pre_read_rows as batch_size for lazy read columns, so pre_eof != lazy_eof // filter data in predicate columns, and remove filter column - if (select_vector.has_filter()) { + if (filter_map.has_filter()) { if (block->columns() == origin_column_num) { // the whole row group has been filtered by _lazy_read_ctx.vconjunct_ctx, and batch_eof is // generated from next batch, so the filter column is removed ahead. @@ -613,24 +616,24 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re return Status::OK(); } -void RowGroupReader::_rebuild_select_vector(ColumnSelectVector& select_vector, - std::unique_ptr& filter_map, - size_t pre_read_rows) const { +Status RowGroupReader::_rebuild_filter_map(FilterMap& filter_map, + std::unique_ptr& filter_map_data, + size_t pre_read_rows) const { if (_cached_filtered_rows == 0) { - return; + return Status::OK(); } size_t total_rows = _cached_filtered_rows + pre_read_rows; - if (select_vector.filter_all()) { - select_vector.build(nullptr, total_rows, true); - return; + if (filter_map.filter_all()) { + RETURN_IF_ERROR(filter_map.init(nullptr, total_rows, true)); + return Status::OK(); } uint8_t* map = new uint8_t[total_rows]; - filter_map.reset(map); + filter_map_data.reset(map); for (size_t i = 0; i < _cached_filtered_rows; ++i) { map[i] = 0; } - const uint8_t* old_map = select_vector.filter_map(); + const uint8_t* old_map = filter_map.filter_map_data(); if (old_map == nullptr) { // select_vector.filter_all() == true is already built. for (size_t i = _cached_filtered_rows; i < total_rows; ++i) { @@ -639,7 +642,8 @@ void RowGroupReader::_rebuild_select_vector(ColumnSelectVector& select_vector, } else { memcpy(map + _cached_filtered_rows, old_map, pre_read_rows); } - select_vector.build(map, total_rows, false); + RETURN_IF_ERROR(filter_map.init(map, total_rows, false)); + return Status::OK(); } Status RowGroupReader::_fill_partition_columns( diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.h b/be/src/vec/exec/format/parquet/vparquet_group_reader.h index a889c1774ea126..f73e9ebe09eee6 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.h @@ -175,10 +175,10 @@ class RowGroupReader : public ProfileCollector { Status _read_empty_batch(size_t batch_size, size_t* read_rows, bool* batch_eof); Status _read_column_data(Block* block, const std::vector& columns, size_t batch_size, size_t* read_rows, bool* batch_eof, - ColumnSelectVector& select_vector); + FilterMap& filter_map); Status _do_lazy_read(Block* block, size_t batch_size, size_t* read_rows, bool* batch_eof); - void _rebuild_select_vector(ColumnSelectVector& select_vector, - std::unique_ptr& filter_map, size_t pre_read_rows) const; + Status _rebuild_filter_map(FilterMap& filter_map, std::unique_ptr& filter_map_data, + size_t pre_read_rows) const; Status _fill_partition_columns( Block* block, size_t rows, const std::unordered_map>& diff --git a/be/src/vec/exec/format/parquet/vparquet_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_reader.cpp index dd62640e23666d..1748138a5777de 100644 --- a/be/src/vec/exec/format/parquet/vparquet_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_reader.cpp @@ -477,8 +477,7 @@ Status ParquetReader::set_fill_columns( } } - if (!_lazy_read_ctx.has_complex_type && _enable_lazy_mat && - _lazy_read_ctx.predicate_columns.first.size() > 0 && + if (_enable_lazy_mat && _lazy_read_ctx.predicate_columns.first.size() > 0 && _lazy_read_ctx.lazy_read_columns.size() > 0) { _lazy_read_ctx.can_lazy_read = true; } diff --git a/be/test/vec/exec/parquet/parquet_common_test.cpp b/be/test/vec/exec/parquet/parquet_common_test.cpp new file mode 100644 index 00000000000000..067153629379b0 --- /dev/null +++ b/be/test/vec/exec/parquet/parquet_common_test.cpp @@ -0,0 +1,457 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "vec/exec/format/parquet/parquet_common.h" + +#include + +namespace doris::vectorized { + +// ============= FilterMap Tests ============= +class FilterMapTest : public testing::Test { +protected: + void SetUp() override {} + void TearDown() override {} +}; + +// Basic initialization test +TEST_F(FilterMapTest, test_basic_init) { + std::vector filter_data = {1, 0, 1, 0}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + EXPECT_TRUE(filter_map.has_filter()); + EXPECT_FALSE(filter_map.filter_all()); + EXPECT_EQ(filter_map.filter_map_size(), 4); + EXPECT_DOUBLE_EQ(filter_map.filter_ratio(), 0.5); +} + +// Empty filter test +TEST_F(FilterMapTest, test_empty_filter) { + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(nullptr, 0, false).ok()); + + EXPECT_FALSE(filter_map.has_filter()); + EXPECT_FALSE(filter_map.filter_all()); + EXPECT_DOUBLE_EQ(filter_map.filter_ratio(), 0.0); +} + +// Test filter all +TEST_F(FilterMapTest, test_filter_all) { + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(nullptr, 0, true).ok()); + + EXPECT_TRUE(filter_map.has_filter()); + EXPECT_TRUE(filter_map.filter_all()); + EXPECT_DOUBLE_EQ(filter_map.filter_ratio(), 1.0); +} + +// Test all zero filter +TEST_F(FilterMapTest, test_all_zero_filter) { + std::vector filter_data(100, 0); // Large data test + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + EXPECT_TRUE(filter_map.has_filter()); + EXPECT_TRUE(filter_map.filter_all()); + EXPECT_DOUBLE_EQ(filter_map.filter_ratio(), 1.0); +} + +// Test all one filter +TEST_F(FilterMapTest, test_all_one_filter) { + std::vector filter_data(100, 1); + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + EXPECT_FALSE(filter_map.has_filter()); + EXPECT_FALSE(filter_map.filter_all()); + EXPECT_DOUBLE_EQ(filter_map.filter_ratio(), 0.0); +} + +// Basic nested filter map generation test +TEST_F(FilterMapTest, test_generate_nested_filter_map_basic) { + std::vector filter_data = {1, 0, 1}; + std::vector rep_levels = {0, 1, 1, 0, 1, 0}; + + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + std::vector nested_filter_map_data; + std::unique_ptr nested_filter_map; + size_t current_row = 0; + + ASSERT_TRUE(filter_map + .generate_nested_filter_map(rep_levels, nested_filter_map_data, + &nested_filter_map, ¤t_row, 0) + .ok()); + + std::vector expected = {1, 1, 1, 0, 0, 1}; + EXPECT_EQ(nested_filter_map_data, expected); + EXPECT_EQ(current_row, 2); +} + +// Empty rep_levels test +TEST_F(FilterMapTest, test_generate_nested_filter_map_empty_rep_levels) { + std::vector filter_data = {1, 0, 1}; + std::vector rep_levels; + + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + std::vector nested_filter_map_data; + std::unique_ptr nested_filter_map; + size_t current_row = 0; + + ASSERT_TRUE(filter_map + .generate_nested_filter_map(rep_levels, nested_filter_map_data, + &nested_filter_map, ¤t_row, 0) + .ok()); + + EXPECT_TRUE(nested_filter_map_data.empty()); + EXPECT_EQ(current_row, 0); +} + +// Test nested filter map generation with start index +TEST_F(FilterMapTest, test_generate_nested_filter_map_with_start_index) { + std::vector filter_data = {1, 0, 1}; + std::vector rep_levels = {0, 1, 1, 0, 1, 0}; + // 011, 01, 0 + // 111, 00, 1 + + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + std::vector nested_filter_map_data; + std::unique_ptr nested_filter_map; + size_t current_row = 1; + + ASSERT_TRUE(filter_map + .generate_nested_filter_map(rep_levels, nested_filter_map_data, + &nested_filter_map, ¤t_row, 3) + .ok()); + + std::vector expected(6); // Initialize with zeros + expected[5] = 1; // Last value should be 1 + EXPECT_EQ(nested_filter_map_data, expected); + EXPECT_EQ(current_row, 2); +} + +// Test filter map boundary check +TEST_F(FilterMapTest, test_generate_nested_filter_map_boundary) { + std::vector filter_data = {1}; + std::vector rep_levels = {0, 1, 1, 0}; // Needs 2 rows but filter_data only has 1 + + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + std::vector nested_filter_map_data; + std::unique_ptr nested_filter_map; + size_t current_row = 0; + + // Should return error + auto status = filter_map.generate_nested_filter_map(rep_levels, nested_filter_map_data, + &nested_filter_map, ¤t_row, 0); + EXPECT_FALSE(status.ok()); +} + +// Test can_filter_all functionality +TEST_F(FilterMapTest, test_can_filter_all) { + std::vector filter_data = {0, 0, 1, 0, 0, 1, 0}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + EXPECT_TRUE(filter_map.can_filter_all(2, 0)); // First two are 0 + EXPECT_FALSE(filter_map.can_filter_all(3, 0)); // First three include 1 + EXPECT_TRUE(filter_map.can_filter_all(2, 3)); // Two values starting at index 3 are 0 + EXPECT_FALSE(filter_map.can_filter_all(2, 5)); // Index 5 contains 1 + EXPECT_TRUE(filter_map.can_filter_all(1, 6)); // Last value is 0 +} + +// Test can_filter_all when filter_all is true +TEST_F(FilterMapTest, test_can_filter_all_when_filter_all) { + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(nullptr, 100, true).ok()); + + EXPECT_TRUE(filter_map.can_filter_all(50, 0)); + EXPECT_TRUE(filter_map.can_filter_all(100, 0)); +} + +class CrossPageTest : public testing::Test { +protected: + void SetUp() override { + filter_data = {1, 0, 1, 0, 1}; + + // 1111 00 + page1_rep_levels = {0, 1, 1, 1, 0, 1}; + // 00 11 000 1 + page2_rep_levels = {1, 1, 0, 1, 0, 1, 1, 0}; + } + + std::vector filter_data; + std::vector page1_rep_levels; + std::vector page2_rep_levels; +}; + +TEST_F(CrossPageTest, test_basic1) { + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + std::vector nested_filter_map_data; + std::unique_ptr nested_filter_map; + size_t current_row = 0; + std::vector rep_levels; + rep_levels.insert(rep_levels.end(), page1_rep_levels.begin(), page1_rep_levels.end()); + rep_levels.insert(rep_levels.end(), page2_rep_levels.begin(), page2_rep_levels.end()); + + ASSERT_TRUE(filter_map + .generate_nested_filter_map(rep_levels, nested_filter_map_data, + &nested_filter_map, ¤t_row, 0) + .ok()); + + std::vector expected = {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1}; + + EXPECT_EQ(nested_filter_map_data, expected); + + EXPECT_EQ(current_row, 4); +} + +TEST_F(CrossPageTest, test_basic2) { + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + std::vector nested_filter_map_data; + std::unique_ptr nested_filter_map; + + size_t current_row = 0; + std::vector rep_levels; + rep_levels.insert(rep_levels.end(), page1_rep_levels.begin(), page1_rep_levels.end()); + + ASSERT_TRUE(filter_map + .generate_nested_filter_map(rep_levels, nested_filter_map_data, + &nested_filter_map, ¤t_row, 0) + .ok()); + std::vector expected1 = {1, 1, 1, 1, 0, 0}; + + EXPECT_EQ(nested_filter_map_data, expected1); + EXPECT_EQ(current_row, 1); + + rep_levels.insert(rep_levels.end(), page2_rep_levels.begin(), page2_rep_levels.end()); + + size_t start_index = page1_rep_levels.size(); + ASSERT_TRUE(filter_map + .generate_nested_filter_map(rep_levels, nested_filter_map_data, + &nested_filter_map, ¤t_row, start_index) + .ok()); + + std::vector expected2 = {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1}; + + EXPECT_EQ(nested_filter_map_data, expected2); + EXPECT_EQ(current_row, 4); +} + +// ============= ColumnSelectVector Tests ============= +class ColumnSelectVectorTest : public testing::Test { +protected: + void SetUp() override {} + void TearDown() override {} +}; + +// Basic initialization test +TEST_F(ColumnSelectVectorTest, test_basic_init) { + std::vector run_length_null_map = {2, 1, 3}; // 2 non-null, 1 null, 3 non-null + std::vector filter_data = {1, 0, 1, 0, 1, 0}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + ColumnSelectVector select_vector; + NullMap null_map; + ASSERT_TRUE(select_vector.init(run_length_null_map, 6, &null_map, &filter_map, 0).ok()); + + EXPECT_TRUE(select_vector.has_filter()); + EXPECT_EQ(select_vector.num_values(), 6); + EXPECT_EQ(select_vector.num_nulls(), 1); + EXPECT_EQ(select_vector.num_filtered(), 3); +} + +// Test initialization without null map +TEST_F(ColumnSelectVectorTest, test_init_without_null_map) { + std::vector run_length_null_map = {2, 1, 3}; + std::vector filter_data = {1, 1, 1, 1, 1, 1}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + ColumnSelectVector select_vector; + ASSERT_TRUE(select_vector.init(run_length_null_map, 6, nullptr, &filter_map, 0).ok()); + + EXPECT_EQ(select_vector.num_nulls(), 1); + EXPECT_EQ(select_vector.num_filtered(), 0); +} + +// Test all null values +TEST_F(ColumnSelectVectorTest, test_all_null) { + std::vector run_length_null_map = {0, 6}; // All null + std::vector filter_data = {1, 1, 1, 1, 1, 1}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + ColumnSelectVector select_vector; + NullMap null_map; + ASSERT_TRUE(select_vector.init(run_length_null_map, 6, &null_map, &filter_map, 0).ok()); + + EXPECT_EQ(select_vector.num_nulls(), 6); + EXPECT_EQ(select_vector.num_filtered(), 0); + + // Verify null_map + EXPECT_EQ(null_map.size(), 6); + for (size_t i = 0; i < 6; i++) { + EXPECT_EQ(null_map[i], 1); + } +} + +// Test no null values +TEST_F(ColumnSelectVectorTest, test_no_null) { + std::vector run_length_null_map = {6}; // All non-null + std::vector filter_data = {1, 1, 1, 1, 1, 1}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + ColumnSelectVector select_vector; + NullMap null_map; + ASSERT_TRUE(select_vector.init(run_length_null_map, 6, &null_map, &filter_map, 0).ok()); + + EXPECT_EQ(select_vector.num_nulls(), 0); + EXPECT_EQ(select_vector.num_filtered(), 0); + + // Verify null_map + EXPECT_EQ(null_map.size(), 6); + for (size_t i = 0; i < 6; i++) { + EXPECT_EQ(null_map[i], 0); + } +} + +// Test get_next_run with filter +TEST_F(ColumnSelectVectorTest, test_get_next_run_with_filter) { + std::vector run_length_null_map = {2, 1, 3}; // 1, 1, 0, 1, 1, 1 + std::vector filter_data = {1, 1, 0, 1, 1, 0}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + ColumnSelectVector select_vector; + NullMap null_map; + ASSERT_TRUE(select_vector.init(run_length_null_map, 6, &null_map, &filter_map, 0).ok()); + + ColumnSelectVector::DataReadType type; + + // Verify read sequence + EXPECT_EQ(select_vector.get_next_run(&type), 2); + EXPECT_EQ(type, ColumnSelectVector::CONTENT); + + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::FILTERED_NULL); + + EXPECT_EQ(select_vector.get_next_run(&type), 2); + EXPECT_EQ(type, ColumnSelectVector::CONTENT); + + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::FILTERED_CONTENT); +} + +// Test get_next_run without filter +TEST_F(ColumnSelectVectorTest, test_get_next_run_without_filter) { + std::vector run_length_null_map = {2, 1, 3}; + std::vector filter_data = {1, 1, 1, 1, 1, 1}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(nullptr, 0, false).ok()); + + ColumnSelectVector select_vector; + NullMap null_map; + ASSERT_TRUE(select_vector.init(run_length_null_map, 6, &null_map, &filter_map, 0).ok()); + + ColumnSelectVector::DataReadType type; + + // Verify read sequence + EXPECT_EQ(select_vector.get_next_run(&type), 2); + EXPECT_EQ(type, ColumnSelectVector::CONTENT); + + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::NULL_DATA); + + EXPECT_EQ(select_vector.get_next_run(&type), 3); + EXPECT_EQ(type, ColumnSelectVector::CONTENT); + + EXPECT_EQ(select_vector.get_next_run(&type), 0); +} + +// Test complex null pattern +TEST_F(ColumnSelectVectorTest, test_complex_null_pattern) { + // Alternating null and non-null values + std::vector run_length_null_map = {1, 1, 1, 1, 1, 1}; // 1, 0, 1, 0, 1, 0 + std::vector filter_data = {1, 0, 1, 0, 1, 0}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + ColumnSelectVector select_vector; + NullMap null_map; + ASSERT_TRUE(select_vector.init(run_length_null_map, 6, &null_map, &filter_map, 0).ok()); + + EXPECT_EQ(select_vector.num_nulls(), 3); + EXPECT_EQ(select_vector.num_filtered(), 3); + + ColumnSelectVector::DataReadType type; + + // Verify alternating read pattern + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::CONTENT); + + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::FILTERED_NULL); + + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::CONTENT); + + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::FILTERED_NULL); + + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::CONTENT); + + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::FILTERED_NULL); +} + +// Test filter_map_index +TEST_F(ColumnSelectVectorTest, test_filter_map_index) { + std::vector run_length_null_map = {0, 1, 3}; // 0, 1, 1, 1 + std::vector filter_data = {0, 0, 1, 1, 1, 1}; + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + ColumnSelectVector select_vector; + NullMap null_map; + ASSERT_TRUE(select_vector.init(run_length_null_map, 4, &null_map, &filter_map, 2).ok()); + + EXPECT_EQ(select_vector.num_filtered(), 0); + + ColumnSelectVector::DataReadType type; + EXPECT_EQ(select_vector.get_next_run(&type), 1); + EXPECT_EQ(type, ColumnSelectVector::NULL_DATA); + + EXPECT_EQ(select_vector.get_next_run(&type), 3); + EXPECT_EQ(type, ColumnSelectVector::CONTENT); +} + +} // namespace doris::vectorized diff --git a/be/test/vec/exec/parquet/parquet_nested_type_cross_page_test.cpp b/be/test/vec/exec/parquet/parquet_nested_type_cross_page_test.cpp new file mode 100644 index 00000000000000..cff0937910e9a8 --- /dev/null +++ b/be/test/vec/exec/parquet/parquet_nested_type_cross_page_test.cpp @@ -0,0 +1,179 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include + +#include "vec/exec/format/parquet/parquet_common.h" + +namespace doris::vectorized { +class ParquetCrossPageTest : public testing::Test { +protected: + void SetUp() override { + // filter_data is row-level, corresponding to 8 rows + filter_data = {1, 0, 0, 1, 0, 0, 1, 1}; // filter conditions for 8 rows + + // Page 1: 2 complete rows + 1 incomplete row + page1_rep_levels = { + 0, 1, 1, // Row 1: [1,1,1] + 0, 1, // Row 2: [1,1] + 0, 1, 1 // Row 3: [1,1,to be continued...] + }; + + // Page 2: continue Row 3 + 2 complete rows + 1 incomplete row + page2_rep_levels = { + 1, 1, // Continue Row 3: [...1,1] + 0, 1, // Row 4: [1] + 0, 1, 1, // Row 5: [1,1,1] + 0, 1 // Row 6: [1,to be continued...] + }; + + // Page 3: continue Row 6 + 2 complete rows + page3_rep_levels = { + 1, 1, // Continue Row 6: [...1,1] + 0, 1, 1, // Row 7: [1,1] + 0, 1 // Row 8: [1] + }; + } + + std::vector filter_data; // Row-level filter conditions for all data + std::vector page1_rep_levels; + std::vector page2_rep_levels; + std::vector page3_rep_levels; +}; + +// Test complete processing of three pages +TEST_F(ParquetCrossPageTest, test_three_pages_complete) { + size_t current_row = 0; + + // Process first page + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(filter_data.data(), filter_data.size(), false).ok()); + + std::vector nested_data1; + std::unique_ptr nested_map1; + + ASSERT_TRUE(filter_map + .generate_nested_filter_map(page1_rep_levels, nested_data1, &nested_map1, + ¤t_row, 0) + .ok()); + + // Verify first page results - using corresponding rows from overall filter_data + std::vector expected1 = {1, 1, 1, 0, 0, 0, 0, 0}; + EXPECT_EQ(nested_data1, expected1); + EXPECT_EQ(current_row, 2); // Processed up to Row 3 + + // Process second page - continue with same filter_map + std::vector nested_data2; + std::unique_ptr nested_map2; + + ASSERT_TRUE(filter_map + .generate_nested_filter_map(page2_rep_levels, nested_data2, &nested_map2, + ¤t_row, 0) + .ok()); + + // Verify second page results + std::vector expected2 = {0, 0, 1, 1, 0, 0, 0, 0, 0}; + EXPECT_EQ(nested_data2, expected2); + EXPECT_EQ(current_row, 5); // Processed up to Row 6 + + // Process third page - continue with same filter_map + std::vector nested_data3; + std::unique_ptr nested_map3; + + ASSERT_TRUE(filter_map + .generate_nested_filter_map(page3_rep_levels, nested_data3, &nested_map3, + ¤t_row, 0) + .ok()); + + // Verify third page results + std::vector expected3 = {0, 0, 1, 1, 1, 1, 1}; + EXPECT_EQ(nested_data3, expected3); + EXPECT_EQ(current_row, 7); // Processed all 8 rows +} + +// Test case where a single row spans three pages +TEST_F(ParquetCrossPageTest, test_single_row_across_three_pages) { + // Filter for one long array row + std::vector row_filter = {1, 0}; // Only 2 rows of data + + // First page + std::vector rep1 = { + 0, // Start of first row + 1, 1, 1, // 3 array elements + 1, 1 // To be continued... + }; + + // Second page + std::vector rep2 = { + 1, 1, 1, // Continue with 3 array elements + 1, 1, 1 // To be continued... + }; + + // Third page + std::vector rep3 = { + 1, 1, 1, // Last 3 array elements + 0 // Start of second row + }; + + size_t current_row = 0; + + // Use same filter_map for all pages + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(row_filter.data(), row_filter.size(), false).ok()); + + // Process first page + std::vector nested_data1; + std::unique_ptr nested_map1; + + ASSERT_TRUE( + filter_map.generate_nested_filter_map(rep1, nested_data1, &nested_map1, ¤t_row, 0) + .ok()); + + // Verify first page results + std::vector expected1(rep1.size(), 1); // All use first row's filter value + EXPECT_EQ(nested_data1, expected1); + EXPECT_EQ(current_row, 0); // Still in first row + + // Process second page + std::vector nested_data2; + std::unique_ptr nested_map2; + + ASSERT_TRUE( + filter_map.generate_nested_filter_map(rep2, nested_data2, &nested_map2, ¤t_row, 0) + .ok()); + + // Verify second page results + std::vector expected2(rep2.size(), 1); // Still using first row's filter value + EXPECT_EQ(nested_data2, expected2); + EXPECT_EQ(current_row, 0); // Still in first row + + // Process third page + std::vector nested_data3; + std::unique_ptr nested_map3; + + ASSERT_TRUE( + filter_map.generate_nested_filter_map(rep3, nested_data3, &nested_map3, ¤t_row, 0) + .ok()); + + // Verify third page results + std::vector expected3(rep3.size(), 1); + expected3.back() = 0; // Last element uses second row's filter value + EXPECT_EQ(nested_data3, expected3); + EXPECT_EQ(current_row, 1); // Moved to second row +} + +} // namespace doris::vectorized diff --git a/be/test/vec/exec/parquet/parquet_thrift_test.cpp b/be/test/vec/exec/parquet/parquet_thrift_test.cpp index 9759f91cad9903..ccad0b1acb4f20 100644 --- a/be/test/vec/exec/parquet/parquet_thrift_test.cpp +++ b/be/test/vec/exec/parquet/parquet_thrift_test.cpp @@ -229,12 +229,14 @@ static Status get_column_values(io::FileReaderSPtr file_reader, tparquet::Column } else { data_column = src_column->assume_mutable(); } + FilterMap filter_map; + RETURN_IF_ERROR(filter_map.init(nullptr, 0, false)); ColumnSelectVector run_length_map; // decode page data if (field_schema->definition_level == 0) { // required column std::vector null_map = {(u_short)rows}; - run_length_map.set_run_length_null_map(null_map, rows, nullptr); + RETURN_IF_ERROR(run_length_map.init(null_map, rows, nullptr, &filter_map, 0)); RETURN_IF_ERROR( chunk_reader.decode_values(data_column, resolved_type, run_length_map, false)); } else { @@ -248,7 +250,7 @@ static Status get_column_values(io::FileReaderSPtr file_reader, tparquet::Column chunk_reader.insert_null_values(data_column, num_values); } else { std::vector null_map = {(u_short)num_values}; - run_length_map.set_run_length_null_map(null_map, rows, nullptr); + RETURN_IF_ERROR(run_length_map.init(null_map, rows, nullptr, &filter_map, 0)); RETURN_IF_ERROR(chunk_reader.decode_values(data_column, resolved_type, run_length_map, false)); } @@ -263,7 +265,7 @@ static Status get_column_values(io::FileReaderSPtr file_reader, tparquet::Column chunk_reader.insert_null_values(data_column, num_values); } else { std::vector null_map = {(u_short)num_values}; - run_length_map.set_run_length_null_map(null_map, rows, nullptr); + RETURN_IF_ERROR(run_length_map.init(null_map, rows, nullptr, &filter_map, 0)); RETURN_IF_ERROR( chunk_reader.decode_values(data_column, resolved_type, run_length_map, false)); } diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/create_table.hql new file mode 100644 index 00000000000000..863595278f343d --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/create_table.hql @@ -0,0 +1,58 @@ +CREATE DATABASE IF NOT EXISTS multi_catalog; +USE multi_catalog; + +CREATE TABLE `nested_cross_page1_parquet`( + `id` int, + `array_col` array, + `description` string) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' +STORED AS INPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/nested_cross_page1_parquet'; + +msck repair table nested_cross_page1_parquet; + +CREATE TABLE `nested_cross_page2_parquet`( + id INT, + nested_array_col ARRAY>, + array_struct_col ARRAY>, + map_array_col MAP>, + complex_struct_col STRUCT< + a: ARRAY, + b: MAP>, + c: STRUCT< + x: ARRAY, + y: STRING + > + >, + description STRING) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' +STORED AS INPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/nested_cross_page2_parquet'; + +msck repair table nested_cross_page2_parquet; + +CREATE TABLE `nested_cross_page3_parquet`( + `id` int, + `array_col` array, + `description` string) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' +STORED AS INPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/nested_cross_page3_parquet'; + +msck repair table nested_cross_page3_parquet; + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..ce0d98f7bfc14ad84473dcb8869d6a8055b6801f GIT binary patch literal 36976 zcmeFac|6o>|M-7OLuD#2xmg3MGh+O7CF^HSz{6< zTa+V%Y7#@3rXrcr!VnF=>-Bz5=lA%2KKJMTK7N1v9>3*r-?^LX^}1fK=WDsH>;0b2 z>Ar52Q}ciNQ^YCYCy@`?q@(gqtl3P9Lz%l$Eu;Um)Xvq`_KynvOL?Kg+TFR^($7BI z^XIQtegFLDZJ40Lh8kt_k!f;wbnwWP2|-q-v@BojYahdKBJ0)9hOty`mCNhndj$bz z#~*ADEW^I{zwBAuTbHlm&=wZx9JH**{d8l&)wZ^$PhJ$z9?pJ>c-5@DJ|Ojy-a+rq zq-^8-kEVBzdfFz;&JH&>z4?~YvoYLpsHserYJF*AIBzU0(`e=7Ccg<2qX2A))z{t8Gj6UAuFia$4Lv$G_We|yqOtgly6c6R+H3k5npL^eUqei0?Oy);3vcFo z%EPN+;hptYXJ0j+Q3;>?TK8M?yTL~nAJwMDZGRBzAimeZp)rR~+h26R{m(F3Ln>*q zb+ez((;5Ai9DeD}ncAFX{%a;F3--G8HUHwVw`TwKWxI>kjwwAEu)fmm+*$f$wCKQO zr<`GDwaw4o2M^6jUFA|0>UU`Kli<|gmE@rhkskUo6*44x4E=aXpwjaV`wza}%&vIx zj=ncSa4DC(%Mbthl0f&V*9^dnYce>GJ2%rUk_*V zzsV~)-TEe~o?*CiN?)RUuYAp%FB2t(zt+ZjmlT-Bm5{IBPxj5eTKh)gh5UEAX7})s z*S4JhOTRwNzFn{+)cxqe>uWZef4S?`scQ9ffwg}8M^>}kMbDTkp{IWnf7FKQg^ZTT z=Iy$9;pZcRMfcj*WLHPnWOq7uj%H{~Wse6%EZ)^T{@cA)|5F@e^U8UNS}uoLnQNlE zY<9igDH@*}^|feW!kusJnE_HsUav)MmKpl(8T!@zD2La=h*aKiJv?Tp$|YM?tey8V zF0K8htdUqq@22SY%Jz8@XGEJ5PxYqV`h1f`{qS<*^=p~84`=^XJW@G$wb$_c%U#cX zMN=m$FIUYL)I>**ZHnl-d$=d?lSJFDN}V?SvhcyAWtsUM7dHj3?Qa~LR-Eh{d)C^y zOQFVDknr|PMQom^^%}=6~#YgwO)L)t*GGIaK{}HX@zYiqTe1~oY~*- zX8BI)frkZ;?wYf`lJ^yE)43RZi{kxsPNBd!^y^e;T;O+uE1dYO8uz}^Cwp_g*UD^a z-#XpVrx!D}%B}d>`00sR#(~AEZtrS7uB5~;KECU{bN+R|J=E7sFFuQ1)uq5zu)tgo5$O1Y*Kmqzc((poTjoe)3&#$`mL$oHOV|% z=g_gS&pt2p4%`2Ja=Jd>V6t}+xj69@H#hZ`P4@EOKaMIg#zkY(*fEc7{2uTx9G+R^ zv9ob|?no5x^cyT={PWS*ca%-`ZMqUaIsftKyYADDiUw-kNi+y+QCcmDjkuou01okb;LPtykJITxTO2sD(jru#hcn#ROy$D@JH4M zyXyzfpS$FwY~-y!x#aznL&UC}l4{+;87H%`>4e6FS;2tG!0f--XC zClX#?&mZ!tn>GHPGcc<(GLc}IQmp-OHS@~s;D!g&b#5zgo5YW^9|yV<)bHz9jWQl7 zY;}nC8sD5Me(tW=eM|J;-N92@_ML}Qzr5#UphJ7xb+|CG;7aJ+x*Lk|sYwc>EpIhc z_!>QxiCqp6eT$X%M)WN)RcLxC^YvGzxSq-uFZwsN414YFaha?G?vLZ?qPqDfbgRcu&!LJnl`jrbWfz2WPznn|W`ji> zkHi;NyJVenu5>N;@cg;&^1fdjzm-yxYYT>xOAo}nD!k}9S&*ktTkyH|%YT0T|DXd? z1D_mh`)^Enec3iXn_*ZmYtg^Io+s+-a-uXm(SPUx?=F3x#*1vL@^C-?OSD^fFEg^m z7(;63&v_4}^X_9Nx@AT4j7$B88hPK4W%oDrUIoVV;?{zsV*NM`V>4=pt=77Rc3n1! z5jNTemK%pWIvp09mQ4w^Y&+YsKAyy7F7`;Gp}8(x&D?cN#e;~rVhd8AlnV^7MNGVrXJ_kGd#hOJihrRk|&o%)VX zEei9jcp~Y4z}Fxn^hM~W6=6rXFPb7w#4c7)@1TAuQupe6v$y4$xW*|??p_Ch&fT+b zj8vB#cb?~KM}MfgBxQ%re$}Q787p%w$ufzia+zH+t>zNPoRxh^ba^#Vi=ugDKR3zH zugbK^sBM|I$U;udRn=9kN3}=Ik>)J#t55G#d-1!otgkj*itZy5Xd#iZbWWL6(><9H z^CIc8IZel9R;n2s>t5~q_0#xleA$WcR$@v^-S^xDQ+}f zR@EkH!vd~9-Corud4nYPFnzshd(sARZV)|OwLN)*H1{Z7TvaEjYChMOZl$V|TqVIh zL|>;`l2o;jdw?FOT9RBP#f_npRYQ`h7I3L_H`S2jDoJi6-B|TwQk6J2gdVH$~G-+}^*N<+iYMMML!40SDs@5h=F60K%Lse^& zC#ATtbQRV3q{#)`0J@iIeDb78lZxuh{Lh+nGmGyeZmCQ{;-qntnd;1f&${$Cm+I~r zeajcGomD%adO&TVOoYt1%$zMEP3|(`7EBR6-KL{5acYAp&OiB@)00&d)uzn9OIE~hIwX^*dOpQ@j_+1_gUmYfA_={D zzN@#a-!gxZd6Udm`VzV$-GClRcTjaqc9!&wpzEu?NOBgxCgQuasYj+!ZQHL!B4s*F zF)||-K|htLHSM6Msu~>cp66>%x0AW9W{}vu+*h2gt#;>Fx1z5^lYva{<{+^$lO`z{ zKefoDrDA%@zH^(l&~511s;kU-5_-#g73dyndB5^R_2hjOn-0_a)TqBQlQ2@5Sko05 zh8q7^H`!N(9;e1n>{j9aL>Ez$I<{dcSB7q(CY88hId?vNrP`Te8x*-q>3(Ww5;rJw z=h0==Y>sVM#+9SntJx%OP~u9^*Q>Q3+d$?nr-!SxCvH&T&ZUd1=^U$C%3VyiQqxJS zTFzZaU#C`btV)rqNDoviNvu-liqgqyA;+qgahK5D)It)gl(obrdaT;V z#3~i;9J-jA^0DZp+(q>5YRZYx%ef2anrc^$MJsZb(F4@3Bt|Q9NpuA@&tuWcxbk!- zHP6IoC9WjhP_6%1G?}YJk5cPTj8@@_(52N(k4-M+%F=DsOcN)UbH(YpYPH8E6}e=3 zs9J5}q%v2GuA&xyY;qY_f$mk9nGj1BGmu&?QM&V4mqtq+@B5eE9pnYqy>^%?9I(#W zSMcW4MN_Ol#oN)L&-2rZrL67c`k04>R^j41X*bh@w5eV2maE9n_Ku{XFJ#&~?np64 z;2mky^1?6Dq^!uYThU&Z{S!k3y%!Dsp3Yh99sWIE-S2<+Evegmc1=t7@*lrBzcs5C z_u+4bm-6O};3nQSgt=o^E}&Gapm%bwZTX~^)c4Ei``@&23%{8+1K;%$TBPcEbHL@N z7M;^1!Dt5)6fv=rym9$>U-*8xXR(%0H`~rvW8s zs2j^L#NairjnOhZ7BjNck!jXh-X5$*4ouJbXFcNOoH*Ijf~&UZq_JBew^pl264Mjf=V4yH&X<1@rcY)l zon|KjyCK740mEqp3hk7^dyLim457>YQ@r^yK&1Pp`0{td=!X9#z3K}H6MR01&Q?Qa zWJ`kwJUY^(s+0X9tx!!VCJA+y_Q;Pi5Mko*`1VFeF&-FQgVh}2t^cHMM^R~6QKx;@<3nyMJVE8 zhKD$#YsGno1#ST^GJ?dYQ8LI>DMRTvyAhZ^86IRt*D4gT>pbruQ`rX5rLuVQnabv9 zbmkA95mqAw<(~2HddQ1_ZbWEQD^p9iLmHawalP0$NF%N#%XP#S%^ z%U9~fsv~dXJ>_H{{x(QxTSnhfh9LwrJkMK&)hqz`34gfXB9c{GDwKaN`}3 zTGTWR#A&vS+|KNWh3m5`e@%&94t3d-zt)T01S8LKSxW3&7@3#L>cy^rkzIK<*0&R( zBP}B}nf)igcV~GfC3Z2)?kqR<O%i~ zZ@wJlb<#hok=F<7)~9YP&&Y?9Z?9o2$;gL}vDA%~82QjKmPWNPbrja}qYir+W&)cc zTaA4IGs%R}8nz2&atcNoY!gbXG@zwhKAvF50x;Gx(tz3ltqZV<)MfUAVV_lbtRKH0 zlI_pv6Jtz3iWBL)TC4`XnOB$kPc-rbkeEQd+Kf61-^M@cvPCG8+Vk8`SBY7+K^!~k0A|E>2%&zEN(S|#@_IkZsg&+v{5~F162j; zQPyFvq)g8T==>Jt6YT8(-EPTW%``oU@-(q5-|okM3dpA!CZdcqK&GYh%CI;sKoaj-D9LVyD4tqUiS^|&~Emuyk0{|Id$=70$gk?LrqmqB@`^57oH9KZkaJr+>1+i+Dp>MY zFl*uQQnRC6!H@qCkPkCz<}q{ushiHr#p2cg@}|FTBd-;Zt?IEGsa}w!rw)4^WqKhX z7q)nwU^@ZQ$&$a8Sqr_au`GA;<97nGGowb7Q3}Y?bY2A(rwzzr|I$Vt{-zmGk2Rrs zL6)AnY%*mU{kd)dU$mv4&Nc+3p(TG6vle<;v$NdLkKYE!wu~AQBNULK>AYer4t9EM zp?_#2uNSiHRgX2M4nUUuI&5Rgv=ktvTKZ40qW~FY$=6}lLN9Bq%A@@FeSqxCs1aj~ z0&+B+SA)gD&WtVfA8q7K19DnD){Hs;S@!F)#VFJ8=S2RT7E?M~8j#YKd^Kh~^fGQo zxwId@5s-};aq}1|fK*B6UB?8lFQ;$#t2FYO0oklRy@6^5S(@swH7U~z0J)&W^aR@$ zkhYfmHOzSEWt?TXtskESNLEIiC?f}uIq5tGCV+i8UF4tB$QuIWkoxo{su^Tys>@cO zOp^dfYN@5Obpfes$=6`ULoefYmh1ZQTLIac5l3Qp0n#g-SBMEawLN)9~GbFVYfEXR82G#gf00IRm{E>?l|9<2M7cIYTgy zVFpOEbY4CtfPFcA)8DL-*8#{5_34e&1jsU8hpkJQ76+twOZ*A87a+YX`RkZ7&`W`3 zxtAZm3y@tI0#QaCAnVe3m6!nb<#e%sT_bN4kfZ9;Ce#GTGG3RhLYWo=q*%)gooxn4 zGfTcEa|U`T*jaAo$L|1SM}~mJNC0F)I&h@K>q(@N#xbK~ zE(@w`Xd`+xSG*nPmN;>KVu>KthTR-d>rhqf-0x($XdUaEQ)u#v6>aFz*xdz)dsjYM z**XV(6P&7 zTwVIG_+q3KU;Ak@Rx1O_Kjs?x#;io6mpAGKlo}Nn+0w!^7k|H8Uo`K#G3jI4umIxB zEZp=HOAIOyk&E`R_QFs^PiLA!!`N1+d8=Hsowe6lQ0}EEG>$z4Npme8Y z)sJa_QbR6UHBVX{6)Cp%QwCP64r%-~S2uasY7wGat@-o}tNjI(x99364!1(c*43ZN zv05!q7R@#EiIIgg|Eh2GnL32p{OQobP4ih|;GHNJeZ<-en(FCEbE+SchluiW(Oa#( z(m`oQ6Z4z$MlFiIHMcZrcpdnxTl48LR{Jx+%jZfrjHv-qhNOIQ*a8Z_y71-c;Wk)J z#@rN48Txm1?siNWT+`<^W6IFxvbhR+H9OEQP>`=8vD_f)5>m*+F-KSp2U;(sCKZJb zvFAiuhianId*!3$t-X>VrL8olhhq*9$w59^-`WcdJ$KQZn#Vdp*(o0_Y3-E=N()+7 z)0jRe_2r|rt-WA-cv{hnDK#+taW}^YGd+z)%6avHep5YAM$f`c%ULOqVWWKXyu38n zTiaKEGQw)5px!fcOHU1tKuIHOKgD3R%AmY5w=`{d1bjx;eGlPk@zajXqm)g~7mZao0|q~D!ZSwE%?N^QAlE9-#_Q0}2sJ{T(oWwBgzp!L8- zP`c8Zy{DE!oYQkd6Nh_YpY*Q&bO)=219!i8ZfMGIFDz2;nooSJ)&!I_b4Pz4HU>-M z)t{WLRji;22ab|n+;#wMCn={4zlJzr3pXjVnxO};<)i23*+SnmSAW`Kodb((yO(2Q zJqlacSUy_Qdf)`)vy-OjGo=ogjJczyhmFD6c-<#|>l|xvapZVV;uK(7fz&V0ih{O8 zIdIlsrmzdHT&u74nF@g=3t6~Ho|O-swwI4q%(GpI4D;7~I&7U|0~{w#pI%%PaH2?8 zXv6Cv+hq$k$+7~#Wxag#lDv);$R%LSCuOWw4606p*uN7_91)7(C#0PG ziDW9n!q2nxUQQxKpbAP=lIc>GG%%$dITjRw3@BwtrgAK4U`ji18Yuz_C@Cb<qjL42nPtlv*THGOGiasLA0J z!E#V8Cz&d+I)K^X!1+oMYy#yblBo)-1DG979C3N;`OQ3MM?xsX)5m{khQ z(!HEQieN1$*OF=#S*5@%b>sw61d5)QWfipr8z?*8)h*Yc0Dg|b#6NgL@ zh=Nj-RJ({33e3>GoJ$nJDp0N>)h=U&0yET+<3tvo9fn4u1wUW&i~lm?_) zB~~afL!CIr6oC{drAW21tWjW&?&VZd1UjJ9A=Q#uqre<>#V=;%05fMVC!Zo%1Ijg|ctutY zFmoI^0TjV9P%b0IFJa{XGsl55L=kKR9UcmHn7oeqL8(uQS7Lbq)60otND)YaQj!!e z%NhXYz+O%zMW78zZBjg$H2};3M@|$)pae=KQoI6d0GI;~oC%7+1e7MEcoo(FFbAAC z(i8!FN0}5M&B(CKfN8dulSUE1^M7(BX=W+Q447t)99xP2p8u1wq!~Gu88FQpI2{zh zdQh$>%`9h`0n^Nhqe~HpgHoI{vzS!}%(}gtQi@<5DA$o@6j^n^taIdqQUqjBl1Vd5 zSaraxbKs0p1je8=Ce0|b>VR42#8IIL#6T%Vnpwn30A|8oP7Xz&2}(`U%raI2FcTa( zUK9a5kS7&LGxDqiU?wVwJQ2SiwZ*2_y3NHX2g=LEgA@ML0?KukrkQj!<=wR>jyE!z>^bhntQod1dqj!hq;)&An zBV+PNG)E#N>rciSkk9Jg`l7$;<=e|8nU9f3>8+PQ+2ylEsW%X!-GI`Dw3~YClhDVn zz4cqr$ClpuCiJnRw_Z-Z>cNFOwBL|NN{?us1Hv94V+N>>qG0bHGV+e%xvJcx`r zAh89ByO0=6#yXM6Mxq50L&(_w_Pdn4RFx#N2Zc>S89Je!zZ9h=p$uOeP)5+AT7-x& zN|5*#iKqpBNUTNTkO75^W)qQk6^X+Jl$9v1T_ugZ1LYb)#!`{!gTyUJj3i^bkQi1; zTZVevUMAHt@s31sQ#hj341^*XQjB4TBO@17Ng^5ZfTgaY zv0+V;$k-axxz#W0d3mU?2a?Ra2(dK8I}f#rg?u~^IE9S$q3VxR(Jov?JFH2PX^o6l zgm_bt(aJCpMhc1}Ye)i+>5;aAY+Y4 zT!ch-B&L(Gl}J=W;vOVskg@AX)I*{x5;Mt|9}>-x2v32tWb8E(?T`ou;2ar~MWPQ9 z;Q*W`W0^<{Ln8Dni;USLk%mO*8AirfNK8i}>dxg0WNbYWuOiVNi5JNj1Bqowgu*Y8 zv2Y|dAQ1|`Ovb(<@hK9a@N6K1YX?J(ibRUeJf*McBP5N5bLE*K|G~I?VD^OY? zvpM%@ccJh<$yh5A7ai|AyEy9Q1~@6R)|DBBtqfW$ygu~&5;O&|3$_|kZ6ZQ zC_I;pk&)dyI@Ec^T7m4Xegu-uypW8=BC!F9PkG z4I$AEiBNb28B;)_4-%p9J7g>iiD5{D!Yj#`6B21igu<)HSQir0kqCv~C1Zw2yoy99 z{2m#rL}D2dq3~)l7KOwHBtqf$$=C!EpCS2S9TK7Nhh$6zi9Se#!XJ^b93+Mz5ejc6V_rz4ArT7yn~V*hhsVkzB45SO zkzW<+J#zy+0p3b7!RaQlVxXgc-jI@jp7TRrL*Ts^hsIe)svF{sLKS%VU#Eue_j#LTSBmplM+AraLvH1?_mZZE@1to$ zWcuNl;IJo}CL_~Gm`f zeI2fj{ysi+=8~S@%YMIr_KRiBNiKex)|d9I-}i;-5|M3h6g6_$s4%AVQ9*oZTi0lD z*ZYk9_c)_p4QeL(@3W7!d^=+99)kb13)AHXdMiKY`rp$0-VpI=U^hKI6?r&U{OaKF zb5}%1m_7g9a^thom%dTnG}5L0OtrrFh^yTB;zL%s)Ae<+Me%Fu$cEczR*r1AbLP~G zuu~B)4=7c-G{3lawIXDHG1+zG_`evsjBI;xFTEnfznJ`Ahh-HZLB(XZkw-7?{nw$} z?HAgvBTI@SPQAFdHL&kmMaWav%KgQJ`i}F+zx#0=x$|#+Tt@Evn;*B4JO9&9rI=&i z(gUZcZb^6OL5q5??LW1|?RL+#wk3S|UwWOM1bLY=;z(`(TG;Pp{%?N#z0Cj34+8(2 zpQp9QuEmkIPA@#kmzVpnZgr2-?%Sn*qF}^?HeddBx6>0}FY{Azq<uqBNZdF z9;YY&LI_4PY^NtwFY`-rq<{z1xAl z`@5Q+l$^NwpNaonOVGb!_U~%?yW~W=hwRGgRofzWo#tI!%GTHW&&0oNiC^`qN2ph5 z!}aRx-3jy!>T2pPIZ@^z`=5z_(~`={u4CBU-l{eB86rntYiwL-SYMAWbCEfEZk-s_S!Bw_hc%&S4yIrJQ!1jl{8ydz3+RpTpUk^&9xUFQq zn9tCE@ZX2@a{X&TsjJ;qK7R4vh8x^gw!fe=^tnN)|8=;U8YsumKgm{n7?kRJXPche zb*$Kq`GQcpmh1n!ABMi`|NPTauK(|T82UZ`(@*b6`Dnw{qutCDHI;2gmwxq0mv)=H zbxyi>@(-uL!On|EDyW{t7ykS34=3>>760lty3?uXihuPR=5*>v#lQM(MXBSP&Xf0D z)1B6RIk45U`0qmbBNe#PHM(MnXK}Jq;H%F6HazDP__ovaNQI+k@qZomL{}Ji7N*7P&3+|pza<|%CqM_E6@kij!zbn+={73zxCyTl= z=z%+%D%82Ii^H@}RGr`AZndIB<3DO)Pr|iN+&$mqZsl8|q1Tmx1@2^4s1Ld>{*M~< zgv;lT4fTkRg@4d?NPK_qV!ls;(NfpWaoG=X3tNUZrw%i$zhn-cGSq1|lj?9j>ucvQ zp^{{nXM1F=&CRN$_kIT++dn+Jc45JtO`REgw2!Slo9}90;IKR5?ae!953IX-z&h?o zfk|!;Nq+U-IHyBjpUkk+If~2O!yoC3hvE&IphSk%D_UJv%vJ-;|d zO6RN9YC-uen6j+X;&OhjOM0ez3cRn5wferjyZWn@x}dxY=6BXtaHl|#d&JqJ_v9=ei@|O^i0^Y1eC!gtR1KVyYw-W_jV_A0_(%w3p z6-ii?pF|-M!=++VSH`#8tyBB-VFGVoh*(I=iI`owcYpLm8=bv!&ntGd$>0Lb-<#DTe9kD$FDp6R}ZHHjR~ zTCh;z@IFInrJfvV(#EG-4c4zQVGXaaSd|+Xc_@8R<}<@gcYo$zhuhnA%K!drtleLM z{ot>|9XdMY=XMU~czF1eGoP8;yZakwKC`Ia_&1gR$GfQ)7jEign5a+HMo=%F@|Ql* z9-4jO;|jLLwF$R?Nc6W5)t(B9*ROY1kKHkrFv7G}Xi;9Q#4%dmy0tuIi*!{x?-kgJ zy9e+OgRNM}dWMq!-^z=#IYx{u;CUX*X7_@zAu@gq#wy4-0*n`xte?KS10}Jb>w>@o zML3*1!kmL=^B`jIR|u8;Dkl67!1N!i+1PEq4S6Y*7^YN#mvq-93*3u7(&htRF-_xx z2f@pO8xx)cUZ!C+8=pb&{Hp%tZy~sod+3=+2(DdX*ojuVcb5gVz=0 z)el}>RsEMa;1%i~YJ=CevBXdlPg$w!QYIceZKQ1to^tc};9k5tZ(_pnPAVU&+1O{k z1i7Db4{bjPLARF}2Hb<()w?b+@SbLjw6VecUd#C4a&Q+Q_Y%nB407*)ENt)gUmk@l z3f)6>aEw!lp@PxhOAtq^>(VKlbAF`lA>@N|CZx>Sf`E{?QyN|m2O`LvA>D&m~MnDAmeAH-<~P6y)P`HZ-ShTxp2 z5<^3rv#IOSC7g3*q^%84r(=9@362?x2`@|x@ryq&xi-?)hjX5e4=UrFcQN6mcsd9}vG0v}sO*VFOq|FV|pL#w% z7!2tH=FAUF*FWSdKU4!k@=<*IBC;vIeGyp&-@b^P_JgeXgKUq;d#0Y}fW@=?nU{dw zJN4WPazQd2q_d{uPRRVPv72>pigIlQsVL-{xc8wz8@5jvLX}wNOvMr?GokBKA<9gM zW)mn~0+j$y1B4PfB|!6$xSe1m93sR3p&0hZ%Y3PGrsG~j#97!&D6IjZ*hq+GLb0&S zUo~wPwAqN_;CntTwfw}E>qeALo3kG3Mx8W0o3p{{uAQ{u*PHJ;DV_9;@IG*PHF@VR zg(CJNTi83VxhY}CWcRH*5gFnA{_^VBonvTXbPL=1nvW7zf1>=-mS!W0q|Mnrb=McP z3$38&FrtJT+eK#XcNL>5D?IiX*?qWJWPPdZKEo4tBD@E~ukltrt(3C%(tI4UICZ3+ ziD+7KS7~ws&5wKojgHbwXr@OAc^AgLe zgDKHSZ_y2C>YcY3)d#TJym~DzU{jQ^t=S0sOPL4*15=$y?FuTc-pr2%}cj4A7kp3q}^(%=0iM!h8)Ox=6$Hw{h2pV#)?E|*PRdM-qfyTxx? z?xo{KPgh)jwyVwNcCy`Y-jfq|kcHgFrv_-sSF@-6#$o%X$%mqh7x#Urzl|poDwfv? z5fY3k!4OjMCG9u7v{zEhwRrw7X)d@$nlYsiPxp`*H3HK0_*h@`3W{!1!t^~>PuyMk zbV!Qnic|V%!v~>3!%|EN*cKz(4`AD+guMcbi+!|ZxO1-(7J;u>HTw6j(A@Ya?-%&; zev)EN>6|t0Pk$FJMil{y_Go<&-sT}CEFGux)7XDQ`d!8pGQM46#i+7i8i!2ZL%`2U zm>rlJ4bYb18H_7oZSJclYF9p;mSPU#lmQz10Z=B4DQ-rvLr1T``00p03-Z-v>&?m;k2b;_J_@P z6_nT2dq>9$=8#CL*;V*k#Ye>)@${QcEUM({ z)db2|=sGM!RSRX<;0UEmpeBS_br2{4fl`4DovSbdPgS%pQwUcxo)EQNC=*-nyB>i` zBeF_>vxRz zQHU}W%EJUon?QvMvuY+#)dXsQ=+#Uufs!U%6W$3?X+oJtpx_aM&S4Ib)hv@h4H2k1 zVXtxtRH@MQ$G!>`%EEmG4-bSIAhMc;$35y*8i7g>_KHEEya?CXf~ytlqsWH)EN4pw z_WZSWYkcX7*Hq@x$|xi^txedS?*E?qWX7ZJgu{&UlHWdV{%iZ}-X#mFWro|#vbJ8+ z*%I?bcVBvyc)I8JK$pL|lXpnZ6l*J5W?k0q%s5Opk*%-n-VQ#ZtNTcI?I5K1c^B=)8Ed2I+X zP}T4Yo`@gPtP_`SS#-_mrMD=qvO+3dFiNOuDB2B~v>!}#DTA;kuSC~Z;VE%M8GG>h z>m{jg@nU}`GylNj$CH^)a7`T9I^5+(GHOzd5O&!)-jp z>%HEtc+#!GlwiCJt^vl!!J%a4T3qwe0CQ;FT#PDX1XBv}q}_VG9r2`d?lctH;fofW z=)!xG1n z0bbh^QAPxw_n(r~)1sXkEiLX3#(wqg-EeDAF0-Wj1uc2as<^UjkyCrDjr?N8mgHk& zkEEoEFyCiNeoD?(CwC_B-qpL>TO0Xb774V{8&3Z$Rb=w;FRN8&n=jgDtYNfVpCFl2xbMrT{X}LOf_byg%xb&8ZaOkG}&i>!^UAjV|J;>^l$ zTbvoyu9LPELC*|%;*hT|d-2d$rg5`@a4+2K=*J;o*K`PQ*z}R#MXWrojhRW~Wk|g< z$DKt?sx~djM~VNLf_tls?Z&;6lm~I|Cylr_IVK7Bwn)Rh&%Cq4y=6^$@X*(qiK@rC zzc}lmGMAaOROwmfa_HIim~wy~-f4?B$#nQ84qao?hCAox zXEnPb^S)>6adWSjJlx#6;}G=p$}k%@*EeYf^QpWcBZxILwh51wePtA4^|8cp=Y$xa zBSrcsHS?OkarzAfJT-;!#kl!(PkdprpSR-XSuuClp3ytooit#VunH?Qm;#=F*4jhhd}RN}EbM)9uIj@00>j?{GEsg+J-J$!I`Vy)%} zeN1e*bNI=fS)1O~Kak7RIr2Ac>zY*_Uv7zXcKirrZ5o6laPLi+ z*o*VN&opc|+~R{v`KI%H&$n7NqF>KK&@s=PNW8$2^?1($fjLnJ{-vf-ZPY&~t>&U%xo_#GaEKRb(m%4W1DOUP6OF zAzc_gR7lSz=yk%}rG?IAckil!b(B70E-EX zl8~y=>T3t<`bv?xN2+Keda$35^!7o=LhE(?HMGZFUeF$*WAW@w{Ymsuj@|(~(XlX> zD$)njDDPm<9uo<)MOt}$$JxXLQWAx+g*)3xxVADxhEl{51u}@tEC}s3BC%A$)l~~` zT0?QeZDGrW8zPu63l^5MmJmIJvxUTFjEEqZC9jBv>l2w#11W)oL4|NTG!i|&cZWzN zMYs~gMfDfQ$p-3!jFP_g(w4ms*ZV93aRIX2ES&X@XiQq}~x)3Abb~k=!3I&>#DW zli*DB;-hfI!-QGjFMyh^1%#L_oV5`eOFlm-xM zy7Yy2yKvF(3Jruia!5#@OVB-qi+M^&7w$t{p>r;=s5E_yc%4rWuk$fa;&t9XLcGpn zg|G8cCm~%?NEbfEMuhY@{DHKIVIi|Rv#q{uPmes!%qw8!l$5$uyu(9J&yPuQz}ig?(a@-WnuX1LIWnT8`6aI z1q9txc!cu_`qXV=VRD4d45D?x`q+@r;67pCB@BN`NEa@3|!a1JUbw4{MeiK%&A~cW{8VJL82tW8%VsI=e40s60KN7u^e3dC#pcYzlYu7&_bD zXO!Pw&|i%%U<>>@Uj4pcO8sK(H-6NvfW97Gmx9{B@+C!EGfPD!LW*csKRbN78T#7l zYs0ZmVx?L?)on9a^>vrRje>$?vzHa&qh%JX#KAFDYw2rasy5Omhs~{Go?KMEoh$Ys zc`V6-aea`tntA3LZ*}{blWaSy$mbW8D)wz>EBf5oh7~WO1}6QB;l98vY(={}+s+m* z`me*VJKHW7FA4~3Vk`cy!4*=@@mda&K?t*5kIgP&4Q z@kL{wUhUf(ZYUpVZ)YeUW&bdwAotRN4|zTJZiaL%j;ua^tG6PluSA0vsqIr4xS-m@ zs{4cMgMX&BpsDwf+IE$JC+>MzJ^$c(4NXN)ceUJ49w|VSnF*}eq;<)h~ zy_%kp&|$4&Z+~WWbSF86p*vB#D|)%TAV1$%61sq@Ht^gL^2Pc=Q# zeBMI4cT?1lwsqopSG8Ey)(r2#wXI1_Nyjc!YsoIMpL*Ga9eMn-o?dQ8eCmZtEqnF6 zv2Ue%U(fAxrLT$jwRqU={BIh0&qXSzGv(G~yEz^_*BUZeHwiYq@NOwB^9a z9O~6_iEn?7rC#y>UX^P!4>NKpi>pfZg5ecA5wYAR=I z86wOF`<8t%AMQ1(*V==t@XBG!xt^VqXyQ(t{79drF}q_Yzor@mfQU8%rEe-Xf*2mi7X-R=6b?;fMVhg%<6 zTP9T8`+G&^vwguj<;gpTDdxV62M_qW0da+E{6%J?7yG>-`s+3mcC~i=@{HTs^K~Q;zC4r(c5*O-&eL54f$((op5T1 zpvGwiezUxkyXBe$wJvySVhs2y+KMXNl%E!d&N}Y<4$3cX5Qd%I3wF zbJ64O0R|Ce=?J>^Ui;}o<>yPA3Wtr>_uy6qBTOo872y$J5QWe2j2Ow86)2hDt_#|D zG6mJ`L2vP71|q0|c)*3F>-{c6q6hA`2fg<7gS3uhvtQuQ_7P?z4n5}?aEE}78!-}b zXhqkBG9oR{fXKsmz)7R^?YQ6I2s0X|7nH7-#p&;B+pUA{y+5H*K2g*&$PRuvR^~D4 zwhJ@R*r9rKeS!3HeaG?Gyn6#{GG95d^vtyT4?mhdl{Mq_yVujGgx2>b-mg8{`u>^* zr|a)WrSCs!7rwcEvE+vImR$~Az0NIeN^sv`i<{)m*=Qa5U9~|Prm*6Obdhe;cbS%( zOOl*dyUe?$(ln|%Wg+pq^HSeM^sQ=35}lX(E}+w7tTtmc z(B)Mfla@-9EpB=&W1*Tcdi#y>s<3!2r|HCr>x%=_I}U!a*6{lL|DJ0Hcg#3dNjKHX zOq=th!+vU_$%vURmk68RbX6wBe7RKEyry)S?dHoR!z7x@WSY&FONY&EIw7NJepw=H zVbe{SeDljvVWLeJWCF}DONL1`-IWkeq4`URF!82hnM(7QQek3E*)mb)FD1jIn`&ex%wI}>{;4TZ zM%sLn#OL`<*JaYoH%Wb-*OVz^YraYHvqTd^ro()b^yj%vr(|@^?@N4M*i-q?EYg%FV`lzc;DsZ3qUq)3yB+RVJq0ra|Gzsqw&WfD>*#hT32W=QErzdAW- zcFzCLg_Zvwy0CJ^x2`Wc>G`Txjz^1fUFbuqS5l(qaJSO4R6UPJleiA_E>+KzXc6u% zdZlXr@n|uw2Yo`dKV|YKt_3|!)%5t}Jgz;xL)A28axT}3UaDGqd{UI_MjutJO_`j- z-A>O@jXyp~;%GtmDiS22ql6*=9dK3hIvJL8g)kSXR;P%xtM-8Avjz|7`i{;JSf zbZzB8%6>^v~!EZ?1Ga^13o%m+-M;9XdHogz+`tH88Q5A6%&t^kE9-<#47u`EO7k(&b6ce2EQNktI^Y?c344zDxo|! zxwD@fUSv2(Tukl!dF3sW*y}y9erLwFc`-j)p=&xFzv&I5sOSpn8oOSU6aN7jT|vDq z7^V0_oDB(Orm?@`v9}M${)jES%-Zo~$kQJwY6)+(=AOU&PbF$hPq=DJzA|{6mwI3{ zb>jVE=krNl0RP6fIA(@?FG>{D>lmap5Tf3nqM zdY*ih>hUc4j8t6hr=Q4S}e{zTbnzHu|T-xq7j`;W-cY z{AhqyBD)o~qHpiOKRLTFJ>jx@c{huRAHCa!^=-jnjsL)eH;g(4=?(mVNf1|!7A>`S z@_9JAXUMvMvk5>HCxph8#OX%Fv z?9LzjqSNeku#tT4|DPLn9wP-WX`a`Qka}{A6ntf@|LM=u(`>kzuW0F8_77GPri2?k z3H;%=$R`pnTd)2{rrS=l^&qR`TmI?IR;CW_mK6QN?ddVLHqNH})0*4DD^I7)CWJ@r z$JM7ZL&AghRCopI^z2LFF?0OqD%4(oZ2pr|0*CL)il=4* zMt>Wh$kQ81aQr?n!El=ipnQ*AF?&LJ>)^WC*(V!6&R#9_q zDX~jYtBtM81O50t0PV?8I>T;68@>Bgh7ygv5*^d-MHwDqj4rkF4kzIIc7}%nqYK?% z>Kx_KQj)?Rfr~;%c1FfAJ#!$GS2@|6FA6Bpj6NBLA>6NPc$T+=sSNj)o;l0ghSe-W zF{{)44IlARAyTSF^#W?>W;7kLg1t*G)*dD26}*;hhnb-3`F#8AGL%x;*TM2>MxO-3 z5U#T|%;XJXH5&nR*T1r!rwxf}t5<7KLm^Jc8g?-yb{zsmu4@TNWxK%!cC(6C|G=z*__Dm23HUoLvpw zuihECmTHTZ^hjXdrj;LEp$ zQJ#N*4_^yL=lv(@c_z?E6ZL9M>L@hw;~F*_Gr5FTHd~urLy6TzhF%{u*fn~wq3Hi? zA!6b@&lIbX26&qP#6w;j)DWjptwJ4zSMEnmwm>g70q6-W%D=P4U}K8y;Qz`rg$sR6 zc9)C!@X_7LXk)gSXP7KyNW(>k(&u?)G1d_C4=n8-6=6})ZF@qWYN6d{j`{ zl{EGc?2sWV{#<75? zwS&KhS$h_o_LgV)@b`h!zKojX3|+W6Qa6hykNqFDoqIggTf4w_Q+C_1vn#fgOBa`z z5OOKZbX77^*(hRM2IZb|XJ$(!5jB#LjIKj&6H~}wkV{HQlgqe`5}FJ~#$d+GoZqs~ zyU%;xv-f$=d(PP(|E%ZvJ!?JB?^)|v^D~z3FHQ=?aS2Ol%ZWnF>oi?>1QvkF_s$4JOd&0 z$dDA4dy8X46v={4DcIa5jxPw_S3{`mg94?5)MAbq2%|t8QLVMVGWEe^>L21CXu|=9 zblkBreGk43h{J{ur$ohoLc-kQAc!J(Y0*WB+uuO0ja8JxeB(A8Acn@-mQlR;7E;R9>gEFesWkzfls(?6DT5FS;Q=p8d4)ZPB zaM0smgVU5XKduc2<kle6(u_rF`&9Wu&hz)bPPCl~E=^1gFwL z8PN%xZlcH-bb5xR*K>kF@WJXrT^~FsBOHP`wOwcq;xKQ;r7>AxGFdkKm2F}GYZvV) zLwWMkKpYT(Rho)lDkD3BNQnvvtS9DtTg4ZcbdY(7!0OZ{&H$Yp%IGberIF~F9Eb`l z2l}h23lFx5w}3znwu+^x67ZBGwl2drb5Ou3{uT$bU8oOCG3r8SD2NMtks{V%(mnVr zDCn+#h32aGWch}by#Wqkgq+wT0EO*dP@r+@8oLt$AB8-FZ9tnsjVH&3e#8F5CLh!p z6W#W0FI*EWMYf9fH>kPg?&vw8^tOhmkh=kC5+Z)3v1h?3HL#ULRlu2y zhnc!ZFNY|M{deomc?eDcw$drMg(8C8nhfI30_9mLHy9%mpfNN5TX5LNCy(SK&!907w$pRu zkwT;r8gm)So10a9W)sgF@JziGDy13OfJ&n&<+h5E2^?kG5A7i$uRw;X5b4!R@C{_? z8@w7urtF4bWR$yg2v5OPpu7sVSjSii?kM1Qs%ud-0Y*t-BLIaHf#CjxR@)18k~=nZ zkB9`6TGfKOH^f0e<}^iwTw!m5QmCvGa*@3nG_*rf*ao112wBZYhFpXki+9;x1A#gl zJapmxSJ}lNXB9dj8^{$PyMgfjRQ3e0qroT_*o9zf3b%3#h_yOkY6@VK%j`m6Sg6hY zO03-llvOZFJlh{w`fuglCe~^KB^gG!#P)|Q%>s0#ChK^sE}TrtFqe;9N0tLANz~@{ z5^GI>WjRc)h4&HMeTbB5JbMes-D-ICDl!GIh$#>1#ytg9;BpnbT9r&W2$Xqs<6Z&* zPzvDH%gDh{8b3byQ9g1Xnguc6JV$<1h*T%10b<@k9j+Cz7UZJ(1}r#*y#b_g1A?nb ztd$1JBv|lOb~adI**e^swwuit6IP!s4?<5C9;L?vz-Y7)M zpjj7yBi+9e?P?aVQc5+M?FFqXN7ceQb5B7kh$Izmv5L_GCSh1U(t?}@Xn`#V?h14+ zSWR|Ehmwd$Ktm(t*X0lg0p2!3hkJxr3sA$==`gzno;4UoU20H?5di@NLwerAEtD8q zP-coOPR2*n^IX9kxXMR5p;;NwK!XnPdF}!L6pg$Jo4U-V0pB!j?l0)v!@#4%&>12U zzOI)*_USQHkn@ewV&0Z5-KpC9#db?T{YVQMbqa3@mNp=jwQt zz@w#nq#c@-4m{e&`+5lifX8y!)FpNd@ED`b9VFJ8g1e}IO(n2}V95!$a%+jT`ans6 zO(n9y9$^;nJKps~6kZDX9YYS3HncM=HxTWH2A$t6h5Ugb2jH@D$A=OOMD9T8E`?md zkOSKVR9yQEL`Q-0s1#C`v9x66?1x?$h(dreL<$LG00MDH&uVzAIvFs8OTXQK$I6qJ z7LeMbx`SSV4v^&zc&sd04Xk9f2X!r;f>NL?g~uwB)xb(t%d2bg5-f4*rs1(L^3oLM z-mTN}6eI!5BzWu^a_)Yx>eA)sv1n8lSas_MLG73O!KQD7R7 zw()i?JO)rQ6y{~oC;(MP?u&14MgR*TjLl zb*7$zYfw%Rto%At4}mR6uPr>*h|B_eC#$Hg!d;*Xl)CU(1epa^Hmjhn!b1=Ul!5SA zb21BXi&-Ug5$*yNpj3g!YLQu>!dQ>%B0L1Hka88xCVr}!2mNNN;aKYuKUL3*0c$%( ze%=jD&xCSb>l8orf+qw@q5M1!P0s~NOuSkhZzWK!l%L;&#shRE?!O1VDf6$uP*>S$ zP)>^$^I@pV>@-j&Y1-UjqSy?|`C=su706ZB80r$+4p`c0a~VW2 zAXqOxg`pDI?ZC2qE0;v=5e${cZU+U$`JMB6Vj)Tjw~T=S1%){}q-Y>I04m~u z6i%9f0R@FQK9p%7@&-z8DV!7o0}2XrY{?P;}Iq!ont|HSxLD3)7O?e7vKuLoys*>rT zpy+vZQ(gigPzvFT%gA`JC*tqcsd)+#fie-kxSEV#DyZLCa-Jh;3iE5xl8aEz#rxw? zO*}hL5q1jmMraAZkc-jrs1{y3P_`?~%b+FD-VYP+ji)#A^np@eVIF~&04TWla6G-4 zM*&KT!u$rb1bRGZ@L+A_RuIJy%)9XwONR?RzNmoo=D_f2Y!)aJ7J@5B6oY50#RQn- z3L6E=1f|2ZBZ|SMy_gP@q_9!I5{2OE6U8z>nGBO$Wz&Hr-O)5IR1lhMa(h`*!Cuxf zmv(AjCEKgz_gBzLhfnm!a7e>sPRGgQTz@i}w6n0}+~KjH9D85z_du^&9L55Zxu3Bd zqu0Tk)5?6=b>!BkXJ<#2C2UC7E;Ms44<1IezOt9KEaw=Xde$vBi(d+4I|C;lMv!*V_`wa z8m~~5pIQT6V68k1{kLZ+5!=KzKJ!0bJh8@8`wF(%)v!=6YiDL#s*O*b2DP7%70?>+ z3~S|VIKD0GH6RabWpC)O zot1U74SCpSU9nWhG6UJoS<~rlU#)#6)v4zQN@lIwvay=BhAx^}tJB+}t$oVXsZInX zoz`tPv1Dt*Z1pSyLL1!L2d7RoCnzbmZo7unv@-15oOSF*+wDU>R_atWg3>DUy(tOn zJDKJ? znag)FUz;)0&6qA`%q?cjaZ~6!R%VPTbDt?w#+1o0VP=~!y-b)06XuLDlV;3JFlO2q zGuIk3`*tuN>|pxuU>faU3XPaAW;S0*-lP|Qh+m237ohof(EL<1|5r3W6wSw?`HpD* zAvAv%n!gRrS4H!GLi1s0KF@|fYQyib;lHxsSKIJQZ1{I=_yimNMH_y&4ga(a-`R$b zw&5df_}gQCdv_kevX)R&MX;U5?&TMgV)M8a8wzy-D!nb>yqvZMAc&1fYg7y==(R7Vd=9d zE5z^OKehjl@&CO~%u~ZBkhdkNadbW8+vae%cAFb`UC0{)=bc{XQXJp*C_l(BGHE$I zlJc7>&9S7__)o6=HRj%)=dM9*9b>OFX(~Z@vY;hn zus+l(7dK|MfNyPqRAdG$i4K?@El+ z@%zQe*O99uet5V)Msbtt=1G}DcRFY7tndQY?VoVJrkv3v^P-$4m%k)lC%*S}TUd~! zBwf*to6N`+wiAhv3bPO;Nzq15wg90}#M zbh58r)^FE%{s?qvv~M~($bxmRe`V^B)W8>9gsu$zcIra(QO3bs*)jy$spgA#z1~9o zu6K$G;D{5}NCm$(wA1+~NoLUA%f5b(n;+>^vyGz~1hNfdB}ZRIbo+M?OkX+`QM0CS zaJH9Wx6L6hAT{^ItFAZGYi*Q-!MJM6fsyReSFW{|mV;keJ;M|1lF<~0Nxu?~)_a_J zT16hM(#Y|7GOdi(g61$TiF(*GD^V*V_c?}Yo`2kKhe(QS!5)~c?C}#ZD zHvP$XQ!)|PM^lgp2f6^a>cX?K1&oC)2pH7mEjty)2HyIVg?cwwnAdO zPM;KeNtDut#OpeJv%iV6K+M(Y8~M6)bwmdeOLY1=$Ct!T1SHnz^fhso#HMYK*rr1p zSLj)^{Onwu=X{Cj0PSDnIwC%)gt?el^1J~V5~we@|7;=O4tmB!yxvkfRc@9ZkzYW_nVCc1E@jr6>&mFAkOa5ye{Qup7`8_tx*XiZt zse$K-<|@3C0eQ3Rh{i3Q);nCo-hZ>jDA&Y>OF0abeAhjNQ*5+8uQhHR2kI?}{+PCL z{khb(f{8aTi+bHsphnaGL!4E~b;N3mqX|8Z2{C({1jKa2|bag4LSSEjZX=C}|~D$o%&nIh^(=l9(A zYpHV8pRvsl-DjN+nADZTzmeRgzf103yyR9rs?YmmjK8NyS&*rTe1rMY3_t zJ^h!M)YC`jC<`KgoTtcNEUEVwlh+2FFo@ab=|Ayfl5}TGMy=E|I*fiU{36CSv!;44 zV=5Q3$)&WQ?`oynoasi=A-AR%YUnd}4A+zxN40N^vNU{lZnWra61(6{>ua6<*Gc02 zWOY>I)1$+C2f}f8`m6-)PN7Glzqn@aHWAH^Do}sS>*XEH2{3f{5+}Y{T{FzPFw9CGV`S#jx$cb?*qNs=Wsu&^GqFBe2e7_j?*waDM z&?apjF=}DDo3gPpA?co#j%`t}(nQHR6tUA-TSC^nd|hjQliob@ zNILR;3AJ=Kde<4-?wtj51%7wT7viS83#~LMUK@Q$1I@Nm;bA_Xhf3B?XJ3^@&6PQb z(gQybInjls_hq23jn>PwVtz?0yh2fxs8v1rDjjn5^IT2zkty+`ecr=!_h_o2IadGY|G8M;Qx3|c1O`uGlJkycfgWJUAF!)~Vwv`DqUCPukSl;+EdU{_^+p?1x% zB1>sWK+luZ)N6!ljw>2$vY8>Vp$>Ei>f zj8k$XjnM;ELkoll9odu1F_e#i=Pk#FSaKVh9^b*BQ=2swgaM?{;HRrb?LI9YW8R;C zZnW@pPpFtLz0YK#sx~!;s$V9W-HYq*dXSf*))}_?Caa@V32DFK(c+bk2Z!fZvtPO9 zcH62>anD$bHM1KscP-owmsLrR)2KS$eFSOyxh2`I$;3q=@kmeLtDDkP^JZD*nU~i+ zzeTRaecq+)g^tNo!yIg;n0tRQaryCp zrS_Y|;H#f!NRL%5VU*wm0>!So8{v`oW<7QGNltS>P5q!(IjM|6d=jTQs?~1ybm6)l zDlDKnh~IWSm*7yPS3Ewgu*zxDFzv{$P1>)?~X=5wB0W z+F?e!J=m!A<3pLzXwRB!W$6)d4_T5&66BCWYM-Ax^25iMc6V)BjL@GxbUIPKqCy0f zO0=nto&Jxc8F`cy688prVNCd2qO?RuE+FXS^Qe(~%SkTsc)$0e!mr|}!UB_tb+&ON z$+%i;@|8_If_Fp886)4+9AwaO-47gbF z9laFayY3nO`(>mE-=5i+vWfnct zx7c}d0wq)*bIrHQ?S0UtRJ()Zadh}Dy#3eH&rtFI(ocQx&&z16X38EUTorhF-AZ0pP9{KuA|DX2^T;!l(0tM;ukro`17P9Y~7G~>377OqTWt}RI$tN}(SEvd+ zq+k|t|9H5CPDM+HpQOt&Rcy{OkYG^7qT0v@>*vhlS}3D| literal 0 HcmV?d00001 diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test1.py b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test1.py new file mode 100644 index 00000000000000..9fff6d362cde49 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test1.py @@ -0,0 +1,192 @@ +import pyarrow as pa +import pyarrow.parquet as pq +import subprocess +import argparse +import json + +# Define the output file path as a constant +OUTPUT_PARQUET_FILE = 'nested_cross_page_test1.parquet' + +def generate_cross_page_test_data(output_file): + # Create test data + data = { + # id column (INT32) + 'id': [1, 2, 3], + + # array column (ARRAY) + 'array_col': [ + # Row 1 - Large array to force cross-page + [1, 2, 3, 4, 5] * 200, # 1000 elements + + # Row 2 - Normal sized array + [1, 2, 3], + + # Row 3 - Another large array + [6, 7, 8, 9, 10] * 200 # 1000 elements + ], + + # description column (STRING) + 'description': [ + 'This is a large array with repeated sequence [1,2,3,4,5]', + 'This is a small array with just three elements', + 'This is another large array with repeated sequence [6,7,8,9,10]' + ] + } + + # Create table structure + table = pa.Table.from_pydict({ + 'id': pa.array(data['id'], type=pa.int32()), + 'array_col': pa.array(data['array_col'], type=pa.list_(pa.int32())), + 'description': pa.array(data['description'], type=pa.string()) + }) + + # Write to parquet file + pq.write_table( + table, + output_file, + compression=None, # No compression for predictable size + version='2.6', + write_statistics=True, + row_group_size=3, # All data in one row group + data_page_size=100, # Very small page size + write_batch_size=10 # Small batch size + ) + +def inspect_parquet_file(file_path): + """Inspect the structure of generated parquet file""" + pf = pq.ParquetFile(file_path) + print(f"\nFile: {file_path}") + print(f"Number of row groups: {pf.num_row_groups}") + + metadata = pf.metadata + schema = pf.schema + print(f"\nSchema: {schema}") + print(f"\nDetailed schema:") + for i in range(len(schema)): + print(f"Column {i}: {schema[i]}") + + for i in range(metadata.num_row_groups): + rg = metadata.row_group(i) + print(f"\nRow Group {i}:") + print(f"Num rows: {rg.num_rows}") + + for j in range(rg.num_columns): + col = rg.column(j) + print(f"\nColumn {j}:") + print(f"Path: {schema[j].name}") + print(f"Type: {col.physical_type}") + print(f"Encodings: {col.encodings}") + print(f"Total compressed size: {col.total_compressed_size}") + print(f"Total uncompressed size: {col.total_uncompressed_size}") + print(f"Number of values: {col.num_values}") + print(f"Data page offset: {col.data_page_offset}") + if col.dictionary_page_offset is not None: + print(f"Dictionary page offset: {col.dictionary_page_offset}") + +def read_and_print_file(file_path): + """Read and print file content""" + table = pq.read_table(file_path) + df = table.to_pandas() + print("\nFile content:") + for i in range(len(df)): + print(f"\nRow {i}:") + print(f"ID: {df.iloc[i]['id']}") + arr = df.iloc[i]['array_col'] + print(f"Array length: {len(arr)}") + print(f"First few elements: {arr[:5]}...") + print(f"Last few elements: ...{arr[-5:]}") + print(f"Description: {df.iloc[i]['description']}") + +def inspect_pages_with_cli(file_path, parquet_cli_path=None): + """ + Inspect page information using parquet-cli + + Args: + file_path: Path to the parquet file + parquet_cli_path: Optional path to parquet-cli jar file + """ + if not parquet_cli_path: + print("\nSkipping parquet-cli inspection: No parquet-cli path provided") + return + + print("\nParquet CLI Output:") + try: + cmd = f"java -jar {parquet_cli_path} pages {file_path}" + result = subprocess.run(cmd, shell=True, check=True, capture_output=True, text=True) + print(result.stdout) + except subprocess.CalledProcessError as e: + print(f"Error running parquet-cli: {e}") + if e.output: + print(f"Error output: {e.output}") + except Exception as e: + print(f"Unexpected error running parquet-cli: {e}") + +def save_test_data_info(output_file): + """Save detailed test data information to text file""" + info = { + "file_format": "Parquet", + "version": "2.6", + "compression": "None", + "row_group_size": 3, + "data_page_size": 100, + "write_batch_size": 10, + "output_file": output_file, + "schema": { + "id": "INT32", + "array_col": "ARRAY", + "description": "STRING" + }, + "test_cases": [ + { + "row": 1, + "description": "Large array", + "characteristics": [ + "1000 elements", + "Repeated sequence [1,2,3,4,5]", + "Forces cross-page scenario" + ] + }, + { + "row": 2, + "description": "Small array", + "characteristics": [ + "3 elements", + "Simple sequence [1,2,3]", + "Fits in single page" + ] + }, + { + "row": 3, + "description": "Another large array", + "characteristics": [ + "1000 elements", + "Repeated sequence [6,7,8,9,10]", + "Forces cross-page scenario" + ] + } + ] + } + + info_file = output_file.replace('.parquet', '_info.json') + with open(info_file, 'w') as f: + json.dump(info, f, indent=2) + +if __name__ == '__main__': + # Add command line argument parsing + parser = argparse.ArgumentParser(description='Generate and inspect parquet test data') + parser.add_argument('--parquet-cli', + help='Path to parquet-cli jar file', + default=None) + parser.add_argument('--output', + help='Output parquet file path', + default=OUTPUT_PARQUET_FILE) + args = parser.parse_args() + + # Use the output file path from command line or default + output_file = args.output + + generate_cross_page_test_data(output_file) + inspect_parquet_file(output_file) + read_and_print_file(output_file) + inspect_pages_with_cli(output_file, args.parquet_cli) + save_test_data_info(output_file) diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test2.py b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test2.py new file mode 100644 index 00000000000000..2e67e96213190e --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test2.py @@ -0,0 +1,287 @@ +import pyarrow as pa +import pyarrow.parquet as pq +import subprocess +import json +import argparse + +# Define the output file path as a constant +OUTPUT_PARQUET_FILE = 'nested_cross_page_test2.parquet' + +def generate_cross_page_test_data(output_file): + # Create test data + data = { + # id column (INT32) + 'id': [1, 2, 3], + + # Multi-level array column (ARRAY>) + 'nested_array_col': [ + # Row 1 - Large array + [[i for i in range(10)] for _ in range(100)], # 100 sub-arrays, each with 10 elements + + # Row 2 - Small array + [[1, 2], [3, 4], [5, 6]], + + # Row 3 - Another large array + [[i for i in range(10, 20)] for _ in range(100)] + ], + + # Struct array column (ARRAY>) + 'array_struct_col': [ + # Row 1 + [{'x': i, 'y': f'value_{i}'} for i in range(500)], + + # Row 2 + [{'x': 1, 'y': 'small'}, {'x': 2, 'y': 'array'}], + + # Row 3 + [{'x': i, 'y': f'big_{i}'} for i in range(500)] + ], + + # Map column (MAP>) + 'map_array_col': [ + # Row 1 + {f'key_{i}': list(range(i, i+10)) for i in range(50)}, + + # Row 2 + {'small_key': [1, 2, 3]}, + + # Row 3 + {f'big_key_{i}': list(range(i*10, (i+1)*10)) for i in range(50)} + ], + + # Complex nested structure (STRUCT< + # a: ARRAY, + # b: MAP>, + # c: STRUCT, y: STRING> + # >) + 'complex_struct_col': [ + # Row 1 + { + 'a': list(range(100)), + 'b': {f'key_{i}': list(range(i, i+5)) for i in range(20)}, + 'c': {'x': list(range(50)), 'y': 'nested_struct_1'} + }, + + # Row 2 + { + 'a': [1, 2, 3], + 'b': {'small': [1, 2]}, + 'c': {'x': [1], 'y': 'small_struct'} + }, + + # Row 3 + { + 'a': list(range(100, 200)), + 'b': {f'big_{i}': list(range(i*5, (i+1)*5)) for i in range(20)}, + 'c': {'x': list(range(50)), 'y': 'nested_struct_2'} + } + ], + + # Description column (STRING) + 'description': [ + 'Row with large nested arrays and structures', + 'Row with small nested data', + 'Row with another set of large nested arrays and structures' + ] + } + + # Create complex table structure + table = pa.Table.from_pydict({ + 'id': pa.array(data['id'], type=pa.int32()), + + # Multi-level array type + 'nested_array_col': pa.array(data['nested_array_col'], + type=pa.list_(pa.list_(pa.int32()))), + + # Struct array type + 'array_struct_col': pa.array(data['array_struct_col'], + type=pa.list_(pa.struct([ + ('x', pa.int32()), + ('y', pa.string()) + ]))), + + # Map type + 'map_array_col': pa.array(data['map_array_col'], + type=pa.map_(pa.string(), pa.list_(pa.int32()))), + + # Complex nested structure type + 'complex_struct_col': pa.array(data['complex_struct_col'], + type=pa.struct([ + ('a', pa.list_(pa.int32())), + ('b', pa.map_(pa.string(), pa.list_(pa.int32()))), + ('c', pa.struct([ + ('x', pa.list_(pa.int32())), + ('y', pa.string()) + ])) + ])), + + 'description': pa.array(data['description'], type=pa.string()) + }) + + # Write to parquet file + pq.write_table( + table, + output_file, + compression=None, # No compression + version='2.6', + write_statistics=True, + row_group_size=3, # All data in one row group + data_page_size=100, # Very small page size + write_batch_size=1 # Minimum batch size + ) + +def inspect_parquet_file(file_path): + """Inspect the structure of generated parquet file""" + pf = pq.ParquetFile(file_path) + print(f"\nFile: {file_path}") + print(f"Number of row groups: {pf.num_row_groups}") + + metadata = pf.metadata + schema = pf.schema + print(f"\nSchema: {schema}") + print(f"\nDetailed schema:") + for i in range(len(schema)): + print(f"Column {i}: {schema[i]}") + + for i in range(metadata.num_row_groups): + rg = metadata.row_group(i) + print(f"\nRow Group {i}:") + print(f"Num rows: {rg.num_rows}") + + for j in range(rg.num_columns): + col = rg.column(j) + print(f"\nColumn {j}:") + print(f"Path: {schema[j].name}") + print(f"Type: {col.physical_type}") + print(f"Encodings: {col.encodings}") + print(f"Total compressed size: {col.total_compressed_size}") + print(f"Total uncompressed size: {col.total_uncompressed_size}") + print(f"Number of values: {col.num_values}") + print(f"Data page offset: {col.data_page_offset}") + if col.dictionary_page_offset is not None: + print(f"Dictionary page offset: {col.dictionary_page_offset}") + +def format_value(value): + """Format value for printing""" + if isinstance(value, (list, dict)): + return f"{str(value)[:100]}... (length: {len(str(value))})" + return str(value) + +def read_and_print_file(file_path): + """Read and print file content""" + table = pq.read_table(file_path) + df = table.to_pandas() + print("\nFile content:") + + for i in range(len(df)): + print(f"\nRow {i}:") + for column in df.columns: + value = df.iloc[i][column] + print(f"{column}: {format_value(value)}") + +def inspect_pages_with_cli(file_path, parquet_cli_path=None): + """ + Inspect page information using parquet-cli + + Args: + file_path: Path to the parquet file + parquet_cli_path: Optional path to parquet-cli jar file + """ + if not parquet_cli_path: + print("\nSkipping parquet-cli inspection: No parquet-cli path provided") + return + + print("\nParquet CLI Output:") + try: + cmd = f"java -jar {parquet_cli_path} pages {file_path}" + result = subprocess.run(cmd, shell=True, check=True, capture_output=True, text=True) + print(result.stdout) + except subprocess.CalledProcessError as e: + print(f"Error running parquet-cli: {e}") + if e.output: + print(f"Error output: {e.output}") + except Exception as e: + print(f"Unexpected error running parquet-cli: {e}") + +def save_test_data_info(output_file): + """Save detailed test data information to text file""" + info = { + "file_format": "Parquet", + "version": "2.6", + "compression": "None", + "row_group_size": 3, + "data_page_size": 100, + "write_batch_size": 1, + "output_file": output_file, + "schema": { + "id": "INT32", + "nested_array_col": "ARRAY>", + "array_struct_col": "ARRAY>", + "map_array_col": "MAP>", + "complex_struct_col": """STRUCT< + a: ARRAY, + b: MAP>, + c: STRUCT< + x: ARRAY, + y: STRING + > + >""", + "description": "STRING" + }, + "test_cases": [ + { + "row": 1, + "description": "Large nested data", + "characteristics": [ + "Large nested arrays (100 arrays of 10 elements each)", + "Large struct array (500 elements)", + "Large map (50 key-value pairs)", + "Complex nested structure with large arrays" + ] + }, + { + "row": 2, + "description": "Small nested data", + "characteristics": [ + "Small nested arrays (3 arrays of 2 elements each)", + "Small struct array (2 elements)", + "Small map (1 key-value pair)", + "Complex nested structure with small arrays" + ] + }, + { + "row": 3, + "description": "Another large nested data", + "characteristics": [ + "Large nested arrays (100 arrays of 10 elements each)", + "Large struct array (500 elements)", + "Large map (50 key-value pairs)", + "Complex nested structure with large arrays" + ] + } + ] + } + + info_file = output_file.replace('.parquet', '_info.json') + with open(info_file, 'w') as f: + json.dump(info, f, indent=2) + +if __name__ == '__main__': + # Add command line argument parsing + parser = argparse.ArgumentParser(description='Generate and inspect parquet test data') + parser.add_argument('--parquet-cli', + help='Path to parquet-cli jar file', + default=None) + parser.add_argument('--output', + help='Output parquet file path', + default=OUTPUT_PARQUET_FILE) + args = parser.parse_args() + + # Use the output file path from command line or default + output_file = args.output + + generate_cross_page_test_data(output_file) + inspect_parquet_file(output_file) + read_and_print_file(output_file) + inspect_pages_with_cli(output_file, args.parquet_cli) + save_test_data_info(output_file) diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test3.py b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test3.py new file mode 100644 index 00000000000000..75ef7c7e755d2b --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/data_gen_scripts/nested_cross_page_test3.py @@ -0,0 +1,196 @@ +import pyarrow as pa +import pyarrow.parquet as pq +import subprocess +import argparse +import json + +# Define the output file path as a constant +OUTPUT_PARQUET_FILE = 'nested_cross_page_test3.parquet' + +def generate_cross_page_test_data(output_file): + # Create test data + data = { + # id column (INT32) + 'id': [1, None, 3], + + # array column (ARRAY) + 'array_col': [ + # Row 1 - Large array to force cross-page + [1, None, 3, 4, 5] * 200, # 1000 elements + + # Row 2 - Null array + None, + + # Row 3 - Another large array with nulls + [6, None, 8, None, 10] * 200 # 1000 elements + ], + + # description column (STRING) + 'description': [ + 'This is a large array with repeated sequence [1,null,3,4,5]', + None, + 'This is another large array with repeated sequence [6,null,8,null,10]' + ] + } + + # Create table structure + table = pa.Table.from_pydict({ + 'id': pa.array(data['id'], type=pa.int32()), + 'array_col': pa.array(data['array_col'], type=pa.list_(pa.int32())), + 'description': pa.array(data['description'], type=pa.string()) + }) + + # Write to parquet file + pq.write_table( + table, + output_file, + compression=None, # No compression for predictable size + version='2.6', + write_statistics=True, + row_group_size=3, # All data in one row group + data_page_size=100, # Very small page size + write_batch_size=10 # Small batch size + ) + +def inspect_parquet_file(file_path): + """Inspect the structure of generated parquet file""" + pf = pq.ParquetFile(file_path) + print(f"\nFile: {file_path}") + print(f"Number of row groups: {pf.num_row_groups}") + + metadata = pf.metadata + schema = pf.schema + print(f"\nSchema: {schema}") + print(f"\nDetailed schema:") + for i in range(len(schema)): + print(f"Column {i}: {schema[i]}") + + for i in range(metadata.num_row_groups): + rg = metadata.row_group(i) + print(f"\nRow Group {i}:") + print(f"Num rows: {rg.num_rows}") + + for j in range(rg.num_columns): + col = rg.column(j) + print(f"\nColumn {j}:") + print(f"Path: {schema[j].name}") + print(f"Type: {col.physical_type}") + print(f"Encodings: {col.encodings}") + print(f"Total compressed size: {col.total_compressed_size}") + print(f"Total uncompressed size: {col.total_uncompressed_size}") + print(f"Number of values: {col.num_values}") + print(f"Data page offset: {col.data_page_offset}") + if col.dictionary_page_offset is not None: + print(f"Dictionary page offset: {col.dictionary_page_offset}") + +def read_and_print_file(file_path): + """Read and print file content""" + table = pq.read_table(file_path) + df = table.to_pandas() + print("\nFile content:") + for i in range(len(df)): + print(f"\nRow {i}:") + print(f"ID: {df.iloc[i]['id']}") + arr = df.iloc[i]['array_col'] + if arr is not None: + print(f"Array length: {len(arr)}") + print(f"First few elements: {arr[:5]}...") + print(f"Last few elements: ...{arr[-5:]}") + else: + print("Array: None") + print(f"Description: {df.iloc[i]['description']}") + +def inspect_pages_with_cli(file_path, parquet_cli_path=None): + """ + Inspect page information using parquet-cli + + Args: + file_path: Path to the parquet file + parquet_cli_path: Optional path to parquet-cli jar file + """ + if not parquet_cli_path: + print("\nSkipping parquet-cli inspection: No parquet-cli path provided") + return + + print("\nParquet CLI Output:") + try: + cmd = f"java -jar {parquet_cli_path} pages {file_path}" + result = subprocess.run(cmd, shell=True, check=True, capture_output=True, text=True) + print(result.stdout) + except subprocess.CalledProcessError as e: + print(f"Error running parquet-cli: {e}") + if e.output: + print(f"Error output: {e.output}") + except Exception as e: + print(f"Unexpected error running parquet-cli: {e}") + +def save_test_data_info(output_file): + """Save detailed test data information to text file""" + info = { + "file_format": "Parquet", + "version": "2.6", + "compression": "None", + "row_group_size": 3, + "data_page_size": 100, + "write_batch_size": 10, + "output_file": output_file, + "schema": { + "id": "INT32", + "array_col": "ARRAY", + "description": "STRING" + }, + "test_cases": [ + { + "row": 1, + "description": "Large array with nulls", + "characteristics": [ + "1000 elements", + "Repeated sequence [1,null,3,4,5]", + "Forces cross-page scenario" + ] + }, + { + "row": 2, + "description": "Null array and values", + "characteristics": [ + "Entire array is null", + "ID is null", + "Description is null" + ] + }, + { + "row": 3, + "description": "Another large array with nulls", + "characteristics": [ + "1000 elements", + "Repeated sequence [6,null,8,null,10]", + "Forces cross-page scenario" + ] + } + ] + } + + info_file = output_file.replace('.parquet', '_info.json') + with open(info_file, 'w') as f: + json.dump(info, f, indent=2) + +if __name__ == '__main__': + # Add command line argument parsing + parser = argparse.ArgumentParser(description='Generate and inspect parquet test data') + parser.add_argument('--parquet-cli', + help='Path to parquet-cli jar file', + default=None) + parser.add_argument('--output', + help='Output parquet file path', + default=OUTPUT_PARQUET_FILE) + args = parser.parse_args() + + # Use the output file path from command line or default + output_file = args.output + + generate_cross_page_test_data(output_file) + inspect_parquet_file(output_file) + read_and_print_file(output_file) + inspect_pages_with_cli(output_file, args.parquet_cli) + save_test_data_info(output_file) + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/run.sh new file mode 100755 index 00000000000000..f3136eaa20094a --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/run.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -x + +CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +## mkdir and put data to hdfs +cd "${CUR_DIR}" && rm -rf data/ && tar xzf data.tar.gz +hadoop fs -mkdir -p /user/doris/suites/multi_catalog/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/ + +# create table +hive -f "${CUR_DIR}/create_table.hql" diff --git a/regression-test/data/external_table_p0/hive/test_parquet_nested_types.out b/regression-test/data/external_table_p0/hive/test_parquet_nested_types.out new file mode 100644 index 00000000000000..73049b7866ff53 --- /dev/null +++ b/regression-test/data/external_table_p0/hive/test_parquet_nested_types.out @@ -0,0 +1,985 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !nested_cross_page1_parquet_q1 -- +[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] + +-- !nested_cross_page1_parquet_q2 -- +[1, 2, 3] + +-- !nested_cross_page1_parquet_q3 -- +[6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10] + +-- !nested_cross_page1_parquet_q4 -- +1 1000 +2 3 +3 1000 + +-- !nested_cross_page1_parquet_q5 -- +1 1 3 +2 1 3 +3 6 8 + +-- !nested_cross_page1_parquet_q6 -- +1 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] +3 [6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10] + +-- !nested_cross_page1_parquet_q7 -- +1 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] +2 [1, 2, 3] + +-- !nested_cross_page1_parquet_q8 -- +2 [1, 2, 3] This is a small array with just three elements + +-- !nested_cross_page1_parquet_q9 -- +1 1 5 +2 1 3 +3 6 10 + +-- !nested_cross_page1_parquet_q10 -- +1 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] +3 [6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10] + +-- !nested_cross_page2_parquet_q1 -- +1 [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]] 100 + +-- !nested_cross_page2_parquet_q2 -- +2 [[1, 2], [3, 4], [5, 6]] 3 + +-- !nested_cross_page2_parquet_q3 -- +3 [[10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]] 100 + +-- !nested_cross_page2_parquet_q4 -- +1 [{"x":0, "y":"value_0"}, {"x":1, "y":"value_1"}, {"x":2, "y":"value_2"}, {"x":3, "y":"value_3"}, {"x":4, "y":"value_4"}, {"x":5, "y":"value_5"}, {"x":6, "y":"value_6"}, {"x":7, "y":"value_7"}, {"x":8, "y":"value_8"}, {"x":9, "y":"value_9"}, {"x":10, "y":"value_10"}, {"x":11, "y":"value_11"}, {"x":12, "y":"value_12"}, {"x":13, "y":"value_13"}, {"x":14, "y":"value_14"}, {"x":15, "y":"value_15"}, {"x":16, "y":"value_16"}, {"x":17, "y":"value_17"}, {"x":18, "y":"value_18"}, {"x":19, "y":"value_19"}, {"x":20, "y":"value_20"}, {"x":21, "y":"value_21"}, {"x":22, "y":"value_22"}, {"x":23, "y":"value_23"}, {"x":24, "y":"value_24"}, {"x":25, "y":"value_25"}, {"x":26, "y":"value_26"}, {"x":27, "y":"value_27"}, {"x":28, "y":"value_28"}, {"x":29, "y":"value_29"}, {"x":30, "y":"value_30"}, {"x":31, "y":"value_31"}, {"x":32, "y":"value_32"}, {"x":33, "y":"value_33"}, {"x":34, "y":"value_34"}, {"x":35, "y":"value_35"}, {"x":36, "y":"value_36"}, {"x":37, "y":"value_37"}, {"x":38, "y":"value_38"}, {"x":39, "y":"value_39"}, {"x":40, "y":"value_40"}, {"x":41, "y":"value_41"}, {"x":42, "y":"value_42"}, {"x":43, "y":"value_43"}, {"x":44, "y":"value_44"}, {"x":45, "y":"value_45"}, {"x":46, "y":"value_46"}, {"x":47, "y":"value_47"}, {"x":48, "y":"value_48"}, {"x":49, "y":"value_49"}, {"x":50, "y":"value_50"}, {"x":51, "y":"value_51"}, {"x":52, "y":"value_52"}, {"x":53, "y":"value_53"}, {"x":54, "y":"value_54"}, {"x":55, "y":"value_55"}, {"x":56, "y":"value_56"}, {"x":57, "y":"value_57"}, {"x":58, "y":"value_58"}, {"x":59, "y":"value_59"}, {"x":60, "y":"value_60"}, {"x":61, "y":"value_61"}, {"x":62, "y":"value_62"}, {"x":63, "y":"value_63"}, {"x":64, "y":"value_64"}, {"x":65, "y":"value_65"}, {"x":66, "y":"value_66"}, {"x":67, "y":"value_67"}, {"x":68, "y":"value_68"}, {"x":69, "y":"value_69"}, {"x":70, "y":"value_70"}, {"x":71, "y":"value_71"}, {"x":72, "y":"value_72"}, {"x":73, "y":"value_73"}, {"x":74, "y":"value_74"}, {"x":75, "y":"value_75"}, {"x":76, "y":"value_76"}, {"x":77, "y":"value_77"}, {"x":78, "y":"value_78"}, {"x":79, "y":"value_79"}, {"x":80, "y":"value_80"}, {"x":81, "y":"value_81"}, {"x":82, "y":"value_82"}, {"x":83, "y":"value_83"}, {"x":84, "y":"value_84"}, {"x":85, "y":"value_85"}, {"x":86, "y":"value_86"}, {"x":87, "y":"value_87"}, {"x":88, "y":"value_88"}, {"x":89, "y":"value_89"}, {"x":90, "y":"value_90"}, {"x":91, "y":"value_91"}, {"x":92, "y":"value_92"}, {"x":93, "y":"value_93"}, {"x":94, "y":"value_94"}, {"x":95, "y":"value_95"}, {"x":96, "y":"value_96"}, {"x":97, "y":"value_97"}, {"x":98, "y":"value_98"}, {"x":99, "y":"value_99"}, {"x":100, "y":"value_100"}, {"x":101, "y":"value_101"}, {"x":102, "y":"value_102"}, {"x":103, "y":"value_103"}, {"x":104, "y":"value_104"}, {"x":105, "y":"value_105"}, {"x":106, "y":"value_106"}, {"x":107, "y":"value_107"}, {"x":108, "y":"value_108"}, {"x":109, "y":"value_109"}, {"x":110, "y":"value_110"}, {"x":111, "y":"value_111"}, {"x":112, "y":"value_112"}, {"x":113, "y":"value_113"}, {"x":114, "y":"value_114"}, {"x":115, "y":"value_115"}, {"x":116, "y":"value_116"}, {"x":117, "y":"value_117"}, {"x":118, "y":"value_118"}, {"x":119, "y":"value_119"}, {"x":120, "y":"value_120"}, {"x":121, "y":"value_121"}, {"x":122, "y":"value_122"}, {"x":123, "y":"value_123"}, {"x":124, "y":"value_124"}, {"x":125, "y":"value_125"}, {"x":126, "y":"value_126"}, {"x":127, "y":"value_127"}, {"x":128, "y":"value_128"}, {"x":129, "y":"value_129"}, {"x":130, "y":"value_130"}, {"x":131, "y":"value_131"}, {"x":132, "y":"value_132"}, {"x":133, "y":"value_133"}, {"x":134, "y":"value_134"}, {"x":135, "y":"value_135"}, {"x":136, "y":"value_136"}, {"x":137, "y":"value_137"}, {"x":138, "y":"value_138"}, {"x":139, "y":"value_139"}, {"x":140, "y":"value_140"}, {"x":141, "y":"value_141"}, {"x":142, "y":"value_142"}, {"x":143, "y":"value_143"}, {"x":144, "y":"value_144"}, {"x":145, "y":"value_145"}, {"x":146, "y":"value_146"}, {"x":147, "y":"value_147"}, {"x":148, "y":"value_148"}, {"x":149, "y":"value_149"}, {"x":150, "y":"value_150"}, {"x":151, "y":"value_151"}, {"x":152, "y":"value_152"}, {"x":153, "y":"value_153"}, {"x":154, "y":"value_154"}, {"x":155, "y":"value_155"}, {"x":156, "y":"value_156"}, {"x":157, "y":"value_157"}, {"x":158, "y":"value_158"}, {"x":159, "y":"value_159"}, {"x":160, "y":"value_160"}, {"x":161, "y":"value_161"}, {"x":162, "y":"value_162"}, {"x":163, "y":"value_163"}, {"x":164, "y":"value_164"}, {"x":165, "y":"value_165"}, {"x":166, "y":"value_166"}, {"x":167, "y":"value_167"}, {"x":168, "y":"value_168"}, {"x":169, "y":"value_169"}, {"x":170, "y":"value_170"}, {"x":171, "y":"value_171"}, {"x":172, "y":"value_172"}, {"x":173, "y":"value_173"}, {"x":174, "y":"value_174"}, {"x":175, "y":"value_175"}, {"x":176, "y":"value_176"}, {"x":177, "y":"value_177"}, {"x":178, "y":"value_178"}, {"x":179, "y":"value_179"}, {"x":180, "y":"value_180"}, {"x":181, "y":"value_181"}, {"x":182, "y":"value_182"}, {"x":183, "y":"value_183"}, {"x":184, "y":"value_184"}, {"x":185, "y":"value_185"}, {"x":186, "y":"value_186"}, {"x":187, "y":"value_187"}, {"x":188, "y":"value_188"}, {"x":189, "y":"value_189"}, {"x":190, "y":"value_190"}, {"x":191, "y":"value_191"}, {"x":192, "y":"value_192"}, {"x":193, "y":"value_193"}, {"x":194, "y":"value_194"}, {"x":195, "y":"value_195"}, {"x":196, "y":"value_196"}, {"x":197, "y":"value_197"}, {"x":198, "y":"value_198"}, {"x":199, "y":"value_199"}, {"x":200, "y":"value_200"}, {"x":201, "y":"value_201"}, {"x":202, "y":"value_202"}, {"x":203, "y":"value_203"}, {"x":204, "y":"value_204"}, {"x":205, "y":"value_205"}, {"x":206, "y":"value_206"}, {"x":207, "y":"value_207"}, {"x":208, "y":"value_208"}, {"x":209, "y":"value_209"}, {"x":210, "y":"value_210"}, {"x":211, "y":"value_211"}, {"x":212, "y":"value_212"}, {"x":213, "y":"value_213"}, {"x":214, "y":"value_214"}, {"x":215, "y":"value_215"}, {"x":216, "y":"value_216"}, {"x":217, "y":"value_217"}, {"x":218, "y":"value_218"}, {"x":219, "y":"value_219"}, {"x":220, "y":"value_220"}, {"x":221, "y":"value_221"}, {"x":222, "y":"value_222"}, {"x":223, "y":"value_223"}, {"x":224, "y":"value_224"}, {"x":225, "y":"value_225"}, {"x":226, "y":"value_226"}, {"x":227, "y":"value_227"}, {"x":228, "y":"value_228"}, {"x":229, "y":"value_229"}, {"x":230, "y":"value_230"}, {"x":231, "y":"value_231"}, {"x":232, "y":"value_232"}, {"x":233, "y":"value_233"}, {"x":234, "y":"value_234"}, {"x":235, "y":"value_235"}, {"x":236, "y":"value_236"}, {"x":237, "y":"value_237"}, {"x":238, "y":"value_238"}, {"x":239, "y":"value_239"}, {"x":240, "y":"value_240"}, {"x":241, "y":"value_241"}, {"x":242, "y":"value_242"}, {"x":243, "y":"value_243"}, {"x":244, "y":"value_244"}, {"x":245, "y":"value_245"}, {"x":246, "y":"value_246"}, {"x":247, "y":"value_247"}, {"x":248, "y":"value_248"}, {"x":249, "y":"value_249"}, {"x":250, "y":"value_250"}, {"x":251, "y":"value_251"}, {"x":252, "y":"value_252"}, {"x":253, "y":"value_253"}, {"x":254, "y":"value_254"}, {"x":255, "y":"value_255"}, {"x":256, "y":"value_256"}, {"x":257, "y":"value_257"}, {"x":258, "y":"value_258"}, {"x":259, "y":"value_259"}, {"x":260, "y":"value_260"}, {"x":261, "y":"value_261"}, {"x":262, "y":"value_262"}, {"x":263, "y":"value_263"}, {"x":264, "y":"value_264"}, {"x":265, "y":"value_265"}, {"x":266, "y":"value_266"}, {"x":267, "y":"value_267"}, {"x":268, "y":"value_268"}, {"x":269, "y":"value_269"}, {"x":270, "y":"value_270"}, {"x":271, "y":"value_271"}, {"x":272, "y":"value_272"}, {"x":273, "y":"value_273"}, {"x":274, "y":"value_274"}, {"x":275, "y":"value_275"}, {"x":276, "y":"value_276"}, {"x":277, "y":"value_277"}, {"x":278, "y":"value_278"}, {"x":279, "y":"value_279"}, {"x":280, "y":"value_280"}, {"x":281, "y":"value_281"}, {"x":282, "y":"value_282"}, {"x":283, "y":"value_283"}, {"x":284, "y":"value_284"}, {"x":285, "y":"value_285"}, {"x":286, "y":"value_286"}, {"x":287, "y":"value_287"}, {"x":288, "y":"value_288"}, {"x":289, "y":"value_289"}, {"x":290, "y":"value_290"}, {"x":291, "y":"value_291"}, {"x":292, "y":"value_292"}, {"x":293, "y":"value_293"}, {"x":294, "y":"value_294"}, {"x":295, "y":"value_295"}, {"x":296, "y":"value_296"}, {"x":297, "y":"value_297"}, {"x":298, "y":"value_298"}, {"x":299, "y":"value_299"}, {"x":300, "y":"value_300"}, {"x":301, "y":"value_301"}, {"x":302, "y":"value_302"}, {"x":303, "y":"value_303"}, {"x":304, "y":"value_304"}, {"x":305, "y":"value_305"}, {"x":306, "y":"value_306"}, {"x":307, "y":"value_307"}, {"x":308, "y":"value_308"}, {"x":309, "y":"value_309"}, {"x":310, "y":"value_310"}, {"x":311, "y":"value_311"}, {"x":312, "y":"value_312"}, {"x":313, "y":"value_313"}, {"x":314, "y":"value_314"}, {"x":315, "y":"value_315"}, {"x":316, "y":"value_316"}, {"x":317, "y":"value_317"}, {"x":318, "y":"value_318"}, {"x":319, "y":"value_319"}, {"x":320, "y":"value_320"}, {"x":321, "y":"value_321"}, {"x":322, "y":"value_322"}, {"x":323, "y":"value_323"}, {"x":324, "y":"value_324"}, {"x":325, "y":"value_325"}, {"x":326, "y":"value_326"}, {"x":327, "y":"value_327"}, {"x":328, "y":"value_328"}, {"x":329, "y":"value_329"}, {"x":330, "y":"value_330"}, {"x":331, "y":"value_331"}, {"x":332, "y":"value_332"}, {"x":333, "y":"value_333"}, {"x":334, "y":"value_334"}, {"x":335, "y":"value_335"}, {"x":336, "y":"value_336"}, {"x":337, "y":"value_337"}, {"x":338, "y":"value_338"}, {"x":339, "y":"value_339"}, {"x":340, "y":"value_340"}, {"x":341, "y":"value_341"}, {"x":342, "y":"value_342"}, {"x":343, "y":"value_343"}, {"x":344, "y":"value_344"}, {"x":345, "y":"value_345"}, {"x":346, "y":"value_346"}, {"x":347, "y":"value_347"}, {"x":348, "y":"value_348"}, {"x":349, "y":"value_349"}, {"x":350, "y":"value_350"}, {"x":351, "y":"value_351"}, {"x":352, "y":"value_352"}, {"x":353, "y":"value_353"}, {"x":354, "y":"value_354"}, {"x":355, "y":"value_355"}, {"x":356, "y":"value_356"}, {"x":357, "y":"value_357"}, {"x":358, "y":"value_358"}, {"x":359, "y":"value_359"}, {"x":360, "y":"value_360"}, {"x":361, "y":"value_361"}, {"x":362, "y":"value_362"}, {"x":363, "y":"value_363"}, {"x":364, "y":"value_364"}, {"x":365, "y":"value_365"}, {"x":366, "y":"value_366"}, {"x":367, "y":"value_367"}, {"x":368, "y":"value_368"}, {"x":369, "y":"value_369"}, {"x":370, "y":"value_370"}, {"x":371, "y":"value_371"}, {"x":372, "y":"value_372"}, {"x":373, "y":"value_373"}, {"x":374, "y":"value_374"}, {"x":375, "y":"value_375"}, {"x":376, "y":"value_376"}, {"x":377, "y":"value_377"}, {"x":378, "y":"value_378"}, {"x":379, "y":"value_379"}, {"x":380, "y":"value_380"}, {"x":381, "y":"value_381"}, {"x":382, "y":"value_382"}, {"x":383, "y":"value_383"}, {"x":384, "y":"value_384"}, {"x":385, "y":"value_385"}, {"x":386, "y":"value_386"}, {"x":387, "y":"value_387"}, {"x":388, "y":"value_388"}, {"x":389, "y":"value_389"}, {"x":390, "y":"value_390"}, {"x":391, "y":"value_391"}, {"x":392, "y":"value_392"}, {"x":393, "y":"value_393"}, {"x":394, "y":"value_394"}, {"x":395, "y":"value_395"}, {"x":396, "y":"value_396"}, {"x":397, "y":"value_397"}, {"x":398, "y":"value_398"}, {"x":399, "y":"value_399"}, {"x":400, "y":"value_400"}, {"x":401, "y":"value_401"}, {"x":402, "y":"value_402"}, {"x":403, "y":"value_403"}, {"x":404, "y":"value_404"}, {"x":405, "y":"value_405"}, {"x":406, "y":"value_406"}, {"x":407, "y":"value_407"}, {"x":408, "y":"value_408"}, {"x":409, "y":"value_409"}, {"x":410, "y":"value_410"}, {"x":411, "y":"value_411"}, {"x":412, "y":"value_412"}, {"x":413, "y":"value_413"}, {"x":414, "y":"value_414"}, {"x":415, "y":"value_415"}, {"x":416, "y":"value_416"}, {"x":417, "y":"value_417"}, {"x":418, "y":"value_418"}, {"x":419, "y":"value_419"}, {"x":420, "y":"value_420"}, {"x":421, "y":"value_421"}, {"x":422, "y":"value_422"}, {"x":423, "y":"value_423"}, {"x":424, "y":"value_424"}, {"x":425, "y":"value_425"}, {"x":426, "y":"value_426"}, {"x":427, "y":"value_427"}, {"x":428, "y":"value_428"}, {"x":429, "y":"value_429"}, {"x":430, "y":"value_430"}, {"x":431, "y":"value_431"}, {"x":432, "y":"value_432"}, {"x":433, "y":"value_433"}, {"x":434, "y":"value_434"}, {"x":435, "y":"value_435"}, {"x":436, "y":"value_436"}, {"x":437, "y":"value_437"}, {"x":438, "y":"value_438"}, {"x":439, "y":"value_439"}, {"x":440, "y":"value_440"}, {"x":441, "y":"value_441"}, {"x":442, "y":"value_442"}, {"x":443, "y":"value_443"}, {"x":444, "y":"value_444"}, {"x":445, "y":"value_445"}, {"x":446, "y":"value_446"}, {"x":447, "y":"value_447"}, {"x":448, "y":"value_448"}, {"x":449, "y":"value_449"}, {"x":450, "y":"value_450"}, {"x":451, "y":"value_451"}, {"x":452, "y":"value_452"}, {"x":453, "y":"value_453"}, {"x":454, "y":"value_454"}, {"x":455, "y":"value_455"}, {"x":456, "y":"value_456"}, {"x":457, "y":"value_457"}, {"x":458, "y":"value_458"}, {"x":459, "y":"value_459"}, {"x":460, "y":"value_460"}, {"x":461, "y":"value_461"}, {"x":462, "y":"value_462"}, {"x":463, "y":"value_463"}, {"x":464, "y":"value_464"}, {"x":465, "y":"value_465"}, {"x":466, "y":"value_466"}, {"x":467, "y":"value_467"}, {"x":468, "y":"value_468"}, {"x":469, "y":"value_469"}, {"x":470, "y":"value_470"}, {"x":471, "y":"value_471"}, {"x":472, "y":"value_472"}, {"x":473, "y":"value_473"}, {"x":474, "y":"value_474"}, {"x":475, "y":"value_475"}, {"x":476, "y":"value_476"}, {"x":477, "y":"value_477"}, {"x":478, "y":"value_478"}, {"x":479, "y":"value_479"}, {"x":480, "y":"value_480"}, {"x":481, "y":"value_481"}, {"x":482, "y":"value_482"}, {"x":483, "y":"value_483"}, {"x":484, "y":"value_484"}, {"x":485, "y":"value_485"}, {"x":486, "y":"value_486"}, {"x":487, "y":"value_487"}, {"x":488, "y":"value_488"}, {"x":489, "y":"value_489"}, {"x":490, "y":"value_490"}, {"x":491, "y":"value_491"}, {"x":492, "y":"value_492"}, {"x":493, "y":"value_493"}, {"x":494, "y":"value_494"}, {"x":495, "y":"value_495"}, {"x":496, "y":"value_496"}, {"x":497, "y":"value_497"}, {"x":498, "y":"value_498"}, {"x":499, "y":"value_499"}] 500 +3 [{"x":0, "y":"big_0"}, {"x":1, "y":"big_1"}, {"x":2, "y":"big_2"}, {"x":3, "y":"big_3"}, {"x":4, "y":"big_4"}, {"x":5, "y":"big_5"}, {"x":6, "y":"big_6"}, {"x":7, "y":"big_7"}, {"x":8, "y":"big_8"}, {"x":9, "y":"big_9"}, {"x":10, "y":"big_10"}, {"x":11, "y":"big_11"}, {"x":12, "y":"big_12"}, {"x":13, "y":"big_13"}, {"x":14, "y":"big_14"}, {"x":15, "y":"big_15"}, {"x":16, "y":"big_16"}, {"x":17, "y":"big_17"}, {"x":18, "y":"big_18"}, {"x":19, "y":"big_19"}, {"x":20, "y":"big_20"}, {"x":21, "y":"big_21"}, {"x":22, "y":"big_22"}, {"x":23, "y":"big_23"}, {"x":24, "y":"big_24"}, {"x":25, "y":"big_25"}, {"x":26, "y":"big_26"}, {"x":27, "y":"big_27"}, {"x":28, "y":"big_28"}, {"x":29, "y":"big_29"}, {"x":30, "y":"big_30"}, {"x":31, "y":"big_31"}, {"x":32, "y":"big_32"}, {"x":33, "y":"big_33"}, {"x":34, "y":"big_34"}, {"x":35, "y":"big_35"}, {"x":36, "y":"big_36"}, {"x":37, "y":"big_37"}, {"x":38, "y":"big_38"}, {"x":39, "y":"big_39"}, {"x":40, "y":"big_40"}, {"x":41, "y":"big_41"}, {"x":42, "y":"big_42"}, {"x":43, "y":"big_43"}, {"x":44, "y":"big_44"}, {"x":45, "y":"big_45"}, {"x":46, "y":"big_46"}, {"x":47, "y":"big_47"}, {"x":48, "y":"big_48"}, {"x":49, "y":"big_49"}, {"x":50, "y":"big_50"}, {"x":51, "y":"big_51"}, {"x":52, "y":"big_52"}, {"x":53, "y":"big_53"}, {"x":54, "y":"big_54"}, {"x":55, "y":"big_55"}, {"x":56, "y":"big_56"}, {"x":57, "y":"big_57"}, {"x":58, "y":"big_58"}, {"x":59, "y":"big_59"}, {"x":60, "y":"big_60"}, {"x":61, "y":"big_61"}, {"x":62, "y":"big_62"}, {"x":63, "y":"big_63"}, {"x":64, "y":"big_64"}, {"x":65, "y":"big_65"}, {"x":66, "y":"big_66"}, {"x":67, "y":"big_67"}, {"x":68, "y":"big_68"}, {"x":69, "y":"big_69"}, {"x":70, "y":"big_70"}, {"x":71, "y":"big_71"}, {"x":72, "y":"big_72"}, {"x":73, "y":"big_73"}, {"x":74, "y":"big_74"}, {"x":75, "y":"big_75"}, {"x":76, "y":"big_76"}, {"x":77, "y":"big_77"}, {"x":78, "y":"big_78"}, {"x":79, "y":"big_79"}, {"x":80, "y":"big_80"}, {"x":81, "y":"big_81"}, {"x":82, "y":"big_82"}, {"x":83, "y":"big_83"}, {"x":84, "y":"big_84"}, {"x":85, "y":"big_85"}, {"x":86, "y":"big_86"}, {"x":87, "y":"big_87"}, {"x":88, "y":"big_88"}, {"x":89, "y":"big_89"}, {"x":90, "y":"big_90"}, {"x":91, "y":"big_91"}, {"x":92, "y":"big_92"}, {"x":93, "y":"big_93"}, {"x":94, "y":"big_94"}, {"x":95, "y":"big_95"}, {"x":96, "y":"big_96"}, {"x":97, "y":"big_97"}, {"x":98, "y":"big_98"}, {"x":99, "y":"big_99"}, {"x":100, "y":"big_100"}, {"x":101, "y":"big_101"}, {"x":102, "y":"big_102"}, {"x":103, "y":"big_103"}, {"x":104, "y":"big_104"}, {"x":105, "y":"big_105"}, {"x":106, "y":"big_106"}, {"x":107, "y":"big_107"}, {"x":108, "y":"big_108"}, {"x":109, "y":"big_109"}, {"x":110, "y":"big_110"}, {"x":111, "y":"big_111"}, {"x":112, "y":"big_112"}, {"x":113, "y":"big_113"}, {"x":114, "y":"big_114"}, {"x":115, "y":"big_115"}, {"x":116, "y":"big_116"}, {"x":117, "y":"big_117"}, {"x":118, "y":"big_118"}, {"x":119, "y":"big_119"}, {"x":120, "y":"big_120"}, {"x":121, "y":"big_121"}, {"x":122, "y":"big_122"}, {"x":123, "y":"big_123"}, {"x":124, "y":"big_124"}, {"x":125, "y":"big_125"}, {"x":126, "y":"big_126"}, {"x":127, "y":"big_127"}, {"x":128, "y":"big_128"}, {"x":129, "y":"big_129"}, {"x":130, "y":"big_130"}, {"x":131, "y":"big_131"}, {"x":132, "y":"big_132"}, {"x":133, "y":"big_133"}, {"x":134, "y":"big_134"}, {"x":135, "y":"big_135"}, {"x":136, "y":"big_136"}, {"x":137, "y":"big_137"}, {"x":138, "y":"big_138"}, {"x":139, "y":"big_139"}, {"x":140, "y":"big_140"}, {"x":141, "y":"big_141"}, {"x":142, "y":"big_142"}, {"x":143, "y":"big_143"}, {"x":144, "y":"big_144"}, {"x":145, "y":"big_145"}, {"x":146, "y":"big_146"}, {"x":147, "y":"big_147"}, {"x":148, "y":"big_148"}, {"x":149, "y":"big_149"}, {"x":150, "y":"big_150"}, {"x":151, "y":"big_151"}, {"x":152, "y":"big_152"}, {"x":153, "y":"big_153"}, {"x":154, "y":"big_154"}, {"x":155, "y":"big_155"}, {"x":156, "y":"big_156"}, {"x":157, "y":"big_157"}, {"x":158, "y":"big_158"}, {"x":159, "y":"big_159"}, {"x":160, "y":"big_160"}, {"x":161, "y":"big_161"}, {"x":162, "y":"big_162"}, {"x":163, "y":"big_163"}, {"x":164, "y":"big_164"}, {"x":165, "y":"big_165"}, {"x":166, "y":"big_166"}, {"x":167, "y":"big_167"}, {"x":168, "y":"big_168"}, {"x":169, "y":"big_169"}, {"x":170, "y":"big_170"}, {"x":171, "y":"big_171"}, {"x":172, "y":"big_172"}, {"x":173, "y":"big_173"}, {"x":174, "y":"big_174"}, {"x":175, "y":"big_175"}, {"x":176, "y":"big_176"}, {"x":177, "y":"big_177"}, {"x":178, "y":"big_178"}, {"x":179, "y":"big_179"}, {"x":180, "y":"big_180"}, {"x":181, "y":"big_181"}, {"x":182, "y":"big_182"}, {"x":183, "y":"big_183"}, {"x":184, "y":"big_184"}, {"x":185, "y":"big_185"}, {"x":186, "y":"big_186"}, {"x":187, "y":"big_187"}, {"x":188, "y":"big_188"}, {"x":189, "y":"big_189"}, {"x":190, "y":"big_190"}, {"x":191, "y":"big_191"}, {"x":192, "y":"big_192"}, {"x":193, "y":"big_193"}, {"x":194, "y":"big_194"}, {"x":195, "y":"big_195"}, {"x":196, "y":"big_196"}, {"x":197, "y":"big_197"}, {"x":198, "y":"big_198"}, {"x":199, "y":"big_199"}, {"x":200, "y":"big_200"}, {"x":201, "y":"big_201"}, {"x":202, "y":"big_202"}, {"x":203, "y":"big_203"}, {"x":204, "y":"big_204"}, {"x":205, "y":"big_205"}, {"x":206, "y":"big_206"}, {"x":207, "y":"big_207"}, {"x":208, "y":"big_208"}, {"x":209, "y":"big_209"}, {"x":210, "y":"big_210"}, {"x":211, "y":"big_211"}, {"x":212, "y":"big_212"}, {"x":213, "y":"big_213"}, {"x":214, "y":"big_214"}, {"x":215, "y":"big_215"}, {"x":216, "y":"big_216"}, {"x":217, "y":"big_217"}, {"x":218, "y":"big_218"}, {"x":219, "y":"big_219"}, {"x":220, "y":"big_220"}, {"x":221, "y":"big_221"}, {"x":222, "y":"big_222"}, {"x":223, "y":"big_223"}, {"x":224, "y":"big_224"}, {"x":225, "y":"big_225"}, {"x":226, "y":"big_226"}, {"x":227, "y":"big_227"}, {"x":228, "y":"big_228"}, {"x":229, "y":"big_229"}, {"x":230, "y":"big_230"}, {"x":231, "y":"big_231"}, {"x":232, "y":"big_232"}, {"x":233, "y":"big_233"}, {"x":234, "y":"big_234"}, {"x":235, "y":"big_235"}, {"x":236, "y":"big_236"}, {"x":237, "y":"big_237"}, {"x":238, "y":"big_238"}, {"x":239, "y":"big_239"}, {"x":240, "y":"big_240"}, {"x":241, "y":"big_241"}, {"x":242, "y":"big_242"}, {"x":243, "y":"big_243"}, {"x":244, "y":"big_244"}, {"x":245, "y":"big_245"}, {"x":246, "y":"big_246"}, {"x":247, "y":"big_247"}, {"x":248, "y":"big_248"}, {"x":249, "y":"big_249"}, {"x":250, "y":"big_250"}, {"x":251, "y":"big_251"}, {"x":252, "y":"big_252"}, {"x":253, "y":"big_253"}, {"x":254, "y":"big_254"}, {"x":255, "y":"big_255"}, {"x":256, "y":"big_256"}, {"x":257, "y":"big_257"}, {"x":258, "y":"big_258"}, {"x":259, "y":"big_259"}, {"x":260, "y":"big_260"}, {"x":261, "y":"big_261"}, {"x":262, "y":"big_262"}, {"x":263, "y":"big_263"}, {"x":264, "y":"big_264"}, {"x":265, "y":"big_265"}, {"x":266, "y":"big_266"}, {"x":267, "y":"big_267"}, {"x":268, "y":"big_268"}, {"x":269, "y":"big_269"}, {"x":270, "y":"big_270"}, {"x":271, "y":"big_271"}, {"x":272, "y":"big_272"}, {"x":273, "y":"big_273"}, {"x":274, "y":"big_274"}, {"x":275, "y":"big_275"}, {"x":276, "y":"big_276"}, {"x":277, "y":"big_277"}, {"x":278, "y":"big_278"}, {"x":279, "y":"big_279"}, {"x":280, "y":"big_280"}, {"x":281, "y":"big_281"}, {"x":282, "y":"big_282"}, {"x":283, "y":"big_283"}, {"x":284, "y":"big_284"}, {"x":285, "y":"big_285"}, {"x":286, "y":"big_286"}, {"x":287, "y":"big_287"}, {"x":288, "y":"big_288"}, {"x":289, "y":"big_289"}, {"x":290, "y":"big_290"}, {"x":291, "y":"big_291"}, {"x":292, "y":"big_292"}, {"x":293, "y":"big_293"}, {"x":294, "y":"big_294"}, {"x":295, "y":"big_295"}, {"x":296, "y":"big_296"}, {"x":297, "y":"big_297"}, {"x":298, "y":"big_298"}, {"x":299, "y":"big_299"}, {"x":300, "y":"big_300"}, {"x":301, "y":"big_301"}, {"x":302, "y":"big_302"}, {"x":303, "y":"big_303"}, {"x":304, "y":"big_304"}, {"x":305, "y":"big_305"}, {"x":306, "y":"big_306"}, {"x":307, "y":"big_307"}, {"x":308, "y":"big_308"}, {"x":309, "y":"big_309"}, {"x":310, "y":"big_310"}, {"x":311, "y":"big_311"}, {"x":312, "y":"big_312"}, {"x":313, "y":"big_313"}, {"x":314, "y":"big_314"}, {"x":315, "y":"big_315"}, {"x":316, "y":"big_316"}, {"x":317, "y":"big_317"}, {"x":318, "y":"big_318"}, {"x":319, "y":"big_319"}, {"x":320, "y":"big_320"}, {"x":321, "y":"big_321"}, {"x":322, "y":"big_322"}, {"x":323, "y":"big_323"}, {"x":324, "y":"big_324"}, {"x":325, "y":"big_325"}, {"x":326, "y":"big_326"}, {"x":327, "y":"big_327"}, {"x":328, "y":"big_328"}, {"x":329, "y":"big_329"}, {"x":330, "y":"big_330"}, {"x":331, "y":"big_331"}, {"x":332, "y":"big_332"}, {"x":333, "y":"big_333"}, {"x":334, "y":"big_334"}, {"x":335, "y":"big_335"}, {"x":336, "y":"big_336"}, {"x":337, "y":"big_337"}, {"x":338, "y":"big_338"}, {"x":339, "y":"big_339"}, {"x":340, "y":"big_340"}, {"x":341, "y":"big_341"}, {"x":342, "y":"big_342"}, {"x":343, "y":"big_343"}, {"x":344, "y":"big_344"}, {"x":345, "y":"big_345"}, {"x":346, "y":"big_346"}, {"x":347, "y":"big_347"}, {"x":348, "y":"big_348"}, {"x":349, "y":"big_349"}, {"x":350, "y":"big_350"}, {"x":351, "y":"big_351"}, {"x":352, "y":"big_352"}, {"x":353, "y":"big_353"}, {"x":354, "y":"big_354"}, {"x":355, "y":"big_355"}, {"x":356, "y":"big_356"}, {"x":357, "y":"big_357"}, {"x":358, "y":"big_358"}, {"x":359, "y":"big_359"}, {"x":360, "y":"big_360"}, {"x":361, "y":"big_361"}, {"x":362, "y":"big_362"}, {"x":363, "y":"big_363"}, {"x":364, "y":"big_364"}, {"x":365, "y":"big_365"}, {"x":366, "y":"big_366"}, {"x":367, "y":"big_367"}, {"x":368, "y":"big_368"}, {"x":369, "y":"big_369"}, {"x":370, "y":"big_370"}, {"x":371, "y":"big_371"}, {"x":372, "y":"big_372"}, {"x":373, "y":"big_373"}, {"x":374, "y":"big_374"}, {"x":375, "y":"big_375"}, {"x":376, "y":"big_376"}, {"x":377, "y":"big_377"}, {"x":378, "y":"big_378"}, {"x":379, "y":"big_379"}, {"x":380, "y":"big_380"}, {"x":381, "y":"big_381"}, {"x":382, "y":"big_382"}, {"x":383, "y":"big_383"}, {"x":384, "y":"big_384"}, {"x":385, "y":"big_385"}, {"x":386, "y":"big_386"}, {"x":387, "y":"big_387"}, {"x":388, "y":"big_388"}, {"x":389, "y":"big_389"}, {"x":390, "y":"big_390"}, {"x":391, "y":"big_391"}, {"x":392, "y":"big_392"}, {"x":393, "y":"big_393"}, {"x":394, "y":"big_394"}, {"x":395, "y":"big_395"}, {"x":396, "y":"big_396"}, {"x":397, "y":"big_397"}, {"x":398, "y":"big_398"}, {"x":399, "y":"big_399"}, {"x":400, "y":"big_400"}, {"x":401, "y":"big_401"}, {"x":402, "y":"big_402"}, {"x":403, "y":"big_403"}, {"x":404, "y":"big_404"}, {"x":405, "y":"big_405"}, {"x":406, "y":"big_406"}, {"x":407, "y":"big_407"}, {"x":408, "y":"big_408"}, {"x":409, "y":"big_409"}, {"x":410, "y":"big_410"}, {"x":411, "y":"big_411"}, {"x":412, "y":"big_412"}, {"x":413, "y":"big_413"}, {"x":414, "y":"big_414"}, {"x":415, "y":"big_415"}, {"x":416, "y":"big_416"}, {"x":417, "y":"big_417"}, {"x":418, "y":"big_418"}, {"x":419, "y":"big_419"}, {"x":420, "y":"big_420"}, {"x":421, "y":"big_421"}, {"x":422, "y":"big_422"}, {"x":423, "y":"big_423"}, {"x":424, "y":"big_424"}, {"x":425, "y":"big_425"}, {"x":426, "y":"big_426"}, {"x":427, "y":"big_427"}, {"x":428, "y":"big_428"}, {"x":429, "y":"big_429"}, {"x":430, "y":"big_430"}, {"x":431, "y":"big_431"}, {"x":432, "y":"big_432"}, {"x":433, "y":"big_433"}, {"x":434, "y":"big_434"}, {"x":435, "y":"big_435"}, {"x":436, "y":"big_436"}, {"x":437, "y":"big_437"}, {"x":438, "y":"big_438"}, {"x":439, "y":"big_439"}, {"x":440, "y":"big_440"}, {"x":441, "y":"big_441"}, {"x":442, "y":"big_442"}, {"x":443, "y":"big_443"}, {"x":444, "y":"big_444"}, {"x":445, "y":"big_445"}, {"x":446, "y":"big_446"}, {"x":447, "y":"big_447"}, {"x":448, "y":"big_448"}, {"x":449, "y":"big_449"}, {"x":450, "y":"big_450"}, {"x":451, "y":"big_451"}, {"x":452, "y":"big_452"}, {"x":453, "y":"big_453"}, {"x":454, "y":"big_454"}, {"x":455, "y":"big_455"}, {"x":456, "y":"big_456"}, {"x":457, "y":"big_457"}, {"x":458, "y":"big_458"}, {"x":459, "y":"big_459"}, {"x":460, "y":"big_460"}, {"x":461, "y":"big_461"}, {"x":462, "y":"big_462"}, {"x":463, "y":"big_463"}, {"x":464, "y":"big_464"}, {"x":465, "y":"big_465"}, {"x":466, "y":"big_466"}, {"x":467, "y":"big_467"}, {"x":468, "y":"big_468"}, {"x":469, "y":"big_469"}, {"x":470, "y":"big_470"}, {"x":471, "y":"big_471"}, {"x":472, "y":"big_472"}, {"x":473, "y":"big_473"}, {"x":474, "y":"big_474"}, {"x":475, "y":"big_475"}, {"x":476, "y":"big_476"}, {"x":477, "y":"big_477"}, {"x":478, "y":"big_478"}, {"x":479, "y":"big_479"}, {"x":480, "y":"big_480"}, {"x":481, "y":"big_481"}, {"x":482, "y":"big_482"}, {"x":483, "y":"big_483"}, {"x":484, "y":"big_484"}, {"x":485, "y":"big_485"}, {"x":486, "y":"big_486"}, {"x":487, "y":"big_487"}, {"x":488, "y":"big_488"}, {"x":489, "y":"big_489"}, {"x":490, "y":"big_490"}, {"x":491, "y":"big_491"}, {"x":492, "y":"big_492"}, {"x":493, "y":"big_493"}, {"x":494, "y":"big_494"}, {"x":495, "y":"big_495"}, {"x":496, "y":"big_496"}, {"x":497, "y":"big_497"}, {"x":498, "y":"big_498"}, {"x":499, "y":"big_499"}] 500 + +-- !nested_cross_page2_parquet_q5 -- +1 101 value_101 +1 102 value_102 +1 103 value_103 +1 104 value_104 +1 105 value_105 +1 106 value_106 +1 107 value_107 +1 108 value_108 +1 109 value_109 +1 110 value_110 +1 111 value_111 +1 112 value_112 +1 113 value_113 +1 114 value_114 +1 115 value_115 +1 116 value_116 +1 117 value_117 +1 118 value_118 +1 119 value_119 +1 120 value_120 +1 121 value_121 +1 122 value_122 +1 123 value_123 +1 124 value_124 +1 125 value_125 +1 126 value_126 +1 127 value_127 +1 128 value_128 +1 129 value_129 +1 130 value_130 +1 131 value_131 +1 132 value_132 +1 133 value_133 +1 134 value_134 +1 135 value_135 +1 136 value_136 +1 137 value_137 +1 138 value_138 +1 139 value_139 +1 140 value_140 +1 141 value_141 +1 142 value_142 +1 143 value_143 +1 144 value_144 +1 145 value_145 +1 146 value_146 +1 147 value_147 +1 148 value_148 +1 149 value_149 +1 150 value_150 +1 151 value_151 +1 152 value_152 +1 153 value_153 +1 154 value_154 +1 155 value_155 +1 156 value_156 +1 157 value_157 +1 158 value_158 +1 159 value_159 +1 160 value_160 +1 161 value_161 +1 162 value_162 +1 163 value_163 +1 164 value_164 +1 165 value_165 +1 166 value_166 +1 167 value_167 +1 168 value_168 +1 169 value_169 +1 170 value_170 +1 171 value_171 +1 172 value_172 +1 173 value_173 +1 174 value_174 +1 175 value_175 +1 176 value_176 +1 177 value_177 +1 178 value_178 +1 179 value_179 +1 180 value_180 +1 181 value_181 +1 182 value_182 +1 183 value_183 +1 184 value_184 +1 185 value_185 +1 186 value_186 +1 187 value_187 +1 188 value_188 +1 189 value_189 +1 190 value_190 +1 191 value_191 +1 192 value_192 +1 193 value_193 +1 194 value_194 +1 195 value_195 +1 196 value_196 +1 197 value_197 +1 198 value_198 +1 199 value_199 +1 200 value_200 +1 201 value_201 +1 202 value_202 +1 203 value_203 +1 204 value_204 +1 205 value_205 +1 206 value_206 +1 207 value_207 +1 208 value_208 +1 209 value_209 +1 210 value_210 +1 211 value_211 +1 212 value_212 +1 213 value_213 +1 214 value_214 +1 215 value_215 +1 216 value_216 +1 217 value_217 +1 218 value_218 +1 219 value_219 +1 220 value_220 +1 221 value_221 +1 222 value_222 +1 223 value_223 +1 224 value_224 +1 225 value_225 +1 226 value_226 +1 227 value_227 +1 228 value_228 +1 229 value_229 +1 230 value_230 +1 231 value_231 +1 232 value_232 +1 233 value_233 +1 234 value_234 +1 235 value_235 +1 236 value_236 +1 237 value_237 +1 238 value_238 +1 239 value_239 +1 240 value_240 +1 241 value_241 +1 242 value_242 +1 243 value_243 +1 244 value_244 +1 245 value_245 +1 246 value_246 +1 247 value_247 +1 248 value_248 +1 249 value_249 +1 250 value_250 +1 251 value_251 +1 252 value_252 +1 253 value_253 +1 254 value_254 +1 255 value_255 +1 256 value_256 +1 257 value_257 +1 258 value_258 +1 259 value_259 +1 260 value_260 +1 261 value_261 +1 262 value_262 +1 263 value_263 +1 264 value_264 +1 265 value_265 +1 266 value_266 +1 267 value_267 +1 268 value_268 +1 269 value_269 +1 270 value_270 +1 271 value_271 +1 272 value_272 +1 273 value_273 +1 274 value_274 +1 275 value_275 +1 276 value_276 +1 277 value_277 +1 278 value_278 +1 279 value_279 +1 280 value_280 +1 281 value_281 +1 282 value_282 +1 283 value_283 +1 284 value_284 +1 285 value_285 +1 286 value_286 +1 287 value_287 +1 288 value_288 +1 289 value_289 +1 290 value_290 +1 291 value_291 +1 292 value_292 +1 293 value_293 +1 294 value_294 +1 295 value_295 +1 296 value_296 +1 297 value_297 +1 298 value_298 +1 299 value_299 +1 300 value_300 +1 301 value_301 +1 302 value_302 +1 303 value_303 +1 304 value_304 +1 305 value_305 +1 306 value_306 +1 307 value_307 +1 308 value_308 +1 309 value_309 +1 310 value_310 +1 311 value_311 +1 312 value_312 +1 313 value_313 +1 314 value_314 +1 315 value_315 +1 316 value_316 +1 317 value_317 +1 318 value_318 +1 319 value_319 +1 320 value_320 +1 321 value_321 +1 322 value_322 +1 323 value_323 +1 324 value_324 +1 325 value_325 +1 326 value_326 +1 327 value_327 +1 328 value_328 +1 329 value_329 +1 330 value_330 +1 331 value_331 +1 332 value_332 +1 333 value_333 +1 334 value_334 +1 335 value_335 +1 336 value_336 +1 337 value_337 +1 338 value_338 +1 339 value_339 +1 340 value_340 +1 341 value_341 +1 342 value_342 +1 343 value_343 +1 344 value_344 +1 345 value_345 +1 346 value_346 +1 347 value_347 +1 348 value_348 +1 349 value_349 +1 350 value_350 +1 351 value_351 +1 352 value_352 +1 353 value_353 +1 354 value_354 +1 355 value_355 +1 356 value_356 +1 357 value_357 +1 358 value_358 +1 359 value_359 +1 360 value_360 +1 361 value_361 +1 362 value_362 +1 363 value_363 +1 364 value_364 +1 365 value_365 +1 366 value_366 +1 367 value_367 +1 368 value_368 +1 369 value_369 +1 370 value_370 +1 371 value_371 +1 372 value_372 +1 373 value_373 +1 374 value_374 +1 375 value_375 +1 376 value_376 +1 377 value_377 +1 378 value_378 +1 379 value_379 +1 380 value_380 +1 381 value_381 +1 382 value_382 +1 383 value_383 +1 384 value_384 +1 385 value_385 +1 386 value_386 +1 387 value_387 +1 388 value_388 +1 389 value_389 +1 390 value_390 +1 391 value_391 +1 392 value_392 +1 393 value_393 +1 394 value_394 +1 395 value_395 +1 396 value_396 +1 397 value_397 +1 398 value_398 +1 399 value_399 +1 400 value_400 +1 401 value_401 +1 402 value_402 +1 403 value_403 +1 404 value_404 +1 405 value_405 +1 406 value_406 +1 407 value_407 +1 408 value_408 +1 409 value_409 +1 410 value_410 +1 411 value_411 +1 412 value_412 +1 413 value_413 +1 414 value_414 +1 415 value_415 +1 416 value_416 +1 417 value_417 +1 418 value_418 +1 419 value_419 +1 420 value_420 +1 421 value_421 +1 422 value_422 +1 423 value_423 +1 424 value_424 +1 425 value_425 +1 426 value_426 +1 427 value_427 +1 428 value_428 +1 429 value_429 +1 430 value_430 +1 431 value_431 +1 432 value_432 +1 433 value_433 +1 434 value_434 +1 435 value_435 +1 436 value_436 +1 437 value_437 +1 438 value_438 +1 439 value_439 +1 440 value_440 +1 441 value_441 +1 442 value_442 +1 443 value_443 +1 444 value_444 +1 445 value_445 +1 446 value_446 +1 447 value_447 +1 448 value_448 +1 449 value_449 +1 450 value_450 +1 451 value_451 +1 452 value_452 +1 453 value_453 +1 454 value_454 +1 455 value_455 +1 456 value_456 +1 457 value_457 +1 458 value_458 +1 459 value_459 +1 460 value_460 +1 461 value_461 +1 462 value_462 +1 463 value_463 +1 464 value_464 +1 465 value_465 +1 466 value_466 +1 467 value_467 +1 468 value_468 +1 469 value_469 +1 470 value_470 +1 471 value_471 +1 472 value_472 +1 473 value_473 +1 474 value_474 +1 475 value_475 +1 476 value_476 +1 477 value_477 +1 478 value_478 +1 479 value_479 +1 480 value_480 +1 481 value_481 +1 482 value_482 +1 483 value_483 +1 484 value_484 +1 485 value_485 +1 486 value_486 +1 487 value_487 +1 488 value_488 +1 489 value_489 +1 490 value_490 +1 491 value_491 +1 492 value_492 +1 493 value_493 +1 494 value_494 +1 495 value_495 +1 496 value_496 +1 497 value_497 +1 498 value_498 +1 499 value_499 + +-- !nested_cross_page2_parquet_q6 -- +2 {"small_key":[1, 2, 3]} 1 + +-- !nested_cross_page3_parquet_q1 -- +[1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5] + +-- !nested_cross_page3_parquet_q2 -- + +-- !nested_cross_page3_parquet_q3 -- +[6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10] + +-- !nested_cross_page3_parquet_q4 -- +\N \N +1 1000 +3 1000 + +-- !nested_cross_page3_parquet_q5 -- +\N \N \N +1 1 3 +3 6 8 + +-- !nested_cross_page3_parquet_q6 -- +1 [1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5] +3 [6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10] + +-- !nested_cross_page3_parquet_q7 -- +1 [1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5] + +-- !nested_cross_page3_parquet_q8 -- + +-- !nested_cross_page3_parquet_q9 -- +\N \N \N +1 1 5 +3 6 10 + +-- !nested_cross_page3_parquet_q10 -- +1 [1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5] +3 [6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10] + +-- !nested_cross_page1_parquet_q1 -- +[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] + +-- !nested_cross_page1_parquet_q2 -- +[1, 2, 3] + +-- !nested_cross_page1_parquet_q3 -- +[6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10] + +-- !nested_cross_page1_parquet_q4 -- +1 1000 +2 3 +3 1000 + +-- !nested_cross_page1_parquet_q5 -- +1 1 3 +2 1 3 +3 6 8 + +-- !nested_cross_page1_parquet_q6 -- +1 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] +3 [6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10] + +-- !nested_cross_page1_parquet_q7 -- +1 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] +2 [1, 2, 3] + +-- !nested_cross_page1_parquet_q8 -- +2 [1, 2, 3] This is a small array with just three elements + +-- !nested_cross_page1_parquet_q9 -- +1 1 5 +2 1 3 +3 6 10 + +-- !nested_cross_page1_parquet_q10 -- +1 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] +3 [6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10] + +-- !nested_cross_page2_parquet_q1 -- +1 [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]] 100 + +-- !nested_cross_page2_parquet_q2 -- +2 [[1, 2], [3, 4], [5, 6]] 3 + +-- !nested_cross_page2_parquet_q3 -- +3 [[10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]] 100 + +-- !nested_cross_page2_parquet_q4 -- +1 [{"x":0, "y":"value_0"}, {"x":1, "y":"value_1"}, {"x":2, "y":"value_2"}, {"x":3, "y":"value_3"}, {"x":4, "y":"value_4"}, {"x":5, "y":"value_5"}, {"x":6, "y":"value_6"}, {"x":7, "y":"value_7"}, {"x":8, "y":"value_8"}, {"x":9, "y":"value_9"}, {"x":10, "y":"value_10"}, {"x":11, "y":"value_11"}, {"x":12, "y":"value_12"}, {"x":13, "y":"value_13"}, {"x":14, "y":"value_14"}, {"x":15, "y":"value_15"}, {"x":16, "y":"value_16"}, {"x":17, "y":"value_17"}, {"x":18, "y":"value_18"}, {"x":19, "y":"value_19"}, {"x":20, "y":"value_20"}, {"x":21, "y":"value_21"}, {"x":22, "y":"value_22"}, {"x":23, "y":"value_23"}, {"x":24, "y":"value_24"}, {"x":25, "y":"value_25"}, {"x":26, "y":"value_26"}, {"x":27, "y":"value_27"}, {"x":28, "y":"value_28"}, {"x":29, "y":"value_29"}, {"x":30, "y":"value_30"}, {"x":31, "y":"value_31"}, {"x":32, "y":"value_32"}, {"x":33, "y":"value_33"}, {"x":34, "y":"value_34"}, {"x":35, "y":"value_35"}, {"x":36, "y":"value_36"}, {"x":37, "y":"value_37"}, {"x":38, "y":"value_38"}, {"x":39, "y":"value_39"}, {"x":40, "y":"value_40"}, {"x":41, "y":"value_41"}, {"x":42, "y":"value_42"}, {"x":43, "y":"value_43"}, {"x":44, "y":"value_44"}, {"x":45, "y":"value_45"}, {"x":46, "y":"value_46"}, {"x":47, "y":"value_47"}, {"x":48, "y":"value_48"}, {"x":49, "y":"value_49"}, {"x":50, "y":"value_50"}, {"x":51, "y":"value_51"}, {"x":52, "y":"value_52"}, {"x":53, "y":"value_53"}, {"x":54, "y":"value_54"}, {"x":55, "y":"value_55"}, {"x":56, "y":"value_56"}, {"x":57, "y":"value_57"}, {"x":58, "y":"value_58"}, {"x":59, "y":"value_59"}, {"x":60, "y":"value_60"}, {"x":61, "y":"value_61"}, {"x":62, "y":"value_62"}, {"x":63, "y":"value_63"}, {"x":64, "y":"value_64"}, {"x":65, "y":"value_65"}, {"x":66, "y":"value_66"}, {"x":67, "y":"value_67"}, {"x":68, "y":"value_68"}, {"x":69, "y":"value_69"}, {"x":70, "y":"value_70"}, {"x":71, "y":"value_71"}, {"x":72, "y":"value_72"}, {"x":73, "y":"value_73"}, {"x":74, "y":"value_74"}, {"x":75, "y":"value_75"}, {"x":76, "y":"value_76"}, {"x":77, "y":"value_77"}, {"x":78, "y":"value_78"}, {"x":79, "y":"value_79"}, {"x":80, "y":"value_80"}, {"x":81, "y":"value_81"}, {"x":82, "y":"value_82"}, {"x":83, "y":"value_83"}, {"x":84, "y":"value_84"}, {"x":85, "y":"value_85"}, {"x":86, "y":"value_86"}, {"x":87, "y":"value_87"}, {"x":88, "y":"value_88"}, {"x":89, "y":"value_89"}, {"x":90, "y":"value_90"}, {"x":91, "y":"value_91"}, {"x":92, "y":"value_92"}, {"x":93, "y":"value_93"}, {"x":94, "y":"value_94"}, {"x":95, "y":"value_95"}, {"x":96, "y":"value_96"}, {"x":97, "y":"value_97"}, {"x":98, "y":"value_98"}, {"x":99, "y":"value_99"}, {"x":100, "y":"value_100"}, {"x":101, "y":"value_101"}, {"x":102, "y":"value_102"}, {"x":103, "y":"value_103"}, {"x":104, "y":"value_104"}, {"x":105, "y":"value_105"}, {"x":106, "y":"value_106"}, {"x":107, "y":"value_107"}, {"x":108, "y":"value_108"}, {"x":109, "y":"value_109"}, {"x":110, "y":"value_110"}, {"x":111, "y":"value_111"}, {"x":112, "y":"value_112"}, {"x":113, "y":"value_113"}, {"x":114, "y":"value_114"}, {"x":115, "y":"value_115"}, {"x":116, "y":"value_116"}, {"x":117, "y":"value_117"}, {"x":118, "y":"value_118"}, {"x":119, "y":"value_119"}, {"x":120, "y":"value_120"}, {"x":121, "y":"value_121"}, {"x":122, "y":"value_122"}, {"x":123, "y":"value_123"}, {"x":124, "y":"value_124"}, {"x":125, "y":"value_125"}, {"x":126, "y":"value_126"}, {"x":127, "y":"value_127"}, {"x":128, "y":"value_128"}, {"x":129, "y":"value_129"}, {"x":130, "y":"value_130"}, {"x":131, "y":"value_131"}, {"x":132, "y":"value_132"}, {"x":133, "y":"value_133"}, {"x":134, "y":"value_134"}, {"x":135, "y":"value_135"}, {"x":136, "y":"value_136"}, {"x":137, "y":"value_137"}, {"x":138, "y":"value_138"}, {"x":139, "y":"value_139"}, {"x":140, "y":"value_140"}, {"x":141, "y":"value_141"}, {"x":142, "y":"value_142"}, {"x":143, "y":"value_143"}, {"x":144, "y":"value_144"}, {"x":145, "y":"value_145"}, {"x":146, "y":"value_146"}, {"x":147, "y":"value_147"}, {"x":148, "y":"value_148"}, {"x":149, "y":"value_149"}, {"x":150, "y":"value_150"}, {"x":151, "y":"value_151"}, {"x":152, "y":"value_152"}, {"x":153, "y":"value_153"}, {"x":154, "y":"value_154"}, {"x":155, "y":"value_155"}, {"x":156, "y":"value_156"}, {"x":157, "y":"value_157"}, {"x":158, "y":"value_158"}, {"x":159, "y":"value_159"}, {"x":160, "y":"value_160"}, {"x":161, "y":"value_161"}, {"x":162, "y":"value_162"}, {"x":163, "y":"value_163"}, {"x":164, "y":"value_164"}, {"x":165, "y":"value_165"}, {"x":166, "y":"value_166"}, {"x":167, "y":"value_167"}, {"x":168, "y":"value_168"}, {"x":169, "y":"value_169"}, {"x":170, "y":"value_170"}, {"x":171, "y":"value_171"}, {"x":172, "y":"value_172"}, {"x":173, "y":"value_173"}, {"x":174, "y":"value_174"}, {"x":175, "y":"value_175"}, {"x":176, "y":"value_176"}, {"x":177, "y":"value_177"}, {"x":178, "y":"value_178"}, {"x":179, "y":"value_179"}, {"x":180, "y":"value_180"}, {"x":181, "y":"value_181"}, {"x":182, "y":"value_182"}, {"x":183, "y":"value_183"}, {"x":184, "y":"value_184"}, {"x":185, "y":"value_185"}, {"x":186, "y":"value_186"}, {"x":187, "y":"value_187"}, {"x":188, "y":"value_188"}, {"x":189, "y":"value_189"}, {"x":190, "y":"value_190"}, {"x":191, "y":"value_191"}, {"x":192, "y":"value_192"}, {"x":193, "y":"value_193"}, {"x":194, "y":"value_194"}, {"x":195, "y":"value_195"}, {"x":196, "y":"value_196"}, {"x":197, "y":"value_197"}, {"x":198, "y":"value_198"}, {"x":199, "y":"value_199"}, {"x":200, "y":"value_200"}, {"x":201, "y":"value_201"}, {"x":202, "y":"value_202"}, {"x":203, "y":"value_203"}, {"x":204, "y":"value_204"}, {"x":205, "y":"value_205"}, {"x":206, "y":"value_206"}, {"x":207, "y":"value_207"}, {"x":208, "y":"value_208"}, {"x":209, "y":"value_209"}, {"x":210, "y":"value_210"}, {"x":211, "y":"value_211"}, {"x":212, "y":"value_212"}, {"x":213, "y":"value_213"}, {"x":214, "y":"value_214"}, {"x":215, "y":"value_215"}, {"x":216, "y":"value_216"}, {"x":217, "y":"value_217"}, {"x":218, "y":"value_218"}, {"x":219, "y":"value_219"}, {"x":220, "y":"value_220"}, {"x":221, "y":"value_221"}, {"x":222, "y":"value_222"}, {"x":223, "y":"value_223"}, {"x":224, "y":"value_224"}, {"x":225, "y":"value_225"}, {"x":226, "y":"value_226"}, {"x":227, "y":"value_227"}, {"x":228, "y":"value_228"}, {"x":229, "y":"value_229"}, {"x":230, "y":"value_230"}, {"x":231, "y":"value_231"}, {"x":232, "y":"value_232"}, {"x":233, "y":"value_233"}, {"x":234, "y":"value_234"}, {"x":235, "y":"value_235"}, {"x":236, "y":"value_236"}, {"x":237, "y":"value_237"}, {"x":238, "y":"value_238"}, {"x":239, "y":"value_239"}, {"x":240, "y":"value_240"}, {"x":241, "y":"value_241"}, {"x":242, "y":"value_242"}, {"x":243, "y":"value_243"}, {"x":244, "y":"value_244"}, {"x":245, "y":"value_245"}, {"x":246, "y":"value_246"}, {"x":247, "y":"value_247"}, {"x":248, "y":"value_248"}, {"x":249, "y":"value_249"}, {"x":250, "y":"value_250"}, {"x":251, "y":"value_251"}, {"x":252, "y":"value_252"}, {"x":253, "y":"value_253"}, {"x":254, "y":"value_254"}, {"x":255, "y":"value_255"}, {"x":256, "y":"value_256"}, {"x":257, "y":"value_257"}, {"x":258, "y":"value_258"}, {"x":259, "y":"value_259"}, {"x":260, "y":"value_260"}, {"x":261, "y":"value_261"}, {"x":262, "y":"value_262"}, {"x":263, "y":"value_263"}, {"x":264, "y":"value_264"}, {"x":265, "y":"value_265"}, {"x":266, "y":"value_266"}, {"x":267, "y":"value_267"}, {"x":268, "y":"value_268"}, {"x":269, "y":"value_269"}, {"x":270, "y":"value_270"}, {"x":271, "y":"value_271"}, {"x":272, "y":"value_272"}, {"x":273, "y":"value_273"}, {"x":274, "y":"value_274"}, {"x":275, "y":"value_275"}, {"x":276, "y":"value_276"}, {"x":277, "y":"value_277"}, {"x":278, "y":"value_278"}, {"x":279, "y":"value_279"}, {"x":280, "y":"value_280"}, {"x":281, "y":"value_281"}, {"x":282, "y":"value_282"}, {"x":283, "y":"value_283"}, {"x":284, "y":"value_284"}, {"x":285, "y":"value_285"}, {"x":286, "y":"value_286"}, {"x":287, "y":"value_287"}, {"x":288, "y":"value_288"}, {"x":289, "y":"value_289"}, {"x":290, "y":"value_290"}, {"x":291, "y":"value_291"}, {"x":292, "y":"value_292"}, {"x":293, "y":"value_293"}, {"x":294, "y":"value_294"}, {"x":295, "y":"value_295"}, {"x":296, "y":"value_296"}, {"x":297, "y":"value_297"}, {"x":298, "y":"value_298"}, {"x":299, "y":"value_299"}, {"x":300, "y":"value_300"}, {"x":301, "y":"value_301"}, {"x":302, "y":"value_302"}, {"x":303, "y":"value_303"}, {"x":304, "y":"value_304"}, {"x":305, "y":"value_305"}, {"x":306, "y":"value_306"}, {"x":307, "y":"value_307"}, {"x":308, "y":"value_308"}, {"x":309, "y":"value_309"}, {"x":310, "y":"value_310"}, {"x":311, "y":"value_311"}, {"x":312, "y":"value_312"}, {"x":313, "y":"value_313"}, {"x":314, "y":"value_314"}, {"x":315, "y":"value_315"}, {"x":316, "y":"value_316"}, {"x":317, "y":"value_317"}, {"x":318, "y":"value_318"}, {"x":319, "y":"value_319"}, {"x":320, "y":"value_320"}, {"x":321, "y":"value_321"}, {"x":322, "y":"value_322"}, {"x":323, "y":"value_323"}, {"x":324, "y":"value_324"}, {"x":325, "y":"value_325"}, {"x":326, "y":"value_326"}, {"x":327, "y":"value_327"}, {"x":328, "y":"value_328"}, {"x":329, "y":"value_329"}, {"x":330, "y":"value_330"}, {"x":331, "y":"value_331"}, {"x":332, "y":"value_332"}, {"x":333, "y":"value_333"}, {"x":334, "y":"value_334"}, {"x":335, "y":"value_335"}, {"x":336, "y":"value_336"}, {"x":337, "y":"value_337"}, {"x":338, "y":"value_338"}, {"x":339, "y":"value_339"}, {"x":340, "y":"value_340"}, {"x":341, "y":"value_341"}, {"x":342, "y":"value_342"}, {"x":343, "y":"value_343"}, {"x":344, "y":"value_344"}, {"x":345, "y":"value_345"}, {"x":346, "y":"value_346"}, {"x":347, "y":"value_347"}, {"x":348, "y":"value_348"}, {"x":349, "y":"value_349"}, {"x":350, "y":"value_350"}, {"x":351, "y":"value_351"}, {"x":352, "y":"value_352"}, {"x":353, "y":"value_353"}, {"x":354, "y":"value_354"}, {"x":355, "y":"value_355"}, {"x":356, "y":"value_356"}, {"x":357, "y":"value_357"}, {"x":358, "y":"value_358"}, {"x":359, "y":"value_359"}, {"x":360, "y":"value_360"}, {"x":361, "y":"value_361"}, {"x":362, "y":"value_362"}, {"x":363, "y":"value_363"}, {"x":364, "y":"value_364"}, {"x":365, "y":"value_365"}, {"x":366, "y":"value_366"}, {"x":367, "y":"value_367"}, {"x":368, "y":"value_368"}, {"x":369, "y":"value_369"}, {"x":370, "y":"value_370"}, {"x":371, "y":"value_371"}, {"x":372, "y":"value_372"}, {"x":373, "y":"value_373"}, {"x":374, "y":"value_374"}, {"x":375, "y":"value_375"}, {"x":376, "y":"value_376"}, {"x":377, "y":"value_377"}, {"x":378, "y":"value_378"}, {"x":379, "y":"value_379"}, {"x":380, "y":"value_380"}, {"x":381, "y":"value_381"}, {"x":382, "y":"value_382"}, {"x":383, "y":"value_383"}, {"x":384, "y":"value_384"}, {"x":385, "y":"value_385"}, {"x":386, "y":"value_386"}, {"x":387, "y":"value_387"}, {"x":388, "y":"value_388"}, {"x":389, "y":"value_389"}, {"x":390, "y":"value_390"}, {"x":391, "y":"value_391"}, {"x":392, "y":"value_392"}, {"x":393, "y":"value_393"}, {"x":394, "y":"value_394"}, {"x":395, "y":"value_395"}, {"x":396, "y":"value_396"}, {"x":397, "y":"value_397"}, {"x":398, "y":"value_398"}, {"x":399, "y":"value_399"}, {"x":400, "y":"value_400"}, {"x":401, "y":"value_401"}, {"x":402, "y":"value_402"}, {"x":403, "y":"value_403"}, {"x":404, "y":"value_404"}, {"x":405, "y":"value_405"}, {"x":406, "y":"value_406"}, {"x":407, "y":"value_407"}, {"x":408, "y":"value_408"}, {"x":409, "y":"value_409"}, {"x":410, "y":"value_410"}, {"x":411, "y":"value_411"}, {"x":412, "y":"value_412"}, {"x":413, "y":"value_413"}, {"x":414, "y":"value_414"}, {"x":415, "y":"value_415"}, {"x":416, "y":"value_416"}, {"x":417, "y":"value_417"}, {"x":418, "y":"value_418"}, {"x":419, "y":"value_419"}, {"x":420, "y":"value_420"}, {"x":421, "y":"value_421"}, {"x":422, "y":"value_422"}, {"x":423, "y":"value_423"}, {"x":424, "y":"value_424"}, {"x":425, "y":"value_425"}, {"x":426, "y":"value_426"}, {"x":427, "y":"value_427"}, {"x":428, "y":"value_428"}, {"x":429, "y":"value_429"}, {"x":430, "y":"value_430"}, {"x":431, "y":"value_431"}, {"x":432, "y":"value_432"}, {"x":433, "y":"value_433"}, {"x":434, "y":"value_434"}, {"x":435, "y":"value_435"}, {"x":436, "y":"value_436"}, {"x":437, "y":"value_437"}, {"x":438, "y":"value_438"}, {"x":439, "y":"value_439"}, {"x":440, "y":"value_440"}, {"x":441, "y":"value_441"}, {"x":442, "y":"value_442"}, {"x":443, "y":"value_443"}, {"x":444, "y":"value_444"}, {"x":445, "y":"value_445"}, {"x":446, "y":"value_446"}, {"x":447, "y":"value_447"}, {"x":448, "y":"value_448"}, {"x":449, "y":"value_449"}, {"x":450, "y":"value_450"}, {"x":451, "y":"value_451"}, {"x":452, "y":"value_452"}, {"x":453, "y":"value_453"}, {"x":454, "y":"value_454"}, {"x":455, "y":"value_455"}, {"x":456, "y":"value_456"}, {"x":457, "y":"value_457"}, {"x":458, "y":"value_458"}, {"x":459, "y":"value_459"}, {"x":460, "y":"value_460"}, {"x":461, "y":"value_461"}, {"x":462, "y":"value_462"}, {"x":463, "y":"value_463"}, {"x":464, "y":"value_464"}, {"x":465, "y":"value_465"}, {"x":466, "y":"value_466"}, {"x":467, "y":"value_467"}, {"x":468, "y":"value_468"}, {"x":469, "y":"value_469"}, {"x":470, "y":"value_470"}, {"x":471, "y":"value_471"}, {"x":472, "y":"value_472"}, {"x":473, "y":"value_473"}, {"x":474, "y":"value_474"}, {"x":475, "y":"value_475"}, {"x":476, "y":"value_476"}, {"x":477, "y":"value_477"}, {"x":478, "y":"value_478"}, {"x":479, "y":"value_479"}, {"x":480, "y":"value_480"}, {"x":481, "y":"value_481"}, {"x":482, "y":"value_482"}, {"x":483, "y":"value_483"}, {"x":484, "y":"value_484"}, {"x":485, "y":"value_485"}, {"x":486, "y":"value_486"}, {"x":487, "y":"value_487"}, {"x":488, "y":"value_488"}, {"x":489, "y":"value_489"}, {"x":490, "y":"value_490"}, {"x":491, "y":"value_491"}, {"x":492, "y":"value_492"}, {"x":493, "y":"value_493"}, {"x":494, "y":"value_494"}, {"x":495, "y":"value_495"}, {"x":496, "y":"value_496"}, {"x":497, "y":"value_497"}, {"x":498, "y":"value_498"}, {"x":499, "y":"value_499"}] 500 +3 [{"x":0, "y":"big_0"}, {"x":1, "y":"big_1"}, {"x":2, "y":"big_2"}, {"x":3, "y":"big_3"}, {"x":4, "y":"big_4"}, {"x":5, "y":"big_5"}, {"x":6, "y":"big_6"}, {"x":7, "y":"big_7"}, {"x":8, "y":"big_8"}, {"x":9, "y":"big_9"}, {"x":10, "y":"big_10"}, {"x":11, "y":"big_11"}, {"x":12, "y":"big_12"}, {"x":13, "y":"big_13"}, {"x":14, "y":"big_14"}, {"x":15, "y":"big_15"}, {"x":16, "y":"big_16"}, {"x":17, "y":"big_17"}, {"x":18, "y":"big_18"}, {"x":19, "y":"big_19"}, {"x":20, "y":"big_20"}, {"x":21, "y":"big_21"}, {"x":22, "y":"big_22"}, {"x":23, "y":"big_23"}, {"x":24, "y":"big_24"}, {"x":25, "y":"big_25"}, {"x":26, "y":"big_26"}, {"x":27, "y":"big_27"}, {"x":28, "y":"big_28"}, {"x":29, "y":"big_29"}, {"x":30, "y":"big_30"}, {"x":31, "y":"big_31"}, {"x":32, "y":"big_32"}, {"x":33, "y":"big_33"}, {"x":34, "y":"big_34"}, {"x":35, "y":"big_35"}, {"x":36, "y":"big_36"}, {"x":37, "y":"big_37"}, {"x":38, "y":"big_38"}, {"x":39, "y":"big_39"}, {"x":40, "y":"big_40"}, {"x":41, "y":"big_41"}, {"x":42, "y":"big_42"}, {"x":43, "y":"big_43"}, {"x":44, "y":"big_44"}, {"x":45, "y":"big_45"}, {"x":46, "y":"big_46"}, {"x":47, "y":"big_47"}, {"x":48, "y":"big_48"}, {"x":49, "y":"big_49"}, {"x":50, "y":"big_50"}, {"x":51, "y":"big_51"}, {"x":52, "y":"big_52"}, {"x":53, "y":"big_53"}, {"x":54, "y":"big_54"}, {"x":55, "y":"big_55"}, {"x":56, "y":"big_56"}, {"x":57, "y":"big_57"}, {"x":58, "y":"big_58"}, {"x":59, "y":"big_59"}, {"x":60, "y":"big_60"}, {"x":61, "y":"big_61"}, {"x":62, "y":"big_62"}, {"x":63, "y":"big_63"}, {"x":64, "y":"big_64"}, {"x":65, "y":"big_65"}, {"x":66, "y":"big_66"}, {"x":67, "y":"big_67"}, {"x":68, "y":"big_68"}, {"x":69, "y":"big_69"}, {"x":70, "y":"big_70"}, {"x":71, "y":"big_71"}, {"x":72, "y":"big_72"}, {"x":73, "y":"big_73"}, {"x":74, "y":"big_74"}, {"x":75, "y":"big_75"}, {"x":76, "y":"big_76"}, {"x":77, "y":"big_77"}, {"x":78, "y":"big_78"}, {"x":79, "y":"big_79"}, {"x":80, "y":"big_80"}, {"x":81, "y":"big_81"}, {"x":82, "y":"big_82"}, {"x":83, "y":"big_83"}, {"x":84, "y":"big_84"}, {"x":85, "y":"big_85"}, {"x":86, "y":"big_86"}, {"x":87, "y":"big_87"}, {"x":88, "y":"big_88"}, {"x":89, "y":"big_89"}, {"x":90, "y":"big_90"}, {"x":91, "y":"big_91"}, {"x":92, "y":"big_92"}, {"x":93, "y":"big_93"}, {"x":94, "y":"big_94"}, {"x":95, "y":"big_95"}, {"x":96, "y":"big_96"}, {"x":97, "y":"big_97"}, {"x":98, "y":"big_98"}, {"x":99, "y":"big_99"}, {"x":100, "y":"big_100"}, {"x":101, "y":"big_101"}, {"x":102, "y":"big_102"}, {"x":103, "y":"big_103"}, {"x":104, "y":"big_104"}, {"x":105, "y":"big_105"}, {"x":106, "y":"big_106"}, {"x":107, "y":"big_107"}, {"x":108, "y":"big_108"}, {"x":109, "y":"big_109"}, {"x":110, "y":"big_110"}, {"x":111, "y":"big_111"}, {"x":112, "y":"big_112"}, {"x":113, "y":"big_113"}, {"x":114, "y":"big_114"}, {"x":115, "y":"big_115"}, {"x":116, "y":"big_116"}, {"x":117, "y":"big_117"}, {"x":118, "y":"big_118"}, {"x":119, "y":"big_119"}, {"x":120, "y":"big_120"}, {"x":121, "y":"big_121"}, {"x":122, "y":"big_122"}, {"x":123, "y":"big_123"}, {"x":124, "y":"big_124"}, {"x":125, "y":"big_125"}, {"x":126, "y":"big_126"}, {"x":127, "y":"big_127"}, {"x":128, "y":"big_128"}, {"x":129, "y":"big_129"}, {"x":130, "y":"big_130"}, {"x":131, "y":"big_131"}, {"x":132, "y":"big_132"}, {"x":133, "y":"big_133"}, {"x":134, "y":"big_134"}, {"x":135, "y":"big_135"}, {"x":136, "y":"big_136"}, {"x":137, "y":"big_137"}, {"x":138, "y":"big_138"}, {"x":139, "y":"big_139"}, {"x":140, "y":"big_140"}, {"x":141, "y":"big_141"}, {"x":142, "y":"big_142"}, {"x":143, "y":"big_143"}, {"x":144, "y":"big_144"}, {"x":145, "y":"big_145"}, {"x":146, "y":"big_146"}, {"x":147, "y":"big_147"}, {"x":148, "y":"big_148"}, {"x":149, "y":"big_149"}, {"x":150, "y":"big_150"}, {"x":151, "y":"big_151"}, {"x":152, "y":"big_152"}, {"x":153, "y":"big_153"}, {"x":154, "y":"big_154"}, {"x":155, "y":"big_155"}, {"x":156, "y":"big_156"}, {"x":157, "y":"big_157"}, {"x":158, "y":"big_158"}, {"x":159, "y":"big_159"}, {"x":160, "y":"big_160"}, {"x":161, "y":"big_161"}, {"x":162, "y":"big_162"}, {"x":163, "y":"big_163"}, {"x":164, "y":"big_164"}, {"x":165, "y":"big_165"}, {"x":166, "y":"big_166"}, {"x":167, "y":"big_167"}, {"x":168, "y":"big_168"}, {"x":169, "y":"big_169"}, {"x":170, "y":"big_170"}, {"x":171, "y":"big_171"}, {"x":172, "y":"big_172"}, {"x":173, "y":"big_173"}, {"x":174, "y":"big_174"}, {"x":175, "y":"big_175"}, {"x":176, "y":"big_176"}, {"x":177, "y":"big_177"}, {"x":178, "y":"big_178"}, {"x":179, "y":"big_179"}, {"x":180, "y":"big_180"}, {"x":181, "y":"big_181"}, {"x":182, "y":"big_182"}, {"x":183, "y":"big_183"}, {"x":184, "y":"big_184"}, {"x":185, "y":"big_185"}, {"x":186, "y":"big_186"}, {"x":187, "y":"big_187"}, {"x":188, "y":"big_188"}, {"x":189, "y":"big_189"}, {"x":190, "y":"big_190"}, {"x":191, "y":"big_191"}, {"x":192, "y":"big_192"}, {"x":193, "y":"big_193"}, {"x":194, "y":"big_194"}, {"x":195, "y":"big_195"}, {"x":196, "y":"big_196"}, {"x":197, "y":"big_197"}, {"x":198, "y":"big_198"}, {"x":199, "y":"big_199"}, {"x":200, "y":"big_200"}, {"x":201, "y":"big_201"}, {"x":202, "y":"big_202"}, {"x":203, "y":"big_203"}, {"x":204, "y":"big_204"}, {"x":205, "y":"big_205"}, {"x":206, "y":"big_206"}, {"x":207, "y":"big_207"}, {"x":208, "y":"big_208"}, {"x":209, "y":"big_209"}, {"x":210, "y":"big_210"}, {"x":211, "y":"big_211"}, {"x":212, "y":"big_212"}, {"x":213, "y":"big_213"}, {"x":214, "y":"big_214"}, {"x":215, "y":"big_215"}, {"x":216, "y":"big_216"}, {"x":217, "y":"big_217"}, {"x":218, "y":"big_218"}, {"x":219, "y":"big_219"}, {"x":220, "y":"big_220"}, {"x":221, "y":"big_221"}, {"x":222, "y":"big_222"}, {"x":223, "y":"big_223"}, {"x":224, "y":"big_224"}, {"x":225, "y":"big_225"}, {"x":226, "y":"big_226"}, {"x":227, "y":"big_227"}, {"x":228, "y":"big_228"}, {"x":229, "y":"big_229"}, {"x":230, "y":"big_230"}, {"x":231, "y":"big_231"}, {"x":232, "y":"big_232"}, {"x":233, "y":"big_233"}, {"x":234, "y":"big_234"}, {"x":235, "y":"big_235"}, {"x":236, "y":"big_236"}, {"x":237, "y":"big_237"}, {"x":238, "y":"big_238"}, {"x":239, "y":"big_239"}, {"x":240, "y":"big_240"}, {"x":241, "y":"big_241"}, {"x":242, "y":"big_242"}, {"x":243, "y":"big_243"}, {"x":244, "y":"big_244"}, {"x":245, "y":"big_245"}, {"x":246, "y":"big_246"}, {"x":247, "y":"big_247"}, {"x":248, "y":"big_248"}, {"x":249, "y":"big_249"}, {"x":250, "y":"big_250"}, {"x":251, "y":"big_251"}, {"x":252, "y":"big_252"}, {"x":253, "y":"big_253"}, {"x":254, "y":"big_254"}, {"x":255, "y":"big_255"}, {"x":256, "y":"big_256"}, {"x":257, "y":"big_257"}, {"x":258, "y":"big_258"}, {"x":259, "y":"big_259"}, {"x":260, "y":"big_260"}, {"x":261, "y":"big_261"}, {"x":262, "y":"big_262"}, {"x":263, "y":"big_263"}, {"x":264, "y":"big_264"}, {"x":265, "y":"big_265"}, {"x":266, "y":"big_266"}, {"x":267, "y":"big_267"}, {"x":268, "y":"big_268"}, {"x":269, "y":"big_269"}, {"x":270, "y":"big_270"}, {"x":271, "y":"big_271"}, {"x":272, "y":"big_272"}, {"x":273, "y":"big_273"}, {"x":274, "y":"big_274"}, {"x":275, "y":"big_275"}, {"x":276, "y":"big_276"}, {"x":277, "y":"big_277"}, {"x":278, "y":"big_278"}, {"x":279, "y":"big_279"}, {"x":280, "y":"big_280"}, {"x":281, "y":"big_281"}, {"x":282, "y":"big_282"}, {"x":283, "y":"big_283"}, {"x":284, "y":"big_284"}, {"x":285, "y":"big_285"}, {"x":286, "y":"big_286"}, {"x":287, "y":"big_287"}, {"x":288, "y":"big_288"}, {"x":289, "y":"big_289"}, {"x":290, "y":"big_290"}, {"x":291, "y":"big_291"}, {"x":292, "y":"big_292"}, {"x":293, "y":"big_293"}, {"x":294, "y":"big_294"}, {"x":295, "y":"big_295"}, {"x":296, "y":"big_296"}, {"x":297, "y":"big_297"}, {"x":298, "y":"big_298"}, {"x":299, "y":"big_299"}, {"x":300, "y":"big_300"}, {"x":301, "y":"big_301"}, {"x":302, "y":"big_302"}, {"x":303, "y":"big_303"}, {"x":304, "y":"big_304"}, {"x":305, "y":"big_305"}, {"x":306, "y":"big_306"}, {"x":307, "y":"big_307"}, {"x":308, "y":"big_308"}, {"x":309, "y":"big_309"}, {"x":310, "y":"big_310"}, {"x":311, "y":"big_311"}, {"x":312, "y":"big_312"}, {"x":313, "y":"big_313"}, {"x":314, "y":"big_314"}, {"x":315, "y":"big_315"}, {"x":316, "y":"big_316"}, {"x":317, "y":"big_317"}, {"x":318, "y":"big_318"}, {"x":319, "y":"big_319"}, {"x":320, "y":"big_320"}, {"x":321, "y":"big_321"}, {"x":322, "y":"big_322"}, {"x":323, "y":"big_323"}, {"x":324, "y":"big_324"}, {"x":325, "y":"big_325"}, {"x":326, "y":"big_326"}, {"x":327, "y":"big_327"}, {"x":328, "y":"big_328"}, {"x":329, "y":"big_329"}, {"x":330, "y":"big_330"}, {"x":331, "y":"big_331"}, {"x":332, "y":"big_332"}, {"x":333, "y":"big_333"}, {"x":334, "y":"big_334"}, {"x":335, "y":"big_335"}, {"x":336, "y":"big_336"}, {"x":337, "y":"big_337"}, {"x":338, "y":"big_338"}, {"x":339, "y":"big_339"}, {"x":340, "y":"big_340"}, {"x":341, "y":"big_341"}, {"x":342, "y":"big_342"}, {"x":343, "y":"big_343"}, {"x":344, "y":"big_344"}, {"x":345, "y":"big_345"}, {"x":346, "y":"big_346"}, {"x":347, "y":"big_347"}, {"x":348, "y":"big_348"}, {"x":349, "y":"big_349"}, {"x":350, "y":"big_350"}, {"x":351, "y":"big_351"}, {"x":352, "y":"big_352"}, {"x":353, "y":"big_353"}, {"x":354, "y":"big_354"}, {"x":355, "y":"big_355"}, {"x":356, "y":"big_356"}, {"x":357, "y":"big_357"}, {"x":358, "y":"big_358"}, {"x":359, "y":"big_359"}, {"x":360, "y":"big_360"}, {"x":361, "y":"big_361"}, {"x":362, "y":"big_362"}, {"x":363, "y":"big_363"}, {"x":364, "y":"big_364"}, {"x":365, "y":"big_365"}, {"x":366, "y":"big_366"}, {"x":367, "y":"big_367"}, {"x":368, "y":"big_368"}, {"x":369, "y":"big_369"}, {"x":370, "y":"big_370"}, {"x":371, "y":"big_371"}, {"x":372, "y":"big_372"}, {"x":373, "y":"big_373"}, {"x":374, "y":"big_374"}, {"x":375, "y":"big_375"}, {"x":376, "y":"big_376"}, {"x":377, "y":"big_377"}, {"x":378, "y":"big_378"}, {"x":379, "y":"big_379"}, {"x":380, "y":"big_380"}, {"x":381, "y":"big_381"}, {"x":382, "y":"big_382"}, {"x":383, "y":"big_383"}, {"x":384, "y":"big_384"}, {"x":385, "y":"big_385"}, {"x":386, "y":"big_386"}, {"x":387, "y":"big_387"}, {"x":388, "y":"big_388"}, {"x":389, "y":"big_389"}, {"x":390, "y":"big_390"}, {"x":391, "y":"big_391"}, {"x":392, "y":"big_392"}, {"x":393, "y":"big_393"}, {"x":394, "y":"big_394"}, {"x":395, "y":"big_395"}, {"x":396, "y":"big_396"}, {"x":397, "y":"big_397"}, {"x":398, "y":"big_398"}, {"x":399, "y":"big_399"}, {"x":400, "y":"big_400"}, {"x":401, "y":"big_401"}, {"x":402, "y":"big_402"}, {"x":403, "y":"big_403"}, {"x":404, "y":"big_404"}, {"x":405, "y":"big_405"}, {"x":406, "y":"big_406"}, {"x":407, "y":"big_407"}, {"x":408, "y":"big_408"}, {"x":409, "y":"big_409"}, {"x":410, "y":"big_410"}, {"x":411, "y":"big_411"}, {"x":412, "y":"big_412"}, {"x":413, "y":"big_413"}, {"x":414, "y":"big_414"}, {"x":415, "y":"big_415"}, {"x":416, "y":"big_416"}, {"x":417, "y":"big_417"}, {"x":418, "y":"big_418"}, {"x":419, "y":"big_419"}, {"x":420, "y":"big_420"}, {"x":421, "y":"big_421"}, {"x":422, "y":"big_422"}, {"x":423, "y":"big_423"}, {"x":424, "y":"big_424"}, {"x":425, "y":"big_425"}, {"x":426, "y":"big_426"}, {"x":427, "y":"big_427"}, {"x":428, "y":"big_428"}, {"x":429, "y":"big_429"}, {"x":430, "y":"big_430"}, {"x":431, "y":"big_431"}, {"x":432, "y":"big_432"}, {"x":433, "y":"big_433"}, {"x":434, "y":"big_434"}, {"x":435, "y":"big_435"}, {"x":436, "y":"big_436"}, {"x":437, "y":"big_437"}, {"x":438, "y":"big_438"}, {"x":439, "y":"big_439"}, {"x":440, "y":"big_440"}, {"x":441, "y":"big_441"}, {"x":442, "y":"big_442"}, {"x":443, "y":"big_443"}, {"x":444, "y":"big_444"}, {"x":445, "y":"big_445"}, {"x":446, "y":"big_446"}, {"x":447, "y":"big_447"}, {"x":448, "y":"big_448"}, {"x":449, "y":"big_449"}, {"x":450, "y":"big_450"}, {"x":451, "y":"big_451"}, {"x":452, "y":"big_452"}, {"x":453, "y":"big_453"}, {"x":454, "y":"big_454"}, {"x":455, "y":"big_455"}, {"x":456, "y":"big_456"}, {"x":457, "y":"big_457"}, {"x":458, "y":"big_458"}, {"x":459, "y":"big_459"}, {"x":460, "y":"big_460"}, {"x":461, "y":"big_461"}, {"x":462, "y":"big_462"}, {"x":463, "y":"big_463"}, {"x":464, "y":"big_464"}, {"x":465, "y":"big_465"}, {"x":466, "y":"big_466"}, {"x":467, "y":"big_467"}, {"x":468, "y":"big_468"}, {"x":469, "y":"big_469"}, {"x":470, "y":"big_470"}, {"x":471, "y":"big_471"}, {"x":472, "y":"big_472"}, {"x":473, "y":"big_473"}, {"x":474, "y":"big_474"}, {"x":475, "y":"big_475"}, {"x":476, "y":"big_476"}, {"x":477, "y":"big_477"}, {"x":478, "y":"big_478"}, {"x":479, "y":"big_479"}, {"x":480, "y":"big_480"}, {"x":481, "y":"big_481"}, {"x":482, "y":"big_482"}, {"x":483, "y":"big_483"}, {"x":484, "y":"big_484"}, {"x":485, "y":"big_485"}, {"x":486, "y":"big_486"}, {"x":487, "y":"big_487"}, {"x":488, "y":"big_488"}, {"x":489, "y":"big_489"}, {"x":490, "y":"big_490"}, {"x":491, "y":"big_491"}, {"x":492, "y":"big_492"}, {"x":493, "y":"big_493"}, {"x":494, "y":"big_494"}, {"x":495, "y":"big_495"}, {"x":496, "y":"big_496"}, {"x":497, "y":"big_497"}, {"x":498, "y":"big_498"}, {"x":499, "y":"big_499"}] 500 + +-- !nested_cross_page2_parquet_q5 -- +1 101 value_101 +1 102 value_102 +1 103 value_103 +1 104 value_104 +1 105 value_105 +1 106 value_106 +1 107 value_107 +1 108 value_108 +1 109 value_109 +1 110 value_110 +1 111 value_111 +1 112 value_112 +1 113 value_113 +1 114 value_114 +1 115 value_115 +1 116 value_116 +1 117 value_117 +1 118 value_118 +1 119 value_119 +1 120 value_120 +1 121 value_121 +1 122 value_122 +1 123 value_123 +1 124 value_124 +1 125 value_125 +1 126 value_126 +1 127 value_127 +1 128 value_128 +1 129 value_129 +1 130 value_130 +1 131 value_131 +1 132 value_132 +1 133 value_133 +1 134 value_134 +1 135 value_135 +1 136 value_136 +1 137 value_137 +1 138 value_138 +1 139 value_139 +1 140 value_140 +1 141 value_141 +1 142 value_142 +1 143 value_143 +1 144 value_144 +1 145 value_145 +1 146 value_146 +1 147 value_147 +1 148 value_148 +1 149 value_149 +1 150 value_150 +1 151 value_151 +1 152 value_152 +1 153 value_153 +1 154 value_154 +1 155 value_155 +1 156 value_156 +1 157 value_157 +1 158 value_158 +1 159 value_159 +1 160 value_160 +1 161 value_161 +1 162 value_162 +1 163 value_163 +1 164 value_164 +1 165 value_165 +1 166 value_166 +1 167 value_167 +1 168 value_168 +1 169 value_169 +1 170 value_170 +1 171 value_171 +1 172 value_172 +1 173 value_173 +1 174 value_174 +1 175 value_175 +1 176 value_176 +1 177 value_177 +1 178 value_178 +1 179 value_179 +1 180 value_180 +1 181 value_181 +1 182 value_182 +1 183 value_183 +1 184 value_184 +1 185 value_185 +1 186 value_186 +1 187 value_187 +1 188 value_188 +1 189 value_189 +1 190 value_190 +1 191 value_191 +1 192 value_192 +1 193 value_193 +1 194 value_194 +1 195 value_195 +1 196 value_196 +1 197 value_197 +1 198 value_198 +1 199 value_199 +1 200 value_200 +1 201 value_201 +1 202 value_202 +1 203 value_203 +1 204 value_204 +1 205 value_205 +1 206 value_206 +1 207 value_207 +1 208 value_208 +1 209 value_209 +1 210 value_210 +1 211 value_211 +1 212 value_212 +1 213 value_213 +1 214 value_214 +1 215 value_215 +1 216 value_216 +1 217 value_217 +1 218 value_218 +1 219 value_219 +1 220 value_220 +1 221 value_221 +1 222 value_222 +1 223 value_223 +1 224 value_224 +1 225 value_225 +1 226 value_226 +1 227 value_227 +1 228 value_228 +1 229 value_229 +1 230 value_230 +1 231 value_231 +1 232 value_232 +1 233 value_233 +1 234 value_234 +1 235 value_235 +1 236 value_236 +1 237 value_237 +1 238 value_238 +1 239 value_239 +1 240 value_240 +1 241 value_241 +1 242 value_242 +1 243 value_243 +1 244 value_244 +1 245 value_245 +1 246 value_246 +1 247 value_247 +1 248 value_248 +1 249 value_249 +1 250 value_250 +1 251 value_251 +1 252 value_252 +1 253 value_253 +1 254 value_254 +1 255 value_255 +1 256 value_256 +1 257 value_257 +1 258 value_258 +1 259 value_259 +1 260 value_260 +1 261 value_261 +1 262 value_262 +1 263 value_263 +1 264 value_264 +1 265 value_265 +1 266 value_266 +1 267 value_267 +1 268 value_268 +1 269 value_269 +1 270 value_270 +1 271 value_271 +1 272 value_272 +1 273 value_273 +1 274 value_274 +1 275 value_275 +1 276 value_276 +1 277 value_277 +1 278 value_278 +1 279 value_279 +1 280 value_280 +1 281 value_281 +1 282 value_282 +1 283 value_283 +1 284 value_284 +1 285 value_285 +1 286 value_286 +1 287 value_287 +1 288 value_288 +1 289 value_289 +1 290 value_290 +1 291 value_291 +1 292 value_292 +1 293 value_293 +1 294 value_294 +1 295 value_295 +1 296 value_296 +1 297 value_297 +1 298 value_298 +1 299 value_299 +1 300 value_300 +1 301 value_301 +1 302 value_302 +1 303 value_303 +1 304 value_304 +1 305 value_305 +1 306 value_306 +1 307 value_307 +1 308 value_308 +1 309 value_309 +1 310 value_310 +1 311 value_311 +1 312 value_312 +1 313 value_313 +1 314 value_314 +1 315 value_315 +1 316 value_316 +1 317 value_317 +1 318 value_318 +1 319 value_319 +1 320 value_320 +1 321 value_321 +1 322 value_322 +1 323 value_323 +1 324 value_324 +1 325 value_325 +1 326 value_326 +1 327 value_327 +1 328 value_328 +1 329 value_329 +1 330 value_330 +1 331 value_331 +1 332 value_332 +1 333 value_333 +1 334 value_334 +1 335 value_335 +1 336 value_336 +1 337 value_337 +1 338 value_338 +1 339 value_339 +1 340 value_340 +1 341 value_341 +1 342 value_342 +1 343 value_343 +1 344 value_344 +1 345 value_345 +1 346 value_346 +1 347 value_347 +1 348 value_348 +1 349 value_349 +1 350 value_350 +1 351 value_351 +1 352 value_352 +1 353 value_353 +1 354 value_354 +1 355 value_355 +1 356 value_356 +1 357 value_357 +1 358 value_358 +1 359 value_359 +1 360 value_360 +1 361 value_361 +1 362 value_362 +1 363 value_363 +1 364 value_364 +1 365 value_365 +1 366 value_366 +1 367 value_367 +1 368 value_368 +1 369 value_369 +1 370 value_370 +1 371 value_371 +1 372 value_372 +1 373 value_373 +1 374 value_374 +1 375 value_375 +1 376 value_376 +1 377 value_377 +1 378 value_378 +1 379 value_379 +1 380 value_380 +1 381 value_381 +1 382 value_382 +1 383 value_383 +1 384 value_384 +1 385 value_385 +1 386 value_386 +1 387 value_387 +1 388 value_388 +1 389 value_389 +1 390 value_390 +1 391 value_391 +1 392 value_392 +1 393 value_393 +1 394 value_394 +1 395 value_395 +1 396 value_396 +1 397 value_397 +1 398 value_398 +1 399 value_399 +1 400 value_400 +1 401 value_401 +1 402 value_402 +1 403 value_403 +1 404 value_404 +1 405 value_405 +1 406 value_406 +1 407 value_407 +1 408 value_408 +1 409 value_409 +1 410 value_410 +1 411 value_411 +1 412 value_412 +1 413 value_413 +1 414 value_414 +1 415 value_415 +1 416 value_416 +1 417 value_417 +1 418 value_418 +1 419 value_419 +1 420 value_420 +1 421 value_421 +1 422 value_422 +1 423 value_423 +1 424 value_424 +1 425 value_425 +1 426 value_426 +1 427 value_427 +1 428 value_428 +1 429 value_429 +1 430 value_430 +1 431 value_431 +1 432 value_432 +1 433 value_433 +1 434 value_434 +1 435 value_435 +1 436 value_436 +1 437 value_437 +1 438 value_438 +1 439 value_439 +1 440 value_440 +1 441 value_441 +1 442 value_442 +1 443 value_443 +1 444 value_444 +1 445 value_445 +1 446 value_446 +1 447 value_447 +1 448 value_448 +1 449 value_449 +1 450 value_450 +1 451 value_451 +1 452 value_452 +1 453 value_453 +1 454 value_454 +1 455 value_455 +1 456 value_456 +1 457 value_457 +1 458 value_458 +1 459 value_459 +1 460 value_460 +1 461 value_461 +1 462 value_462 +1 463 value_463 +1 464 value_464 +1 465 value_465 +1 466 value_466 +1 467 value_467 +1 468 value_468 +1 469 value_469 +1 470 value_470 +1 471 value_471 +1 472 value_472 +1 473 value_473 +1 474 value_474 +1 475 value_475 +1 476 value_476 +1 477 value_477 +1 478 value_478 +1 479 value_479 +1 480 value_480 +1 481 value_481 +1 482 value_482 +1 483 value_483 +1 484 value_484 +1 485 value_485 +1 486 value_486 +1 487 value_487 +1 488 value_488 +1 489 value_489 +1 490 value_490 +1 491 value_491 +1 492 value_492 +1 493 value_493 +1 494 value_494 +1 495 value_495 +1 496 value_496 +1 497 value_497 +1 498 value_498 +1 499 value_499 + +-- !nested_cross_page2_parquet_q6 -- +2 {"small_key":[1, 2, 3]} 1 + +-- !nested_cross_page3_parquet_q1 -- +[1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5] + +-- !nested_cross_page3_parquet_q2 -- + +-- !nested_cross_page3_parquet_q3 -- +[6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10] + +-- !nested_cross_page3_parquet_q4 -- +\N \N +1 1000 +3 1000 + +-- !nested_cross_page3_parquet_q5 -- +\N \N \N +1 1 3 +3 6 8 + +-- !nested_cross_page3_parquet_q6 -- +1 [1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5] +3 [6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10] + +-- !nested_cross_page3_parquet_q7 -- +1 [1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5] + +-- !nested_cross_page3_parquet_q8 -- + +-- !nested_cross_page3_parquet_q9 -- +\N \N \N +1 1 5 +3 6 10 + +-- !nested_cross_page3_parquet_q10 -- +1 [1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5, 1, null, 3, 4, 5] +3 [6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10, 6, null, 8, null, 10] + diff --git a/regression-test/suites/external_table_p0/hive/test_parquet_nested_types.groovy b/regression-test/suites/external_table_p0/hive/test_parquet_nested_types.groovy new file mode 100644 index 00000000000000..d94f909142e94d --- /dev/null +++ b/regression-test/suites/external_table_p0/hive/test_parquet_nested_types.groovy @@ -0,0 +1,209 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_parquet_nested_types", "p0,external,hive,external_docker,external_docker_hive") { + String enabled = context.config.otherConfigs.get("enableHiveTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable Hive test.") + return; + } + + for (String hivePrefix : ["hive2", "hive3"]) { + String hms_port = context.config.otherConfigs.get(hivePrefix + "HmsPort") + String catalog_name = "${hivePrefix}_test_parquet_nested_types" + String externalEnvIp = context.config.otherConfigs.get("externalEnvIp") + + sql """drop catalog if exists ${catalog_name}""" + sql """create catalog if not exists ${catalog_name} properties ( + "type"="hms", + 'hive.metastore.uris' = 'thrift://${externalEnvIp}:${hms_port}' + );""" + logger.info("catalog " + catalog_name + " created") + sql """switch ${catalog_name};""" + logger.info("switched to catalog " + catalog_name) + + sql """ use multi_catalog """ + + order_qt_nested_cross_page1_parquet_q1 """select array_col from nested_cross_page1_parquet where id = 1""" + + order_qt_nested_cross_page1_parquet_q2 """select array_col from nested_cross_page1_parquet where id = 2""" + + order_qt_nested_cross_page1_parquet_q3 """select array_col from nested_cross_page1_parquet where id = 3""" + + order_qt_nested_cross_page1_parquet_q4 """ + SELECT id, array_size(array_col) as arr_size + FROM nested_cross_page1_parquet + ORDER BY id + """ + + order_qt_nested_cross_page1_parquet_q5 """ + SELECT id, array_col[1] as first_elem, array_col[3] as third_elem + FROM nested_cross_page1_parquet + ORDER BY id + """ + + order_qt_nested_cross_page1_parquet_q6 """ + SELECT id, array_col + FROM nested_cross_page1_parquet + WHERE array_size(array_col) > 100 + ORDER BY id + """ + + order_qt_nested_cross_page1_parquet_q7 """ + SELECT id, array_col + FROM nested_cross_page1_parquet + WHERE array_contains(array_col, 1) + ORDER BY id + """ + + order_qt_nested_cross_page1_parquet_q8 """ + SELECT id, array_col, description + FROM nested_cross_page1_parquet + WHERE id > 1 AND array_size(array_col) < 100 + ORDER BY id + """ + + order_qt_nested_cross_page1_parquet_q9 """ + SELECT + id, + array_min(array_col) as min_val, + array_max(array_col) as max_val + FROM nested_cross_page1_parquet + ORDER BY id + """ + + order_qt_nested_cross_page1_parquet_q10 """ + SELECT id, array_col + FROM nested_cross_page1_parquet + WHERE description LIKE '%large array%' + ORDER BY id + """ + + order_qt_nested_cross_page2_parquet_q1 """ + SELECT + id, + nested_array_col, + array_size(nested_array_col) as outer_size + FROM nested_cross_page2_parquet + WHERE id = 1 + """ + + order_qt_nested_cross_page2_parquet_q2 """ + SELECT + id, + nested_array_col, + array_size(nested_array_col) as outer_size + FROM nested_cross_page2_parquet + WHERE id = 2 + """ + + order_qt_nested_cross_page2_parquet_q3 """ + SELECT + id, + nested_array_col, + array_size(nested_array_col) as outer_size + FROM nested_cross_page2_parquet + WHERE id = 3 + """ + + order_qt_nested_cross_page2_parquet_q4 """ + SELECT + id, + array_struct_col, + array_size(array_struct_col) as struct_arr_size + FROM nested_cross_page2_parquet + WHERE description LIKE '%large%' + """ + + order_qt_nested_cross_page2_parquet_q5 """ + SELECT + id, + item_x as x_value, + item_y as y_value + FROM nested_cross_page2_parquet + LATERAL VIEW EXPLODE(array_struct_col) tmp AS item_x, item_y + WHERE id = 1 AND item_x > 100 + """ + + order_qt_nested_cross_page2_parquet_q6 """ + SELECT + id, + map_array_col, + array_size(map_array_col) as map_size + FROM nested_cross_page2_parquet + WHERE id = 2 + """ + + order_qt_nested_cross_page3_parquet_q1 """select array_col from nested_cross_page3_parquet where id = 1""" + + order_qt_nested_cross_page3_parquet_q2 """select array_col from nested_cross_page3_parquet where id = 2""" + + order_qt_nested_cross_page3_parquet_q3 """select array_col from nested_cross_page3_parquet where id = 3""" + + order_qt_nested_cross_page3_parquet_q4 """ + SELECT id, array_size(array_col) as arr_size + FROM nested_cross_page3_parquet + ORDER BY id + """ + + order_qt_nested_cross_page3_parquet_q5 """ + SELECT id, array_col[1] as first_elem, array_col[3] as third_elem + FROM nested_cross_page3_parquet + ORDER BY id + """ + + order_qt_nested_cross_page3_parquet_q6 """ + SELECT id, array_col + FROM nested_cross_page3_parquet + WHERE array_size(array_col) > 100 + ORDER BY id + """ + + order_qt_nested_cross_page3_parquet_q7 """ + SELECT id, array_col + FROM nested_cross_page3_parquet + WHERE array_contains(array_col, 1) + ORDER BY id + """ + + order_qt_nested_cross_page3_parquet_q8 """ + SELECT id, array_col, description + FROM nested_cross_page3_parquet + WHERE id > 1 AND array_size(array_col) < 100 + ORDER BY id + """ + + order_qt_nested_cross_page3_parquet_q9 """ + SELECT + id, + array_min(array_col) as min_val, + array_max(array_col) as max_val + FROM nested_cross_page3_parquet + ORDER BY id + """ + + order_qt_nested_cross_page3_parquet_q10 """ + SELECT id, array_col + FROM nested_cross_page3_parquet + WHERE description LIKE '%large array%' + ORDER BY id + """ + + sql """drop catalog ${catalog_name};""" + } +} +