Files
impala/testdata/workloads/functional-query/queries/QueryTest/nested-array-in-select-list.test
Csaba Ringhofer efc303b71a IMPALA-11434: Fix analysis of multiple more than 1d arrays in select list
More than 1d arrays in select list tried to register a
CollectionTableRef with name "item" for the inner arrays,
leading to name collision if there was more than one such array.

The logic is changed to always use the full path as implicit alias
in CollectionTableRefs backing arrays in select list.

As a side effect this leads to using the fully qualified names
in expressions in the explain plans of queries that use arrays
from views. This is not an intended change, but I don't consider
it to be critical. Created IMPALA-11452 to deal with more
sophisticated alias handling in collections.

Testing:
- added a new table to testdata and a regression test

Change-Id: I6f2b6cad51fa25a6f6932420eccf1b0a964d5e4e
Reviewed-on: http://gerrit.cloudera.org:8080/18734
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2022-07-22 22:59:19 +00:00

395 lines
8.1 KiB
Plaintext

====
---- QUERY
select id, int_array from complextypestbl
---- RESULTS
1,'[1,2,3]'
2,'[NULL,1,2,NULL,3,NULL]'
3,'[]'
4,'NULL'
5,'NULL'
6,'NULL'
7,'NULL'
8,'[-1]'
---- TYPES
bigint,string
====
---- QUERY
select id, int_array from complextypestbl where id=1
---- RESULTS
1,'[1,2,3]'
---- TYPES
bigint,string
====
---- QUERY
select id, int_array, int_array_array from complextypestbl
---- RESULTS
8,'[-1]','[[-1,-2],[]]'
1,'[1,2,3]','[[1,2],[3,4]]'
2,'[NULL,1,2,NULL,3,NULL]','[[NULL,1,2,NULL],[3,NULL,4],[],NULL]'
3,'[]','[NULL]'
4,'NULL','[]'
5,'NULL','NULL'
6,'NULL','NULL'
7,'NULL','[NULL,[5,6]]'
---- TYPES
bigint,string,string
====
---- QUERY
# Sorting is not supported yet for arrays: IMPALA-10939
select id, int_array_array, int_array from complextypestbl order by id
---- CATCH
IllegalStateException: Sorting is not supported if the select list contains collection columns.
====
---- QUERY
# Same collection used twice in a select list.
select id, int_array, int_array from complextypestbl
---- RESULTS
1,'[1,2,3]','[1,2,3]'
2,'[NULL,1,2,NULL,3,NULL]','[NULL,1,2,NULL,3,NULL]'
3,'[]','[]'
4,'NULL','NULL'
5,'NULL','NULL'
6,'NULL','NULL'
7,'NULL','NULL'
8,'[-1]','[-1]'
---- TYPES
bigint,string,string
====
---- QUERY
# Same collection used from two versions of the same table/
select t1.id, t1.int_array, t2.int_array
from complextypestbl t1 join complextypestbl t2
on t1.id = t2.id
---- RESULTS
3,'[]','[]'
5,'NULL','NULL'
7,'NULL','NULL'
8,'[-1]','[-1]'
1,'[1,2,3]','[1,2,3]'
2,'[NULL,1,2,NULL,3,NULL]','[NULL,1,2,NULL,3,NULL]'
4,'NULL','NULL'
6,'NULL','NULL'
---- TYPES
bigint,string,string
====
---- QUERY
select id, int_array from complextypestbl union all select id, int_array from complextypestbl
---- RESULTS
1,'[1,2,3]'
2,'[NULL,1,2,NULL,3,NULL]'
3,'[]'
4,'NULL'
5,'NULL'
6,'NULL'
7,'NULL'
8,'[-1]'
1,'[1,2,3]'
2,'[NULL,1,2,NULL,3,NULL]'
3,'[]'
4,'NULL'
5,'NULL'
6,'NULL'
7,'NULL'
8,'[-1]'
---- TYPES
bigint,string
====
---- QUERY
# TODO: only UNION ALL, is supported, UNION currently crashes Impala. UNION needs
# several utility functions in the BE, so for now we should reject it in the FE
select id, int_array from complextypestbl union select id, int_array from complextypestbl;
---- CATCH
IllegalStateException: UNION, EXCEPT and INTERSECT are not supported for collection types
====
---- QUERY
# Changing a column to a different type leads "non-pass-through" union that does a
# deepcopy on the tuple, which is not yet implemented in BE for arrays. This case is
# currently caught in the planner.
select id, int_array from complextypestbl
union all select cast(id as tinyint), int_array from complextypestbl
---- CATCH
IllegalStateException: only pass-through UNION ALL is supported for array columns
====
---- QUERY
# Constants in the select list of unions also lead to "non-pass-through" union.
select 1, int_array from complextypestbl
union all select 2, int_array from complextypestbl;
---- CATCH
IllegalStateException: only pass-through UNION ALL is supported for array columns
====
---- QUERY
select 1 from (select int_array from complextypestbl) s
---- RESULTS
1
1
1
1
1
1
1
1
---- TYPES
tinyint
====
---- QUERY
select id, int_array from (select id, int_array from complextypestbl) s;
---- RESULTS
1,'[1,2,3]'
2,'[NULL,1,2,NULL,3,NULL]'
3,'[]'
4,'NULL'
5,'NULL'
6,'NULL'
7,'NULL'
8,'[-1]'
---- TYPES
bigint,string
====
---- QUERY
with s as (select id, t.int_array from complextypestbl t)
select id, int_array from s;
---- RESULTS
1,'[1,2,3]'
2,'[NULL,1,2,NULL,3,NULL]'
3,'[]'
4,'NULL'
5,'NULL'
6,'NULL'
7,'NULL'
8,'[-1]'
---- TYPES
bigint,string
====
---- QUERY
select id, int_array from complextypes_arrays_only_view;
---- RESULTS
1,'[1,2,3]'
2,'[NULL,1,2,NULL,3,NULL]'
3,'[]'
4,'NULL'
5,'NULL'
6,'NULL'
7,'NULL'
8,'[-1]'
---- TYPES
bigint,string
====
---- QUERY
# Unnesting array returned by view.
select id, a.item from complextypes_arrays_only_view v, v.int_array a;
---- RESULTS
8,-1
1,1
1,2
1,3
2,NULL
2,1
2,2
2,NULL
2,3
2,NULL
---- TYPES
bigint,int
====
---- QUERY
# Unnesting array returned from WITH clause and predicate in inner query.
with v as (select id, int_array from complextypestbl where id=1)
select v.id, a.item from v, v.int_array a;
---- RESULTS
1,1
1,2
1,3
---- TYPES
bigint,int
====
---- QUERY
# Unnesting array returned from WITH clause and predicate in outer query.
with v as (select id, int_array from complextypestbl)
select v.id, a.item from v, v.int_array a where id=1;
---- RESULTS
1,1
1,2
1,3
---- TYPES
bigint,int
====
---- QUERY
# Unnesting array returned from WITH clause on item.
with v as (select id, int_array from complextypestbl)
select v.id, a.item from v, v.int_array a where a.item=1
---- RESULTS
1,1
2,1
---- TYPES
bigint,int
====
---- QUERY
# Unnesting array returned by view wrapped in inline view.
select v.id, a.item from
(select id, int_array from complextypes_arrays_only_view) v, v.int_array a;
---- RESULTS
8,-1
1,1
1,2
1,3
2,NULL
2,1
2,2
2,NULL
2,3
2,NULL
---- TYPES
bigint,int
====
---- QUERY
# Unnesting array returned by view wrapped in inline view + WITH clause.
with v2 as (select id, int_array from complextypes_arrays_only_view)
select v.id, a.item from (select id, int_array from v2) v, v.int_array a;
---- RESULTS
8,-1
1,1
1,2
1,3
2,NULL
2,1
2,2
2,NULL
2,3
2,NULL
---- TYPES
bigint,int
====
---- QUERY
# Unnesting array returned by view wrapped in inline view + WITH clause.
with v2 as (select id, int_array from complextypes_arrays_only_view)
select v.id, a.item from
(select id, int_array from v2 where id=1) v, v.int_array a
where a.item=1;
---- RESULTS
1,1
---- TYPES
bigint,int
====
---- QUERY
select item from unnest(complextypestbl.int_array_array)
---- RESULTS
'[-1,-2]'
'[]'
'[1,2]'
'[3,4]'
'[NULL,1,2,NULL]'
'[3,NULL,4]'
'[]'
'NULL'
'NULL'
'NULL'
'[5,6]'
---- TYPES
string
====
---- QUERY
select id, a.item from complextypes_arrays_only_view t left join t.int_array a;
---- RESULTS
1,1
1,2
1,3
2,NULL
2,1
2,2
2,NULL
2,3
2,NULL
3,NULL
4,NULL
5,NULL
6,NULL
7,NULL
8,-1
---- TYPES
BIGINT,INT
====
---- QUERY
select id, a2.item from complextypes_arrays_only_view v, v.int_array_array a1, a1.item a2;
---- RESULTS
1,1
1,2
1,3
1,4
2,NULL
2,1
2,2
2,NULL
2,3
2,NULL
2,4
7,5
7,6
8,-1
8,-2
---- TYPES
BIGINT,INT
====
---- QUERY
# IMPALA-11052: allow using collections returned from views as non-relative table refs
select item from complextypes_arrays_only_view.int_array
---- CATCH
AnalysisException: Non-relative collections are currently not supported on collections from views.
====
---- QUERY
# IMPALA-11052: allow using collections returned from views as non-relative table refs
with s as (select int_array a from complextypestbl t)
select item from s.a
---- CATCH
AnalysisException: Could not resolve table reference: 's.a
====
---- QUERY
# IMPALA-11280. There is a join involved here by using the IN operator, and multiple
# arrays are unnested. Checks that the predicate on an unnested array is evaluated
# correctly.
select id, unnested_arr1, unnested_arr2
from (
select id, unnest(arr1) as unnested_arr1, unnest(arr2) as unnested_arr2
from complextypes_arrays
where id % 2 = 1 and id in (select id from alltypestiny)
) a
where a.unnested_arr1 < 5;
---- RESULTS
1,1,'one'
1,2,'two'
1,3,'three'
1,4,'four'
7,1,'NULL'
7,2,'NULL'
---- TYPES
INT,INT,STRING
====
---- QUERY
# Similar as above but here the join is explicitly included in the query string and is not
# a result of a query rewrite.
select a.id, unnested_arr1, unnested_arr2
from (
select cta.id, unnest(arr1) as unnested_arr1, unnest(arr2) as unnested_arr2
from functional_parquet.complextypes_arrays cta
left join functional_parquet.alltypestiny ti on cta.id = ti.id
where cta.id % 2 = 1) a
where a.unnested_arr1 < 5;
---- RESULTS
1,1,'one'
1,2,'two'
1,3,'three'
1,4,'four'
7,1,'NULL'
7,2,'NULL'
---- TYPES
INT,INT,STRING
====
---- QUERY
# Regression test for:
# IMPALA-11434: "More than 1 2d arrays in select list causes analysis error"
select id, int_1d, int_2d, int_3d, string_1d, string_2d, string_3d from array_tbl;
---- RESULTS
1,'[1,2,NULL]','[[1,2,NULL],[3]]','[[[1,2,NULL],[3]],[[4]]]','["1","2",NULL]','[["1","2",NULL],["3"]]','[[["1","2",NULL],["3"]],[["4"]]]'
---- TYPES
INT,STRING,STRING,STRING,STRING,STRING,STRING
=====