blob: 8eb77fc9c5468e721fbd904a43549da8ffe76bf0 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>HashJoinMemoryCalculator (Drill : 1.20.3 API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="HashJoinMemoryCalculator (Drill : 1.20.3 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/HashJoinMemoryCalculator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMechanicalMemoryCalculator.MechanicalPostBuildCalculations.html" title="class in org.apache.drill.exec.physical.impl.join"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.BatchStat.html" title="class in org.apache.drill.exec.physical.impl.join"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.html" target="_top">Frames</a></li>
<li><a href="HashJoinMemoryCalculator.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.drill.exec.physical.impl.join</div>
<h2 title="Interface HashJoinMemoryCalculator" class="title">Interface HashJoinMemoryCalculator</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinStateCalculator.html" title="interface in org.apache.drill.exec.physical.impl.join">HashJoinStateCalculator</a>&lt;<a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.BuildSidePartitioning.html" title="interface in org.apache.drill.exec.physical.impl.join">HashJoinMemoryCalculator.BuildSidePartitioning</a>&gt;</dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMechanicalMemoryCalculator.html" title="class in org.apache.drill.exec.physical.impl.join">HashJoinMechanicalMemoryCalculator</a>, <a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculatorImpl.html" title="class in org.apache.drill.exec.physical.impl.join">HashJoinMemoryCalculatorImpl</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">HashJoinMemoryCalculator</span>
extends <a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinStateCalculator.html" title="interface in org.apache.drill.exec.physical.impl.join">HashJoinStateCalculator</a>&lt;<a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.BuildSidePartitioning.html" title="interface in org.apache.drill.exec.physical.impl.join">HashJoinMemoryCalculator.BuildSidePartitioning</a>&gt;</pre>
<div class="block"><p>
This class is responsible for managing the memory calculations for the HashJoin operator.
Since the HashJoin operator has different phases of execution, this class needs to perform
different memory calculations at each phase. The phases of execution have been broken down
into an explicit state machine diagram below. What ocurrs in each state is described in
the documentation of the <a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinState.html" title="enum in org.apache.drill.exec.physical.impl.join"><code>HashJoinState</code></a> class below. <b>Note:</b> the transition from Probing
and Partitioning back to Build Side Partitioning. This happens when we had to spill probe side
partitions and we needed to recursively process spilled partitions. This recursion is
described in more detail in the example below.
</p>
<p>
+--------------+ <-------+
| Build Side | |
| Partitioning| |
| | |
+------+-------+ |
| |
| |
v |
+--------------+ |
|Probing and | |
|Partitioning | |
| | |
+--------------+ |
| |
+----------------+
|
v
Done
</p>
<p>
An overview of how these states interact can be summarized with the following example.<br/><br/>
Consider the case where we have 4 partition configured initially.<br/><br/>
<ol>
<li>We first start consuming build side batches and putting their records into one of 4 build side partitions.</li>
<li>Once we run out of memory we start spilling build side partition one by one</li>
<li>We keep partitioning build side batches until all the build side batches are consumed.</li>
<li>After we have consumed the build side we prepare to probe by building hashtables for the partitions
we have in memory. If we don't have enough room for all the hashtables in memory we spill build side
partitions until we do have enough room.</li>
<li>We now start processing the probe side. For each probe record we determine its build partition. If
the build partition is in memory we do the join for the record and emit it. If the build partition is
not in memory we spill the probe record. We continue this process until all the probe side records are consumed.</li>
<li>If we didn't spill any probe side partitions because all the build side partition were in memory, our join
operation is done. If we did spill probe side partitions we have to recursively repeat this whole process for each
spilled probe and build side partition pair.</li>
</ol>
</p></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Interface and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.BatchStat.html" title="class in org.apache.drill.exec.physical.impl.join">HashJoinMemoryCalculator.BatchStat</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.BuildSidePartitioning.html" title="interface in org.apache.drill.exec.physical.impl.join">HashJoinMemoryCalculator.BuildSidePartitioning</a></span></code>
<div class="block">The interface representing the <a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinStateCalculator.html" title="interface in org.apache.drill.exec.physical.impl.join"><code>HashJoinStateCalculator</code></a> corresponding to the
<a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinState.html#BUILD_SIDE_PARTITIONING"><code>HashJoinState.BUILD_SIDE_PARTITIONING</code></a> state.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.PartitionStat.html" title="interface in org.apache.drill.exec.physical.impl.join">HashJoinMemoryCalculator.PartitionStat</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.PartitionStatSet.html" title="class in org.apache.drill.exec.physical.impl.join">HashJoinMemoryCalculator.PartitionStatSet</a></span></code>
<div class="block">This class represents the memory size statistics for an entire set of partitions.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.PostBuildCalculations.html" title="interface in org.apache.drill.exec.physical.impl.join">HashJoinMemoryCalculator.PostBuildCalculations</a></span></code>
<div class="block">The interface representing the <a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinStateCalculator.html" title="interface in org.apache.drill.exec.physical.impl.join"><code>HashJoinStateCalculator</code></a> corresponding to the
<a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinState.html#POST_BUILD_CALCULATIONS"><code>HashJoinState.POST_BUILD_CALCULATIONS</code></a> state.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.html#initialize-boolean-">initialize</a></span>(boolean&nbsp;doMemoryCalc)</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.drill.exec.physical.impl.join.HashJoinStateCalculator">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.drill.exec.physical.impl.join.<a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinStateCalculator.html" title="interface in org.apache.drill.exec.physical.impl.join">HashJoinStateCalculator</a></h3>
<code><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinStateCalculator.html#getState--">getState</a>, <a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinStateCalculator.html#next--">next</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="initialize-boolean-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>initialize</h4>
<pre>void&nbsp;initialize(boolean&nbsp;doMemoryCalc)</pre>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/HashJoinMemoryCalculator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMechanicalMemoryCalculator.MechanicalPostBuildCalculations.html" title="class in org.apache.drill.exec.physical.impl.join"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.BatchStat.html" title="class in org.apache.drill.exec.physical.impl.join"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/drill/exec/physical/impl/join/HashJoinMemoryCalculator.html" target="_top">Frames</a></li>
<li><a href="HashJoinMemoryCalculator.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 1970 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>