Luo Chen has posted comments on this change.
Change subject: [ASTERIXDB-2119][COMP] Fix variable ordering of projects
......................................................................
Patch Set 2:
The affected test cases are mainly caused by some unnecessary projections (with
union) are removed because of this change. Take a look at the attached query
plan of one affected test. Before this change (line 76), the projection first
outputs variables in a random order, while another extra projection is added
because union requires some ordering of variables. With this change, the first
projection preserves the order, thus the extra projection is not needed.
Before the change:
distribute result [$$13]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$13])
-- STREAM_PROJECT |PARTITIONED|
assign [$$13] <- [{"arec": $$a, "brec": $$b, "ed": get-item($$32, 1)}]
-- ASSIGN |PARTITIONED|
project ([$$a, $$32, $$b])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (eq($$26, $$14))
-- HYBRID_HASH_JOIN [$$26][$$14] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
data-scan []<-[$$26, $$a] <- test.Customers
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- HASH_PARTITION_EXCHANGE [$$14] |PARTITIONED|
union ($$b, $$29, $$b) ($$14, $$14, $$14) ($$35, $$36, $$32)
-- UNION_ALL |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$b, $$14, $$35])
-- STREAM_PROJECT |PARTITIONED|
select (and(get-item($$35, 0), lt($$14, $$15)))
-- STREAM_SELECT |PARTITIONED|
project ([$$b, $$35, $$14, $$15])
-- STREAM_PROJECT |PARTITIONED|
assign [$$35] <- [edit-distance-check($$17,
$$b.getField(4), 2)]
-- ASSIGN |PARTITIONED|
project ([$$17, $$b, $$14, $$15])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
unnest-map [$$15, $$b] <-
index-search("Customers", 0, "test", "Customers", TRUE, FALSE, 1, $$31, 1,
$$31, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
order (ASC, $$31)
-- STABLE_SORT [$$31(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
unnest-map [$$31] <-
index-search("interests_index", 4, "test", "Customers", TRUE, TRUE, 2, 2, 21,
FALSE, 1, $$17)
--
LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
exchange
-- BROADCAST_EXCHANGE |PARTITIONED|
select
(edit-distance-list-is-filterable($$17, 2))
-- STREAM_SELECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
replicate
-- REPLICATE |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
project ([$$17, $$14])
-- STREAM_PROJECT
|PARTITIONED|
assign [$$17] <-
[$$27.getField(4)]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
data-scan []<-[$$14,
$$27] <- test.Customers
-- DATASOURCE_SCAN
|PARTITIONED|
exchange
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
--
EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$29, $$14, $$36])
-- STREAM_PROJECT |PARTITIONED|
select (get-item($$36, 0))
-- STREAM_SELECT |PARTITIONED|
project ([$$36, $$29, $$14])
-- STREAM_PROJECT |PARTITIONED|
assign [$$36] <- [edit-distance-check($$17,
$$29.getField(4), 2)]
-- ASSIGN |PARTITIONED|
project ([$$17, $$29, $$14])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (lt($$14, $$30))
-- NESTED_LOOP |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
data-scan []<-[$$30, $$29] <- test.Customers
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- BROADCAST_EXCHANGE |PARTITIONED|
select
(not(edit-distance-list-is-filterable($$17, 2)))
-- STREAM_SELECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
replicate
-- REPLICATE |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$17, $$14])
-- STREAM_PROJECT |PARTITIONED|
assign [$$17] <-
[$$27.getField(4)]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
data-scan []<-[$$14, $$27] <-
test.Customers
-- DATASOURCE_SCAN
|PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE
|PARTITIONED|
After the change:
distribute result [$$13]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$13])
-- STREAM_PROJECT |PARTITIONED|
assign [$$13] <- [{"arec": $$a, "brec": $$b, "ed": get-item($$32, 1)}]
-- ASSIGN |PARTITIONED|
project ([$$a, $$b, $$32])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (eq($$26, $$14))
-- HYBRID_HASH_JOIN [$$26][$$14] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
data-scan []<-[$$26, $$a] <- test.Customers
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- HASH_PARTITION_EXCHANGE [$$14] |PARTITIONED|
union ($$b, $$29, $$b) ($$14, $$14, $$14) ($$35, $$36, $$32)
-- UNION_ALL |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$b, $$14, $$35])
-- STREAM_PROJECT |PARTITIONED|
select (and(get-item($$35, 0), lt($$14, $$15)))
-- STREAM_SELECT |PARTITIONED|
project ([$$14, $$15, $$b, $$35])
-- STREAM_PROJECT |PARTITIONED|
assign [$$35] <- [edit-distance-check($$17,
$$b.getField(4), 2)]
-- ASSIGN |PARTITIONED|
project ([$$14, $$17, $$15, $$b])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
unnest-map [$$15, $$b] <-
index-search("Customers", 0, "test", "Customers", TRUE, FALSE, 1, $$31, 1,
$$31, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
order (ASC, $$31)
-- STABLE_SORT [$$31(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
unnest-map [$$31] <-
index-search("interests_index", 4, "test", "Customers", TRUE, TRUE, 2, 2, 21,
FALSE, 1, $$17)
--
LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
exchange
-- BROADCAST_EXCHANGE |PARTITIONED|
select
(edit-distance-list-is-filterable($$17, 2))
-- STREAM_SELECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
replicate
-- REPLICATE |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
project ([$$14, $$17])
-- STREAM_PROJECT
|PARTITIONED|
assign [$$17] <-
[$$27.getField(4)]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
data-scan []<-[$$14,
$$27] <- test.Customers
-- DATASOURCE_SCAN
|PARTITIONED|
exchange
--
ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
--
EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
select (get-item($$36, 0))
-- STREAM_SELECT |PARTITIONED|
project ([$$29, $$14, $$36])
-- STREAM_PROJECT |PARTITIONED|
assign [$$36] <- [edit-distance-check($$17,
$$29.getField(4), 2)]
-- ASSIGN |PARTITIONED|
project ([$$29, $$14, $$17])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
join (lt($$14, $$30))
-- NESTED_LOOP |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
data-scan []<-[$$30, $$29] <- test.Customers
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
-- BROADCAST_EXCHANGE |PARTITIONED|
select
(not(edit-distance-list-is-filterable($$17, 2)))
-- STREAM_SELECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
replicate
-- REPLICATE |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$14, $$17])
-- STREAM_PROJECT |PARTITIONED|
assign [$$17] <- [$$27.getField(4)]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
data-scan []<-[$$14, $$27] <-
test.Customers
-- DATASOURCE_SCAN
|PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE
|PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE
|PARTITIONED|
--
To view, visit https://asterix-gerrit.ics.uci.edu/2043
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: Id96a5fe048dd11b7f2e97f4d4a802736ba5ba003
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Luo Chen <[email protected]>
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Reviewer: Luo Chen <[email protected]>
Gerrit-Reviewer: Till Westmann <[email protected]>
Gerrit-HasComments: No