| # These tests check that the page selection and value value-skipping logic works well |
| # for nested types. 'nested_decimals' contains an array column of decimals. |
| # 'double_nested_decimals' contains an array of arrays of decimals column They are |
| # created in a way to have tiny, misaligned pages. |
| # The result set checks that the reading and skipping of values went well. And via |
| # on the runtime profile check we can verify that we used the page index properly. |
| ==== |
| ---- QUERY |
| # Test value-skipping logic by selecting a single top-level row from each page. |
| # Skipping other rows. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 = 1 |
| ---- RESULTS |
| 1,0,1 |
| 1,1,1 |
| 1,2,1 |
| 1,0,1 |
| 1,0,NULL |
| 1,1,NULL |
| 1,2,NULL |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 18 |
| ==== |
| ---- QUERY |
| # Test value-skipping logic by selecting a single top-level row from each page. |
| # Skipping other rows. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 = 2 |
| ---- RESULTS |
| 2,0,2 |
| 2,1,2 |
| 2,2,2 |
| 2,0,2 |
| 2,1,2 |
| 2,0,2 |
| 2,1,NULL |
| 2,2,NULL |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 18 |
| ==== |
| ---- QUERY |
| # Test value-skipping logic by selecting a single top-level row from each page. |
| # Skipping other rows. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 = 3 |
| ---- RESULTS |
| 3,0,3 |
| 3,1,3 |
| 3,2,3 |
| 3,0,3 |
| 3,1,3 |
| 3,2,3 |
| 3,0,3 |
| 3,1,NULL |
| 3,2,3 |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 18 |
| ==== |
| ---- QUERY |
| # Test value-skipping logic by selecting a single top-level row from each page. |
| # Skipping other rows. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 = 4 |
| ---- RESULTS |
| 4,0,4 |
| 4,1,4 |
| 4,2,4 |
| 4,0,4 |
| 4,1,4 |
| 4,2,4 |
| 4,3,4 |
| 4,0,NULL |
| 4,1,4 |
| 4,2,4 |
| 4,3,NULL |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 18 |
| ==== |
| ---- QUERY |
| # Test value-skipping logic by selecting a single top-level row from each page. |
| # Skipping other rows. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 = 5 |
| ---- RESULTS |
| 5,0,5 |
| 5,1,5 |
| 5,2,5 |
| 5,0,5 |
| 5,1,5 |
| 5,2,5 |
| 5,3,5 |
| 5,4,5 |
| 5,0,NULL |
| 5,1,5 |
| 5,2,NULL |
| 5,3,NULL |
| 5,4,5 |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 18 |
| ==== |
| ---- QUERY |
| # Test value-skipping logic by selecting a single top-level row from each page. |
| # Skipping other rows. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 = 6 |
| ---- RESULTS |
| 6,0,6 |
| 6,1,NULL |
| 6,2,6 |
| 6,0,NULL |
| 6,1,NULL |
| 6,2,NULL |
| 6,3,6 |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 21 |
| ==== |
| ---- QUERY |
| # Test value-skipping logic by selecting a single top-level row from each page. |
| # Skipping other rows. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 = 7 |
| ---- RESULTS |
| 7,0,7 |
| 7,1,7 |
| 7,2,7 |
| 7,3,NULL |
| 7,0,7 |
| 7,1,7 |
| 7,2,7 |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 21 |
| ==== |
| ---- QUERY |
| # Test value-skipping logic by selecting a single top-level row from each page. |
| # Skipping other rows. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 = 8 |
| ---- RESULTS |
| 8,0,NULL |
| 8,1,NULL |
| 8,2,8 |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 22 |
| ==== |
| ---- QUERY |
| # Selecting the first rows from the pages. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 < 3 |
| ---- RESULTS |
| 1,0,1 |
| 1,1,1 |
| 1,2,1 |
| 2,0,2 |
| 2,1,2 |
| 2,2,2 |
| 1,0,1 |
| 2,0,2 |
| 2,1,2 |
| 1,0,NULL |
| 1,1,NULL |
| 1,2,NULL |
| 2,0,2 |
| 2,1,NULL |
| 2,2,NULL |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 15 |
| ==== |
| ---- QUERY |
| # Selecting the last rows from the pages. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 > 2 and d_38 < 6 |
| ---- RESULTS |
| 3,0,3 |
| 3,1,3 |
| 3,2,3 |
| 4,0,4 |
| 4,1,4 |
| 4,2,4 |
| 5,0,5 |
| 5,1,5 |
| 5,2,5 |
| 3,0,3 |
| 3,1,3 |
| 3,2,3 |
| 4,0,4 |
| 4,1,4 |
| 4,2,4 |
| 4,3,4 |
| 5,0,5 |
| 5,1,5 |
| 5,2,5 |
| 5,3,5 |
| 5,4,5 |
| 3,0,3 |
| 3,1,NULL |
| 3,2,3 |
| 4,0,NULL |
| 4,1,4 |
| 4,2,4 |
| 4,3,NULL |
| 5,0,NULL |
| 5,1,5 |
| 5,2,NULL |
| 5,3,NULL |
| 5,4,5 |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 12 |
| ==== |
| ---- QUERY |
| # This query selects the first and last rows from a page, so it tests the case |
| # when we read, skip, and read values. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 > 5 and d_38 < 8 |
| ---- RESULTS |
| 6,0,6 |
| 6,1,NULL |
| 6,2,6 |
| 7,0,7 |
| 7,1,7 |
| 7,2,7 |
| 7,3,NULL |
| 7,0,7 |
| 7,1,7 |
| 7,2,7 |
| 6,0,NULL |
| 6,1,NULL |
| 6,2,NULL |
| 6,3,6 |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 19 |
| ==== |
| ---- QUERY |
| # Selecting middle rows from a page. |
| select d_38, pos, item from nested_decimals n, n.arr where d_38 > 6 |
| ---- RESULTS |
| 7,0,7 |
| 7,1,7 |
| 7,2,7 |
| 7,3,NULL |
| 8,0,NULL |
| 8,1,NULL |
| 8,2,8 |
| 7,0,7 |
| 7,1,7 |
| 7,2,7 |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 20 |
| ==== |
| ---- QUERY |
| # Filtering based on nested value. |
| select d_38, pos, item from nested_decimals n, n.arr where item = 1 |
| ---- RESULTS |
| 1,0,1 |
| 1,1,1 |
| 1,2,1 |
| 1,0,1 |
| ---- TYPES |
| DECIMAL, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 12 |
| ==== |
| ---- QUERY |
| # Only selecting the nested item and its position. The Parquet scanner reads |
| # the values in batches in this case. |
| select pos, item from nested_decimals.arr where item < 3 |
| ---- RESULTS |
| 0,1 |
| 1,1 |
| 2,1 |
| 0,2 |
| 1,2 |
| 2,2 |
| 0,1 |
| 0,2 |
| 1,2 |
| 0,2 |
| ---- TYPES |
| BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 1 |
| ==== |
| ---- QUERY |
| # Only selecting the nested item and its position. The Parquet scanner reads |
| # the values in batches in this case. |
| select pos, item from nested_decimals.arr where item < 8 and item > 5 |
| ---- RESULTS |
| 0,6 |
| 2,6 |
| 0,7 |
| 1,7 |
| 2,7 |
| 0,7 |
| 1,7 |
| 2,7 |
| 3,6 |
| ---- TYPES |
| BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 3 |
| ==== |
| ---- QUERY |
| # Only selecting the nested item and its position. The Parquet scanner reads |
| # the values in batches in this case. |
| select pos, item from nested_decimals.arr where item = 8 |
| ---- RESULTS |
| 2,8 |
| ---- TYPES |
| BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 3 |
| ==== |
| ---- QUERY |
| # Selecting one top-level row from a table that has a double-nested column. |
| # Skipping all other rows. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 = 1 |
| ---- RESULTS |
| 1,0,0,1 |
| 1,0,1,1 |
| 1,0,0,1 |
| 1,1,0,1 |
| 1,2,0,1 |
| 1,0,0,1 |
| 1,0,0,1 |
| 1,1,0,1 |
| 1,2,0,1 |
| 1,0,0,1 |
| 1,1,0,1 |
| 1,1,1,1 |
| 1,0,0,NULL |
| 1,1,0,NULL |
| 1,2,0,1 |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 30 |
| ==== |
| ---- QUERY |
| # Selecting one top-level row from a table that has a double-nested column. |
| # Skipping all other rows. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 = 2 |
| ---- RESULTS |
| 2,0,0,2 |
| 2,0,1,2 |
| 2,0,0,2 |
| 2,1,0,2 |
| 2,0,0,2 |
| 2,1,0,2 |
| 2,0,0,2 |
| 2,1,0,2 |
| 2,0,0,2 |
| 2,0,0,NULL |
| 2,1,0,NULL |
| 2,2,0,NULL |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 30 |
| ==== |
| ---- QUERY |
| # Selecting one top-level row from a table that has a double-nested column. |
| # Skipping all other rows. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 = 3 |
| ---- RESULTS |
| 3,0,0,3 |
| 3,0,1,3 |
| 3,0,2,3 |
| 3,0,0,3 |
| 3,1,0,3 |
| 3,2,0,3 |
| 3,0,0,3 |
| 3,1,0,3 |
| 3,2,0,3 |
| 3,0,0,3 |
| 3,0,0,3 |
| 3,0,1,3 |
| 3,1,0,3 |
| 3,0,0,NULL |
| 3,1,0,3 |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 30 |
| ==== |
| ---- QUERY |
| # Selecting one top-level row from a table that has a double-nested column. |
| # Skipping all other rows. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 = 4 |
| ---- RESULTS |
| 4,0,0,4 |
| 4,0,1,4 |
| 4,0,2,4 |
| 4,0,0,4 |
| 4,1,0,4 |
| 4,0,0,4 |
| 4,1,0,4 |
| 4,0,0,4 |
| 4,1,0,4 |
| 4,0,0,4 |
| 4,1,0,4 |
| 4,1,1,4 |
| 4,2,0,4 |
| 4,2,0,NULL |
| 4,2,1,NULL |
| 4,2,2,NULL |
| 4,2,3,NULL |
| 4,2,4,NULL |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 30 |
| ==== |
| ---- QUERY |
| # Selecting one top-level row from a table that has a double-nested column. |
| # Skipping all other rows. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 = 5 |
| ---- RESULTS |
| 5,0,0,5 |
| 5,0,1,5 |
| 5,0,2,5 |
| 5,0,0,5 |
| 5,1,0,5 |
| 5,0,0,5 |
| 5,0,0,5 |
| 5,1,0,5 |
| 5,2,0,5 |
| 5,0,0,5 |
| 5,1,0,5 |
| 5,2,0,5 |
| 5,0,0,NULL |
| 5,0,1,5 |
| 5,0,2,NULL |
| 5,0,3,NULL |
| 5,0,4,NULL |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 30 |
| ==== |
| ---- QUERY |
| # Selecting one top-level row from a table that has a double-nested column. |
| # Skipping all other rows. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 = 6 |
| ---- RESULTS |
| 6,0,0,6 |
| 6,0,1,NULL |
| 6,1,0,6 |
| 6,0,0,NULL |
| 6,0,1,NULL |
| 6,0,2,6 |
| 6,1,0,NULL |
| 6,1,1,6 |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 39 |
| ==== |
| ---- QUERY |
| # Selecting one top-level row from a table that has a double-nested column. |
| # Skipping all other rows. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 = 7 |
| ---- RESULTS |
| 7,0,0,7 |
| 7,0,1,7 |
| 7,0,0,7 |
| 7,0,1,NULL |
| 7,1,0,7 |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 39 |
| ==== |
| ---- QUERY |
| # Selecting one top-level row from a table that has a double-nested column. |
| # Skipping all other rows. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 = 8 |
| ---- RESULTS |
| 8,0,0,NULL |
| 8,0,1,NULL |
| 8,0,2,8 |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 40 |
| ==== |
| ---- QUERY |
| # Selecting frist couple of rows from the pages. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 < 3 |
| ---- RESULTS |
| 1,0,0,1 |
| 1,0,1,1 |
| 2,0,0,2 |
| 2,0,1,2 |
| 1,0,0,1 |
| 1,1,0,1 |
| 1,2,0,1 |
| 2,0,0,2 |
| 2,1,0,2 |
| 1,0,0,1 |
| 2,0,0,2 |
| 2,1,0,2 |
| 1,0,0,1 |
| 1,1,0,1 |
| 1,2,0,1 |
| 2,0,0,2 |
| 2,1,0,2 |
| 1,0,0,1 |
| 1,1,0,1 |
| 1,1,1,1 |
| 2,0,0,2 |
| 1,0,0,NULL |
| 1,1,0,NULL |
| 1,2,0,1 |
| 2,0,0,NULL |
| 2,1,0,NULL |
| 2,2,0,NULL |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 24 |
| ==== |
| ---- QUERY |
| # Selecting last couple of rows from the pages. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 > 2 and d_38 < 6 |
| ---- RESULTS |
| 3,0,0,3 |
| 3,0,1,3 |
| 3,0,2,3 |
| 4,0,0,4 |
| 4,0,1,4 |
| 4,0,2,4 |
| 5,0,0,5 |
| 5,0,1,5 |
| 5,0,2,5 |
| 3,0,0,3 |
| 3,1,0,3 |
| 3,2,0,3 |
| 4,0,0,4 |
| 4,1,0,4 |
| 5,0,0,5 |
| 5,1,0,5 |
| 3,0,0,3 |
| 3,1,0,3 |
| 3,2,0,3 |
| 4,0,0,4 |
| 4,1,0,4 |
| 5,0,0,5 |
| 3,0,0,3 |
| 4,0,0,4 |
| 4,1,0,4 |
| 5,0,0,5 |
| 5,1,0,5 |
| 5,2,0,5 |
| 3,0,0,3 |
| 3,0,1,3 |
| 3,1,0,3 |
| 4,0,0,4 |
| 4,1,0,4 |
| 4,1,1,4 |
| 4,2,0,4 |
| 5,0,0,5 |
| 5,1,0,5 |
| 5,2,0,5 |
| 3,0,0,NULL |
| 3,1,0,3 |
| 4,2,0,NULL |
| 4,2,1,NULL |
| 4,2,2,NULL |
| 4,2,3,NULL |
| 4,2,4,NULL |
| 5,0,0,NULL |
| 5,0,1,5 |
| 5,0,2,NULL |
| 5,0,3,NULL |
| 5,0,4,NULL |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 18 |
| ==== |
| ---- QUERY |
| # This query selects the first and last rows from a page, so it tests the case |
| # when we read, then skip, then we read again from a page. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 > 5 and d_38 < 8 |
| ---- RESULTS |
| 6,0,0,6 |
| 6,0,1,NULL |
| 6,1,0,6 |
| 7,0,0,7 |
| 7,0,1,7 |
| 7,0,0,7 |
| 7,0,1,NULL |
| 7,1,0,7 |
| 6,0,0,NULL |
| 6,0,1,NULL |
| 6,0,2,6 |
| 6,1,0,NULL |
| 6,1,1,6 |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 37 |
| ==== |
| ---- QUERY |
| # Selecting middle rows from a page. So the scanner needs to skip, then read, |
| # then skip again. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where d_38 > 6 |
| ---- RESULTS |
| 7,0,0,7 |
| 7,0,1,7 |
| 8,0,0,NULL |
| 8,0,1,NULL |
| 8,0,2,8 |
| 7,0,0,7 |
| 7,0,1,NULL |
| 7,1,0,7 |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 38 |
| ==== |
| ---- QUERY |
| # Selecting rows based on the innermost item. Tests whether the page index works for |
| # nested columns. |
| select d_38, a1.pos, a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where a2.item = 1 |
| ---- RESULTS |
| 1,0,0,1 |
| 1,0,1,1 |
| 1,0,0,1 |
| 1,1,0,1 |
| 1,2,0,1 |
| 1,0,0,1 |
| 1,0,0,1 |
| 1,1,0,1 |
| 1,2,0,1 |
| 1,0,0,1 |
| 1,1,0,1 |
| 1,1,1,1 |
| 1,2,0,1 |
| ---- TYPES |
| DECIMAL, BIGINT, BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 6 |
| ==== |
| ---- QUERY |
| # Only selecting the innermost item and its position column. The Parquet scanner reads |
| # the values in batches in this case. |
| select a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where a2.item = 2 |
| ---- RESULTS |
| 0,2 |
| 1,2 |
| 0,2 |
| 0,2 |
| 0,2 |
| 0,2 |
| 0,2 |
| 0,2 |
| 0,2 |
| ---- TYPES |
| BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 1 |
| ==== |
| ---- QUERY |
| # Only selecting the innermost item and its position column. The Parquet scanner reads |
| # the values in batches in this case. |
| select a2.pos, a2.item from double_nested_decimals d, d.arr a1, a1.item a2 |
| where a2.item > 5 and a2.item < 7 |
| ---- RESULTS |
| 0,6 |
| 0,6 |
| 2,6 |
| 1,6 |
| ---- TYPES |
| BIGINT, DECIMAL |
| ---- RUNTIME_PROFILE |
| aggregation(SUM, NumStatsFilteredPages): 6 |
| ==== |