[ https://issues.apache.org/jira/browse/HIVE-23006?focusedWorklogId=419365&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-419365 ]
ASF GitHub Bot logged work on HIVE-23006: ----------------------------------------- Author: ASF GitHub Bot Created on: 09/Apr/20 12:03 Start Date: 09/Apr/20 12:03 Worklog Time Spent: 10m Work Description: pgaref commented on pull request #952: HIVE-23006 ProbeDecode compiler support URL: https://github.com/apache/hive/pull/952#discussion_r406155406 ########## File path: ql/src/java/org/apache/hadoop/hive/ql/parse/TezCompiler.java ########## @@ -1482,18 +1490,131 @@ private void removeSemijoinsParallelToMapJoin(OptimizeTezProcContext procCtx) deque.addAll(op.getChildOperators()); } } + // No need to remove SJ branches when we have semi-join reduction or when semijoins are enabled for parallel mapjoins. + if (!procCtx.conf.getBoolVar(ConfVars.TEZ_DYNAMIC_SEMIJOIN_REDUCTION_FOR_MAPJOIN)) { + if (semijoins.size() > 0) { + for (Entry<ReduceSinkOperator, TableScanOperator> semiEntry : semijoins.entrySet()) { + SemiJoinBranchInfo sjInfo = procCtx.parseContext.getRsToSemiJoinBranchInfo().get(semiEntry.getKey()); + if (sjInfo.getIsHint() || !sjInfo.getShouldRemove()) { + // Created by hint, skip it + continue; + } + if (LOG.isDebugEnabled()) { + LOG.debug("Semijoin optimization with parallel edge to map join. Removing semijoin " + + OperatorUtils.getOpNamePretty(semiEntry.getKey()) + " - " + OperatorUtils.getOpNamePretty(semiEntry.getValue())); + } + GenTezUtils.removeBranch(semiEntry.getKey()); + GenTezUtils.removeSemiJoinOperator(procCtx.parseContext, semiEntry.getKey(), semiEntry.getValue()); + } + } + } + if (procCtx.conf.getBoolVar(ConfVars.HIVE_OPTIMIZE_SCAN_PROBEDECODE)) { + if (probeDecodeMJoins.size() > 0) { Review comment: When using MJ to add filtering on ProbeDecode (and not static filters) I believe we should always keep the context as we dont really know how effective the filter is going to be right? (as in we dont know how many HT keys are going to match the particular column on the TS side) In ORC-597 I did some experiments using existing datasets (github, sales, etc) and found that even when we filter-out 20% of elements we dont add extra overhead (due to row-level filtering) -- of course this depends on the data type as well. To tackle the above, I have have a runtime optimization as part of ORC Data Consumer (part of LLap) that disables the filter when its not effective. https://github.com/apache/hive/pull/926/files#diff-4137d272789978e35fd5f489f09da064R343 ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org Issue Time Tracking ------------------- Worklog Id: (was: 419365) Time Spent: 2h 40m (was: 2.5h) > Compiler support for Probe MapJoin > ---------------------------------- > > Key: HIVE-23006 > URL: https://issues.apache.org/jira/browse/HIVE-23006 > Project: Hive > Issue Type: Sub-task > Reporter: Panagiotis Garefalakis > Assignee: Panagiotis Garefalakis > Priority: Major > Labels: pull-request-available > Attachments: HIVE-23006.01.patch, HIVE-23006.02.patch, > HIVE-23006.03.patch > > Time Spent: 2h 40m > Remaining Estimate: 0h > > The decision of pushing down information to the Record reader (potentially > reducing decoding time by row-level filtering) should be done at query > compilation time. > This patch adds an extra optimisation step with the goal of finding Table > Scan operators that could reduce the number of rows decoded at runtime using > extra available information. > It currently looks for all the available MapJoin operators that could use the > smaller HashTable on the probing side (where TS is) to filter-out rows that > would never match. > To do so the HashTable information is pushed down to the TS properties and > then propagated as part of MapWork. > If the a single TS is used by multiple operators (shared-word), this rule can > not be applied. > This rule can be extended to support static filter expressions like: > _select * from sales where sold_state = 'PR';_ > This optimisation manly targets the Tez execution engine running on Llap. -- This message was sent by Atlassian Jira (v8.3.4#803005)