From 14f5bfc02e92e66a1bf6286687e4e26003048e83 Mon Sep 17 00:00:00 2001 From: kakachen Date: Thu, 21 Nov 2024 21:36:52 +0800 Subject: [PATCH] opt source code and add tests. --- .../exec/format/parquet/parquet_common.cpp | 10 +- .../vec/exec/format/parquet/parquet_common.h | 4 +- .../format/parquet/vparquet_column_reader.cpp | 41 +- .../format/parquet/vparquet_column_reader.h | 1 + .../vec/exec/parquet/parquet_common_test.cpp | 585 +++++++++++ .../parquet_nested_type_cross_page_test.cpp | 179 ++++ .../vec/exec/parquet/parquet_thrift_test.cpp | 9 +- .../parquet_nested_types/create_table.hql | 42 + .../parquet_nested_types/data.tar.gz | Bin 0 -> 35305 bytes .../nested_cross_page_test1.py | 192 ++++ .../nested_cross_page_test2.py | 287 ++++++ .../multi_catalog/parquet_nested_types/run.sh | 12 + .../hive/test_parquet_nested_types.out | 913 ++++++++++++++++++ .../hive/test_parquet_nested_types.groovy | 154 +++ 14 files changed, 2402 insertions(+), 27 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 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 09613b9dc867948..62f62448fa66068 100644 --- a/be/src/vec/exec/format/parquet/parquet_common.cpp +++ b/be/src/vec/exec/format/parquet/parquet_common.cpp @@ -78,11 +78,11 @@ bool FilterMap::can_filter_all(size_t remaining_num_values, size_t filter_map_in 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, bool is_cross_page, - size_t start_index) const { + size_t* current_row_ptr, size_t start_index) const { if (!has_filter() || filter_all()) { - *nested_filter_map = std::make_unique(); - return Status::OK(); + return Status::InternalError(fmt::format( + "FilterMap::generate_nested_filter_map failed: has_filter={}, filter_all={}", + has_filter(), filter_all())); } if (rep_levels.empty()) { @@ -94,7 +94,7 @@ Status FilterMap::generate_nested_filter_map(const std::vector& rep_lev size_t current_row = current_row_ptr ? *current_row_ptr : 0; for (size_t i = start_index; i < rep_levels.size(); i++) { - if (!is_cross_page && i > start_index && rep_levels[i] == 0) { + if (i != start_index && rep_levels[i] == 0) { current_row++; if (current_row >= _filter_map_size) { return Status::InvalidArgument( diff --git a/be/src/vec/exec/format/parquet/parquet_common.h b/be/src/vec/exec/format/parquet/parquet_common.h index deb0a867229f668..cb156e380569ea1 100644 --- a/be/src/vec/exec/format/parquet/parquet_common.h +++ b/be/src/vec/exec/format/parquet/parquet_common.h @@ -77,9 +77,7 @@ class FilterMap { 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, // 当前处理到哪一行 - bool is_cross_page, // 是否是跨页的情况 - size_t start_index = 0) const; // rep_levels的起始处理位置 + size_t* current_row_ptr, size_t start_index = 0) const; const uint8_t* filter_map_data() const { return _filter_map_data; } size_t filter_map_size() const { return _filter_map_size; } 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 0291625eb79a6f3..4f23f352c10c217 100644 --- a/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp @@ -323,9 +323,6 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType size_t* read_rows, bool* eof, bool is_dict_filter, bool align_rows) { std::unique_ptr nested_filter_map; - std::unique_ptr> nested_filter_map_data; - - size_t current_row; FilterMap* current_filter_map = &filter_map; size_t origin_size = 0; @@ -337,17 +334,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; @@ -358,13 +360,15 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType remaining_values--; } - if (filter_map.has_filter()) { - nested_filter_map_data = std::make_unique>(); - nested_filter_map_data->resize(_rep_levels.size()); - current_row = _orig_filter_map_index; + // 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, ¤t_row, false, - 0)); + _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) { @@ -374,8 +378,8 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType _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) { _chunk_reader->def_level_decoder().get_levels(&_def_levels[origin_size], parsed_values); @@ -383,6 +387,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; @@ -399,6 +404,7 @@ 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; @@ -445,7 +451,9 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType size_t num_values = parsed_values - ancestor_nulls; + // 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)); } @@ -470,11 +478,10 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType RETURN_IF_ERROR(_chunk_reader->skip_values(ancestor_nulls, false)); } } - - if (!align_rows) { - *read_rows = parsed_rows; - } + *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()); @@ -486,6 +493,7 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType } } + // Apply filtering to repetition and definition levels if (current_filter_map->has_filter()) { if (current_filter_map->filter_all()) { _rep_levels.resize(0); @@ -510,7 +518,8 @@ Status ScalarColumnReader::_read_nested_column(ColumnPtr& doris_column, DataType } } - _orig_filter_map_index = current_row + 1; + // Prepare for next row + ++_orig_filter_map_index; if (_rep_levels.size() > 0) { // make sure the rows of complex type are aligned correctly, 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 fc3d78ae0622534..51cdc3dbbd75203 100644 --- a/be/src/vec/exec/format/parquet/vparquet_column_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_column_reader.h @@ -201,6 +201,7 @@ 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); 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 000000000000000..abd1f7921d5506a --- /dev/null +++ b/be/test/vec/exec/parquet/parquet_common_test.cpp @@ -0,0 +1,585 @@ +// 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 { + // Simulate first page data + page1_filter_data = {1, 0, 1}; // Filtering for 3 rows + page1_rep_levels = {0, 1, 1, 1, 0, 1, 0}; // First page repetition levels + // 0: [1,1,1] First row: 3 elements + // 0: [1] Second row: 1 element + // 0: [] Third row: empty + + // Simulate second page data + page2_filter_data = {1, 0, 1, 1}; // Filtering for 4 rows + page2_rep_levels = {1, 1, 0, 1, 0, 1, 1, 0}; // Second page repetition levels + // Continue third row: [1,1] + // 0: [1] Fourth row: 1 element + // 0: [1,1] Fifth row: 2 elements + // 0: [1,1,1] Sixth row: 3 elements + } + + std::vector page1_filter_data; + std::vector page1_rep_levels; + std::vector page2_filter_data; + std::vector page2_rep_levels; +}; + +// Test first page of cross-page processing +TEST_F(CrossPageTest, test_first_page) { + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(page1_filter_data.data(), page1_filter_data.size(), false).ok()); + + std::vector nested_filter_map_data; + std::unique_ptr nested_filter_map; + size_t current_row = 0; + + // Process first page + ASSERT_TRUE(filter_map + .generate_nested_filter_map(page1_rep_levels, nested_filter_map_data, + &nested_filter_map, ¤t_row, 0) + .ok()); + + // Verify first page results + std::vector expected = {1, 1, 1, 1, 0, 0, 1}; + EXPECT_EQ(nested_filter_map_data, expected); + + // current_row should point to row 3 (0-based) + EXPECT_EQ(current_row, 2); +} + +// Test second page of cross-page processing +TEST_F(CrossPageTest, test_second_page) { + FilterMap filter_map; + ASSERT_TRUE(filter_map.init(page2_filter_data.data(), page2_filter_data.size(), false).ok()); + + std::vector nested_filter_map_data; + std::unique_ptr nested_filter_map; + size_t current_row = 2; // Continue from third row (as first page processed up to row 2) + + // Process second page + ASSERT_TRUE(filter_map + .generate_nested_filter_map(page2_rep_levels, nested_filter_map_data, + &nested_filter_map, ¤t_row, 0) + .ok()); + + // Verify second page results + std::vector expected = {1, 1, 0, 0, 1, 1, 1, 1}; + EXPECT_EQ(nested_filter_map_data, expected); + + // current_row should point to row 6 + EXPECT_EQ(current_row, 5); +} + +// Test complete cross-page processing flow +TEST_F(CrossPageTest, test_cross_page_complete) { + // First page processing + FilterMap filter_map1; + ASSERT_TRUE(filter_map1.init(page1_filter_data.data(), page1_filter_data.size(), false).ok()); + + std::vector nested_filter_map_data1; + std::unique_ptr nested_filter_map1; + size_t current_row = 0; + + ASSERT_TRUE(filter_map1 + .generate_nested_filter_map(page1_rep_levels, nested_filter_map_data1, + &nested_filter_map1, ¤t_row, 0) + .ok()); + + // Second page processing + FilterMap filter_map2; + ASSERT_TRUE(filter_map2.init(page2_filter_data.data(), page2_filter_data.size(), false).ok()); + + std::vector nested_filter_map_data2; + std::unique_ptr nested_filter_map2; + + ASSERT_TRUE(filter_map2 + .generate_nested_filter_map(page2_rep_levels, nested_filter_map_data2, + &nested_filter_map2, ¤t_row, 0) + .ok()); + + // Verify complete processing results + std::vector expected1 = {1, 1, 1, 1, 0, 0, 1}; + std::vector expected2 = {1, 1, 0, 0, 1, 1, 1, 1}; + + EXPECT_EQ(nested_filter_map_data1, expected1); + EXPECT_EQ(nested_filter_map_data2, expected2); + EXPECT_EQ(current_row, 5); +} + +// Test cross-page boundary conditions +TEST_F(CrossPageTest, test_cross_page_boundary) { + // Simulate complex element at end of first page + std::vector page1_filter = {1}; + std::vector page1_rep = {0, 1, 1}; // One row, incomplete + + // Simulate continuation of element at start of second page + std::vector page2_filter = {1, 0}; + std::vector page2_rep = {1, 1, 0}; // Continue previous element, then start new row + + // Process first page + FilterMap filter_map1; + ASSERT_TRUE(filter_map1.init(page1_filter.data(), page1_filter.size(), false).ok()); + + std::vector nested_data1; + std::unique_ptr nested_map1; + size_t current_row = 0; + + ASSERT_TRUE(filter_map1 + .generate_nested_filter_map(page1_rep, nested_data1, &nested_map1, + ¤t_row, 0) + .ok()); + + // Process second page + FilterMap filter_map2; + ASSERT_TRUE(filter_map2.init(page2_filter.data(), page2_filter.size(), false).ok()); + + std::vector nested_data2; + std::unique_ptr nested_map2; + + ASSERT_TRUE(filter_map2 + .generate_nested_filter_map(page2_rep, nested_data2, &nested_map2, + ¤t_row, 0) + .ok()); + + // Verify results + std::vector expected1 = {1, 1, 1}; + std::vector expected2 = {1, 1, 0}; + + EXPECT_EQ(nested_data1, expected1); + EXPECT_EQ(nested_data2, expected2); + EXPECT_EQ(current_row, 1); +} + +// Test large-scale cross-page processing +TEST_F(CrossPageTest, test_large_cross_page) { + // Generate large amount of data + std::vector page1_filter(1000, 1); + std::vector page1_rep; + // Generate complex repetition pattern + for (int i = 0; i < 1000; i++) { + page1_rep.push_back(i % 3 == 0 ? 0 : 1); // Form complex element every 3 values + } + + std::vector page2_filter(1000, 1); + std::vector page2_rep; + for (int i = 0; i < 1000; i++) { + page2_rep.push_back(i % 3 == 0 ? 0 : 1); + } + + // Process first page + FilterMap filter_map1; + ASSERT_TRUE(filter_map1.init(page1_filter.data(), page1_filter.size(), false).ok()); + + std::vector nested_data1; + std::unique_ptr nested_map1; + size_t current_row = 0; + + ASSERT_TRUE(filter_map1 + .generate_nested_filter_map(page1_rep, nested_data1, &nested_map1, + ¤t_row, 0) + .ok()); + + // Process second page + FilterMap filter_map2; + ASSERT_TRUE(filter_map2.init(page2_filter.data(), page2_filter.size(), false).ok()); + + std::vector nested_data2; + std::unique_ptr nested_map2; + + ASSERT_TRUE(filter_map2 + .generate_nested_filter_map(page2_rep, nested_data2, &nested_map2, + ¤t_row, 0) + .ok()); + + // Verify results + EXPECT_EQ(nested_data1.size(), page1_rep.size()); + EXPECT_EQ(nested_data2.size(), page2_rep.size()); + EXPECT_EQ(current_row, page1_filter.size() + page2_filter.size() - 1); +} + +// ============= 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 = {2, 1, 3}; // 1, 1, 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), 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), 1); + 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 000000000000000..cff0937910e9a87 --- /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 fe2221bf8d37256..33d7b73b9c11d57 100644 --- a/be/test/vec/exec/parquet/parquet_thrift_test.cpp +++ b/be/test/vec/exec/parquet/parquet_thrift_test.cpp @@ -230,12 +230,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 { @@ -249,7 +251,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)); } @@ -264,7 +266,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)); } @@ -361,6 +363,7 @@ static void create_block(std::unique_ptr& block) { {"date_col", TYPE_DATEV2, sizeof(uint32_t), true}, {"date_v2_col", TYPE_DATEV2, sizeof(uint32_t), true}, {"timestamp_v2_col", TYPE_DATETIMEV2, sizeof(int128_t), true, 18, 0}}; + SchemaScanner schema_scanner(column_descs); ObjectPool object_pool; doris::TupleDescriptor* tuple_desc = create_tuple_desc(&object_pool, column_descs); auto tuple_slots = tuple_desc->slots(); 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 000000000000000..9aa256b210aca44 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/create_table.hql @@ -0,0 +1,42 @@ +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; 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..51af8457225552b7de3b1d79a45fe89114c3f8ee GIT binary patch literal 35305 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 XEz)Nv@$|BgdGfdSZ3;`?$u0ReCYVDt 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 000000000000000..9fff6d362cde497 --- /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 000000000000000..2e67e96213190eb --- /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/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/parquet_nested_types/run.sh new file mode 100755 index 000000000000000..f3136eaa20094ae --- /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 000000000000000..cc793ef96e4c2a3 --- /dev/null +++ b/regression-test/data/external_table_p0/hive/test_parquet_nested_types.out @@ -0,0 +1,913 @@ +-- 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_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 + 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 000000000000000..2e8073e260b39b7 --- /dev/null +++ b/regression-test/suites/external_table_p0/hive/test_parquet_nested_types.groovy @@ -0,0 +1,154 @@ +// 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 """ + + qt_nested_cross_page1_parquet_q1 """select array_col from nested_cross_page1_parquet where id = 1""" + + qt_nested_cross_page1_parquet_q2 """select array_col from nested_cross_page1_parquet where id = 2""" + + qt_nested_cross_page1_parquet_q3 """select array_col from nested_cross_page1_parquet where id = 3""" + + qt_nested_cross_page1_parquet_q4 """ + SELECT id, array_size(array_col) as arr_size + FROM nested_cross_page1_parquet + ORDER BY id + """ + + 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 + """ + + qt_nested_cross_page1_parquet_q6 """ + SELECT id, array_col + FROM nested_cross_page1_parquet + WHERE array_size(array_col) > 100 + ORDER BY id + """ + + qt_nested_cross_page1_parquet_q7 """ + SELECT id, array_col + FROM nested_cross_page1_parquet + WHERE array_contains(array_col, 1) + ORDER BY id + """ + + 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 + """ + + 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 + """ + + qt_nested_cross_page1_parquet_q10 """ + SELECT id, array_col + FROM nested_cross_page1_parquet + WHERE description LIKE '%large array%' + ORDER BY id + """ + + 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 + """ + + 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 + """ + + 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 + """ + + 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%' + """ + + 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 + """ + + 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 + """ + + sql """drop catalog ${catalog_name};""" + } +} +