blob: 236ef5db9ad8e13ca01a928f0d3adb240b7c6095 [file]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>Impala: fe/src/main/java/com/cloudera/impala/planner/HBaseScanNode.java Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Impala
</div>
<div id="projectbrief">Impalaistheopensource,nativeanalyticdatabaseforApacheHadoop.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('HBaseScanNode_8java_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Macros</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">HBaseScanNode.java</div> </div>
</div><!--header-->
<div class="contents">
<a href="HBaseScanNode_8java.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright 2012 Cloudera Inc.</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// you may not use this file except in compliance with the License.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// limitations under the License.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">package </span>com.cloudera.impala.planner;</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">import</span> java.io.IOException;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">import</span> java.nio.ByteBuffer;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">import</span> java.util.ArrayList;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">import</span> java.util.Arrays;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">import</span> java.util.List;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">import</span> java.util.Map;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">import</span> org.apache.hadoop.conf.Configuration;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">import</span> org.apache.hadoop.hbase.HBaseConfiguration;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">import</span> org.apache.hadoop.hbase.HConstants;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">import</span> org.apache.hadoop.hbase.HRegionLocation;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">import</span> org.apache.hadoop.hbase.client.HTable;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">import</span> org.apache.hadoop.hbase.filter.CompareFilter;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">import</span> org.apache.hadoop.hbase.util.Bytes;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">import</span> org.slf4j.Logger;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">import</span> org.slf4j.LoggerFactory;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">com.cloudera.impala.analysis.Analyzer</a>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1BinaryPredicate.html">com.cloudera.impala.analysis.BinaryPredicate</a>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">com.cloudera.impala.analysis.Expr</a>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1SlotDescriptor.html">com.cloudera.impala.analysis.SlotDescriptor</a>;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1StringLiteral.html">com.cloudera.impala.analysis.StringLiteral</a>;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html">com.cloudera.impala.analysis.TupleDescriptor</a>;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseColumn.html">com.cloudera.impala.catalog.HBaseColumn</a>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">com.cloudera.impala.catalog.HBaseTable</a>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">import</span> <a class="code" href="namespaceimpala.html#aa5bce0d3309643287a67504146c2f871">com.cloudera.impala.catalog.PrimitiveType</a>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html">com.cloudera.impala.catalog.Type</a>;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1InternalException.html">com.cloudera.impala.common.InternalException</a>;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">import</span> com.cloudera.impala.common.Pair;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">import</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1service_1_1FeSupport.html">com.cloudera.impala.service.FeSupport</a>;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TColumnValue;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TExplainLevel;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.THBaseFilter;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.THBaseKeyRange;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.THBaseScanNode;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TNetworkAddress;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TPlanNode;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TPlanNodeType;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TQueryOptions;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TScanRange;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TScanRangeLocation;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">import</span> com.cloudera.impala.thrift.TScanRangeLocations;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">import</span> com.google.common.base.Objects;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">import</span> com.google.common.base.Preconditions;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">import</span> com.google.common.collect.Lists;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword">import</span> com.google.common.collect.Maps;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html"> 68</a></span>&#160;<span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html">HBaseScanNode</a> <span class="keyword">extends</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html">ScanNode</a> {</div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a24f48f52e056ae4dbeff6ef694a3d93a"> 69</a></span>&#160; <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">static</span> Logger <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a24f48f52e056ae4dbeff6ef694a3d93a">LOG</a> = LoggerFactory.getLogger(HBaseScanNode.class);</div>
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635"> 70</a></span>&#160; <span class="keyword">private</span> <span class="keyword">final</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html">TupleDescriptor</a> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// One range per clustering column. The range bounds are expected to be constants.</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// A null entry means there&#39;s no range restriction for that particular key.</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// If keyRanges is non-null it always contains as many entries as there are clustering</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// cols.</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abab87c6b761de19041311030895379f5"> 76</a></span>&#160; <span class="keyword">private</span> List&lt;ValueRange&gt; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abab87c6b761de19041311030895379f5">keyRanges_</a>;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// derived from keyRanges_; empty means unbounded;</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// initialize start/stopKey_ to be unbounded.</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6"> 80</a></span>&#160; <span class="keyword">private</span> byte[] <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a> = HConstants.EMPTY_START_ROW;</div>
<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9"> 81</a></span>&#160; <span class="keyword">private</span> byte[] <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a> = HConstants.EMPTY_END_ROW;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// True if this scan node is not going to scan anything. If the row key filter</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// evaluates to null, or if the lower bound &gt; upper bound, then this scan node won&#39;t</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// scan at all.</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1"> 86</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">boolean</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1">isEmpty_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// List of HBase Filters for generating thrift message. Filled in finalize().</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a57b3dfffe657c21a2bcac949337abc44"> 89</a></span>&#160; <span class="keyword">private</span> <span class="keyword">final</span> List&lt;THBaseFilter&gt; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a57b3dfffe657c21a2bcac949337abc44">filters_</a> = <span class="keyword">new</span> ArrayList&lt;THBaseFilter&gt;();</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// The suggested value for &quot;hbase.client.scan.setCaching&quot;, which batches maxCaching</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// rows per fetch request to the HBase region server. If the value is too high,</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// then the hbase region server will have a hard time (GC pressure and long response</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// times). If the value is too small, then there will be extra trips to the hbase</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// region server.</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// Default to 1024 and update it based on row size estimate such that each batch size</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// won&#39;t exceed 500MB.</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad0c1643f1e823e085a10ea5ca0b58ec1"> 98</a></span>&#160; <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad0c1643f1e823e085a10ea5ca0b58ec1">MAX_HBASE_FETCH_BATCH_SIZE</a> = 500 * 1024 * 1024;</div>
<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a90347a04043f640112f8f34c2232f2ee"> 99</a></span>&#160; <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a90347a04043f640112f8f34c2232f2ee">DEFAULT_SUGGESTED_CACHING</a> = 1024;</div>
<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a28bbc7169dbd7596c74f5ad10e9268f7"> 100</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a28bbc7169dbd7596c74f5ad10e9268f7">suggestedCaching_</a> = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a90347a04043f640112f8f34c2232f2ee">DEFAULT_SUGGESTED_CACHING</a>;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// HBase config; Common across all object instance.</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a544a3067f00b988b82bd9ab1da399b79"> 103</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> Configuration <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a544a3067f00b988b82bd9ab1da399b79">hbaseConf_</a> = HBaseConfiguration.create();</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#af2c420f50a33681711cd83ed19ef8dd9"> 105</a></span>&#160; <span class="keyword">public</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#af2c420f50a33681711cd83ed19ef8dd9">HBaseScanNode</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNodeId.html">PlanNodeId</a> <span class="keywordtype">id</span>, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html">TupleDescriptor</a> desc) {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; super(<span class="keywordtype">id</span>, desc, <span class="stringliteral">&quot;SCAN HBASE&quot;</span>);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a> = desc;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div>
<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a2b42ff4da27110ea43ce82dd4147b604"> 110</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a2b42ff4da27110ea43ce82dd4147b604">setKeyRanges</a>(List&lt;ValueRange&gt; keyRanges) {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; Preconditions.checkNotNull(keyRanges);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abab87c6b761de19041311030895379f5">keyRanges_</a> = keyRanges;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; @Override</div>
<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad94a6f9eb5b1392c47d99e34653848d1"> 116</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad94a6f9eb5b1392c47d99e34653848d1">init</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">Analyzer</a> analyzer) <span class="keywordflow">throws</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1InternalException.html">InternalException</a> {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a3640f028c46f43b8cd5e95e264929c94">assignConjuncts</a>(analyzer);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abeaebfd273a194d5b1d91636932f9cac">setStartStopKey</a>(analyzer);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// Convert predicates to HBase filters_.</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a6750bd4cd186410640c4d01e6e2f43ad">createHBaseFilters</a>(analyzer);</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// materialize slots in remaining conjuncts_</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; analyzer.materializeSlots(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a61f4bd6892dfde12236a27fffcad70cb">conjuncts_</a>);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#ae85be815a5423c220a5cadffd73a58b4">computeMemLayout</a>(analyzer);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1a61a4de8d9e6606f61e580a933744e1">computeScanRangeLocations</a>(analyzer);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="comment">// Call computeStats() after materializing slots and computing the mem layout.</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aea74288c4908d28a2a44675f6a69f01b">computeStats</a>(analyzer);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div>
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abeaebfd273a194d5b1d91636932f9cac"> 141</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abeaebfd273a194d5b1d91636932f9cac">setStartStopKey</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">Analyzer</a> analyzer) <span class="keywordflow">throws</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1common_1_1InternalException.html">InternalException</a> {</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; Preconditions.checkNotNull(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abab87c6b761de19041311030895379f5">keyRanges_</a>);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; Preconditions.checkState(keyRanges_.size() == 1);</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange.html">ValueRange</a> rowRange = keyRanges_.get(0);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (rowRange != null) {</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">if</span> (rowRange.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange.html#ab5e7c78b9a1b091e921d61c0e161f113">getLowerBound</a>() != null) {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; Preconditions.checkState(rowRange.getLowerBound().isConstant());</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; Preconditions.checkState(</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; rowRange.getLowerBound().getType().equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html#a20128254897643f1f2a8bf575ffd8c41">Type.STRING</a>));</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; TColumnValue val = FeSupport.EvalConstExpr(rowRange.getLowerBound(),</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; analyzer.getQueryCtx());</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (!val.isSetString_val()) {</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// lower bound is null.</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1">isEmpty_</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a> = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad32a76d4eb9ba1102580531283cab4e3">convertToBytes</a>(val.getString_val(),</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; !rowRange.getLowerBoundInclusive());</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (rowRange.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange.html#af1046a1fc69975277fe5bc3dca740605">getUpperBound</a>() != null) {</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; Preconditions.checkState(rowRange.getUpperBound().isConstant());</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; Preconditions.checkState(</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; rowRange.getUpperBound().getType().equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html#a20128254897643f1f2a8bf575ffd8c41">Type.STRING</a>));</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; TColumnValue val = FeSupport.EvalConstExpr(rowRange.getUpperBound(),</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; analyzer.getQueryCtx());</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (!val.isSetString_val()) {</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// upper bound is null.</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1">isEmpty_</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a> = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad32a76d4eb9ba1102580531283cab4e3">convertToBytes</a>(val.getString_val(),</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; rowRange.getUpperBoundInclusive());</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; }</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordtype">boolean</span> endKeyIsEndOfTable = Bytes.equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>, HConstants.EMPTY_END_ROW);</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> ((Bytes.compareTo(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a>, stopKey_) &gt; 0) &amp;&amp; !endKeyIsEndOfTable) {</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="comment">// Lower bound is greater than upper bound.</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1">isEmpty_</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; @Override</div>
<div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aea74288c4908d28a2a44675f6a69f01b"> 190</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aea74288c4908d28a2a44675f6a69f01b">computeStats</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">Analyzer</a> analyzer) {</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; super.computeStats(analyzer);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a> tbl = (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a>) <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#ab82bdc60c694df8db1aeb1c77fd3c7a9">getTable</a>();</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange.html">ValueRange</a> rowRange = keyRanges_.get(0);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1">isEmpty_</a>) {</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">cardinality_</a> = 0;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rowRange != null &amp;&amp; rowRange.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange.html#a734a761156b0564a6f91a1369d00d8a6">isEqRange</a>()) {</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">cardinality_</a> = 1;</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// Set maxCaching so that each fetch from hbase won&#39;t return a batch of more than</span></div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// MAX_HBASE_FETCH_BATCH_SIZE bytes.</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; Pair&lt;Long, Long&gt; estimate = tbl.getEstimatedRowStats(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a>, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>);</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">cardinality_</a> = estimate.first.longValue();</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (estimate.second.longValue() &gt; 0) {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a28bbc7169dbd7596c74f5ad10e9268f7">suggestedCaching_</a> = (int)</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; Math.max(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad0c1643f1e823e085a10ea5ca0b58ec1">MAX_HBASE_FETCH_BATCH_SIZE</a> / estimate.second.longValue(), 1);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html#aef7d931f6a4df4c38e19674eac6d09de">inputCardinality_</a> = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">cardinality_</a>;</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">cardinality_</a> *= <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a22ffb5792713456084d84ca51c5e5a44">computeSelectivity</a>();</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">cardinality_</a> = Math.max(0, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">cardinality_</a>);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">cardinality_</a> = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#aa14ba07f8429b799ccbce5714e84400d">capAtLimit</a>(cardinality_);</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; LOG.debug(<span class="stringliteral">&quot;computeStats HbaseScan: cardinality=&quot;</span> + Long.toString(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">cardinality_</a>));</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// TODO: take actual regions into account</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a93c6ed48d9fd753d6e066d64858a019f">numNodes_</a> = desc_.getTable().<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a6113f9a419fbab952ed7063715d9a4fd">getNumNodes</a>();</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; LOG.debug(<span class="stringliteral">&quot;computeStats HbaseScan: #nodes=&quot;</span> + Integer.toString(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a93c6ed48d9fd753d6e066d64858a019f">numNodes_</a>));</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; @Override</div>
<div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aa09e0eed1ed191ac6dee638a1d0c6015"> 222</a></span>&#160; <span class="keyword">protected</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aa09e0eed1ed191ac6dee638a1d0c6015">debugString</a>() {</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a> tbl = (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a>) <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#ab82bdc60c694df8db1aeb1c77fd3c7a9">getTable</a>();</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> Objects.toStringHelper(<span class="keyword">this</span>)</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; .add(<span class="stringliteral">&quot;tid&quot;</span>, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#a192f19cb7c2c1f102e14c7c782a61159">getId</a>().asInt())</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; .add(<span class="stringliteral">&quot;hiveTblName&quot;</span>, tbl.getFullName())</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; .add(<span class="stringliteral">&quot;hbaseTblName&quot;</span>, tbl.getHBaseTableName())</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; .add(<span class="stringliteral">&quot;startKey&quot;</span>, ByteBuffer.wrap(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a>).toString())</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; .add(<span class="stringliteral">&quot;stopKey&quot;</span>, ByteBuffer.wrap(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>).toString())</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; .add(<span class="stringliteral">&quot;isEmpty&quot;</span>, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1">isEmpty_</a>)</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; .addValue(super.debugString())</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; .toString();</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// We convert predicates of the form &lt;slotref&gt; op &lt;constant&gt; where slotref is of</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// type string to HBase filters. All these predicates are also evaluated at</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">// the HBaseScanNode. To properly filter out NULL values HBaseScanNode treats all</span></div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// predicates as disjunctive, thereby requiring re-evaluation when there are multiple</span></div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="comment">// attributes. We explicitly materialize the referenced slots, otherwise our hbase</span></div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// scans don&#39;t return correct data.</span></div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// TODO: expand this to generate nested filter lists for arbitrary conjunctions</span></div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// and disjunctions.</span></div>
<div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a6750bd4cd186410640c4d01e6e2f43ad"> 243</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a6750bd4cd186410640c4d01e6e2f43ad">createHBaseFilters</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">Analyzer</a> analyzer) {</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> e: <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a61f4bd6892dfde12236a27fffcad70cb">conjuncts_</a>) {</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// We only consider binary predicates</span></div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (!(e instanceof <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1BinaryPredicate.html">BinaryPredicate</a>)) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; BinaryPredicate bp = (BinaryPredicate) e;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; CompareFilter.CompareOp hbaseOp = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a0447b8956f739d58f5df16e9a6374871">impalaOpToHBaseOp</a>(bp.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1BinaryPredicate.html#a773c89d3973d81bf8102162f06e08dc6">getOp</a>());</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// Ignore unsupported ops</span></div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">if</span> (hbaseOp == null) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1SlotDescriptor.html">SlotDescriptor</a> slot: <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#a9a335d81cfb69d3d2a6f85554489b852">getSlots</a>()) {</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// Only push down predicates on string columns</span></div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">if</span> (slot.getType().getPrimitiveType() != <a class="code" href="enumcom_1_1cloudera_1_1impala_1_1catalog_1_1PrimitiveType.html">PrimitiveType</a>.<a class="code" href="enumcom_1_1cloudera_1_1impala_1_1catalog_1_1PrimitiveType.html#a9ba86e827d4ea1ee853666e7c119e97e">STRING</a>) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">Expr</a> bindingExpr = bp.getSlotBinding(slot.getId());</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">if</span> (bindingExpr == null || !(bindingExpr instanceof <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1StringLiteral.html">StringLiteral</a>)) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; StringLiteral literal = (StringLiteral) bindingExpr;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseColumn.html">HBaseColumn</a> col = (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseColumn.html">HBaseColumn</a>) slot.getColumn();</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; filters_.add(<span class="keyword">new</span> THBaseFilter(</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; col.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseColumn.html#a469d9ff29af3453c76cfe2c1d3890e0a">getColumnFamily</a>(), col.getColumnQualifier(),</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; (byte) hbaseOp.ordinal(), literal.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1StringLiteral.html#ab14b56397b4faf5570127f77ed240b77">getValue</a>()));</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; analyzer.materializeSlots(Lists.newArrayList(e));</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; @Override</div>
<div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aec98d8afc546f531d9542acb7fe6c215"> 270</a></span>&#160; <span class="keyword">protected</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aec98d8afc546f531d9542acb7fe6c215">toThrift</a>(TPlanNode msg) {</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; msg.node_type = TPlanNodeType.HBASE_SCAN_NODE;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a> tbl = (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a>) <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#ab82bdc60c694df8db1aeb1c77fd3c7a9">getTable</a>();</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; msg.hbase_scan_node =</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keyword">new</span> THBaseScanNode(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#a192f19cb7c2c1f102e14c7c782a61159">getId</a>().asInt(), tbl.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html#aa78f85f02f4089f443552e9313d1eee1">getHBaseTableName</a>());</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a57b3dfffe657c21a2bcac949337abc44">filters_</a>.isEmpty()) {</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; msg.hbase_scan_node.setFilters(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a57b3dfffe657c21a2bcac949337abc44">filters_</a>);</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; msg.hbase_scan_node.setSuggested_max_caching(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a28bbc7169dbd7596c74f5ad10e9268f7">suggestedCaching_</a>);</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div>
<div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1a61a4de8d9e6606f61e580a933744e1"> 286</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1a61a4de8d9e6606f61e580a933744e1">computeScanRangeLocations</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">Analyzer</a> analyzer) {</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html#a582ec5180d2747e3415fef20f144c856">scanRanges_</a> = Lists.newArrayList();</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// For empty scan node, return an empty list.</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1">isEmpty_</a>) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// Retrieve relevant HBase regions and their region servers</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a> tbl = (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a>) <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#ab82bdc60c694df8db1aeb1c77fd3c7a9">getTable</a>();</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; HTable hbaseTbl = null;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; List&lt;HRegionLocation&gt; regionsLoc;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; hbaseTbl = <span class="keyword">new</span> HTable(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a544a3067f00b988b82bd9ab1da399b79">hbaseConf_</a>, tbl.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html#aa78f85f02f4089f443552e9313d1eee1">getHBaseTableName</a>());</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; regionsLoc = HBaseTable.getRegionsInRange(hbaseTbl, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a>, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; } <span class="keywordflow">catch</span> (IOException e) {</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> RuntimeException(</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="stringliteral">&quot;couldn&#39;t retrieve HBase table (&quot;</span> + tbl.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html#aa78f85f02f4089f443552e9313d1eee1">getHBaseTableName</a>() + <span class="stringliteral">&quot;) info:\n&quot;</span></div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; + e.getMessage());</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// Convert list of HRegionLocation to Map&lt;hostport, List&lt;HRegionLocation&gt;&gt;.</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// The List&lt;HRegionLocations&gt;&#39;s end up being sorted by start key/end key, because</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="comment">// regionsLoc is sorted that way.</span></div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; Map&lt;String, List&lt;HRegionLocation&gt;&gt; locationMap = Maps.newHashMap();</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">for</span> (HRegionLocation regionLoc: regionsLoc) {</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; String locHostPort = regionLoc.getHostnamePort();</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">if</span> (locationMap.containsKey(locHostPort)) {</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; locationMap.get(locHostPort).add(regionLoc);</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; locationMap.put(locHostPort, Lists.newArrayList(regionLoc));</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">for</span> (Map.Entry&lt;String, List&lt;HRegionLocation&gt;&gt; locEntry: locationMap.entrySet()) {</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="comment">// HBaseTableScanner(backend) initializes a result scanner for each key range.</span></div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="comment">// To minimize # of result scanner re-init, create only a single HBaseKeyRange</span></div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="comment">// for all adjacent regions on this server.</span></div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; THBaseKeyRange keyRange = null;</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; byte[] prevEndKey = null;</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">for</span> (HRegionLocation regionLoc: locEntry.getValue()) {</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; byte[] curRegStartKey = regionLoc.getRegionInfo().getStartKey();</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; byte[] curRegEndKey = regionLoc.getRegionInfo().getEndKey();</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">if</span> (prevEndKey != null &amp;&amp;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; Bytes.compareTo(prevEndKey, curRegStartKey) == 0) {</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// the current region starts where the previous one left off;</span></div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// extend the key range</span></div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abc04d0e82763627998e4ebfeae6f8b8c">setKeyRangeEnd</a>(keyRange, curRegEndKey);</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// create a new HBaseKeyRange (and TScanRange2/TScanRangeLocations to go</span></div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// with it).</span></div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; keyRange = <span class="keyword">new</span> THBaseKeyRange();</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a673148d653820a469fb39956a333c17b">setKeyRangeStart</a>(keyRange, curRegStartKey);</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abc04d0e82763627998e4ebfeae6f8b8c">setKeyRangeEnd</a>(keyRange, curRegEndKey);</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; TScanRangeLocations scanRangeLocation = <span class="keyword">new</span> TScanRangeLocations();</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; TNetworkAddress networkAddress = <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html#a69fc5054ccc95a687e02b5275acd9e45">addressToTNetworkAddress</a>(locEntry.getKey());</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; scanRangeLocation.addToLocations(</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keyword">new</span> TScanRangeLocation(analyzer.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html#ac0c1510279ef3597b842e4adc803ffc3">getHostIndex</a>().getIndex(networkAddress)));</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; scanRanges_.add(scanRangeLocation);</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; TScanRange scanRange = <span class="keyword">new</span> TScanRange();</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; scanRange.setHbase_key_range(keyRange);</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; scanRangeLocation.setScan_range(scanRange);</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; prevEndKey = curRegEndKey;</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div>
<div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a673148d653820a469fb39956a333c17b"> 359</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a673148d653820a469fb39956a333c17b">setKeyRangeStart</a>(THBaseKeyRange keyRange, byte[] rangeStartKey) {</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; keyRange.unsetStartKey();</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="comment">// use the max(startKey, rangeStartKey) for scan start</span></div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">if</span> (!Bytes.equals(rangeStartKey, HConstants.EMPTY_START_ROW) ||</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; !Bytes.equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a>, HConstants.EMPTY_START_ROW)) {</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; byte[] partStart = (Bytes.compareTo(rangeStartKey, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a>) &lt; 0) ?</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; startKey_ : rangeStartKey;</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; keyRange.setStartKey(Bytes.toString(partStart));</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div>
<div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abc04d0e82763627998e4ebfeae6f8b8c"> 375</a></span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abc04d0e82763627998e4ebfeae6f8b8c">setKeyRangeEnd</a>(THBaseKeyRange keyRange, byte[] rangeEndKey) {</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; keyRange.unsetStopKey();</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="comment">// use the min(stopkey, regionStopKey) for scan stop</span></div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (!Bytes.equals(rangeEndKey, HConstants.EMPTY_END_ROW) ||</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; !Bytes.equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>, HConstants.EMPTY_END_ROW)) {</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">if</span> (Bytes.equals(stopKey_, HConstants.EMPTY_END_ROW)) {</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; keyRange.setStopKey(Bytes.toString(rangeEndKey));</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Bytes.equals(rangeEndKey, HConstants.EMPTY_END_ROW)) {</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; keyRange.setStopKey(Bytes.toString(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>));</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; byte[] partEnd = (Bytes.compareTo(rangeEndKey, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>) &lt; 0) ?</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; rangeEndKey : <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>;</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; keyRange.setStopKey(Bytes.toString(partEnd));</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; @Override</div>
<div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a621f4fa7a42a17c30356e4b7489aebd5"> 393</a></span>&#160; <span class="keyword">protected</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a621f4fa7a42a17c30356e4b7489aebd5">getNodeExplainString</a>(String prefix, String detailPrefix,</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; TExplainLevel detailLevel) {</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a> table = (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">HBaseTable</a>) <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#ab82bdc60c694df8db1aeb1c77fd3c7a9">getTable</a>();</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; StringBuilder output = <span class="keyword">new</span> StringBuilder();</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1">isEmpty_</a>) {</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; output.append(prefix + <span class="stringliteral">&quot;empty scan node\n&quot;</span>);</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">return</span> output.toString();</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; String aliasStr = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">if</span> (!table.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Table.html#a5b21c8bb6e4867e76fc27abd43cfa62a">getFullName</a>().equalsIgnoreCase(desc_.getAlias()) &amp;&amp;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; !table.getName().equalsIgnoreCase(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">desc_</a>.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#ae375af570df03440405e9f07897f1ad8">getAlias</a>())) {</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; aliasStr = <span class="stringliteral">&quot; &quot;</span> + desc_.getAlias();</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; output.append(String.format(<span class="stringliteral">&quot;%s%s:%s [%s%s]\n&quot;</span>, prefix, id_.toString(),</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#ac27ac0a9f2c4e08424efac97a5cb49d9">displayName_</a>, table.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Table.html#a5b21c8bb6e4867e76fc27abd43cfa62a">getFullName</a>(), aliasStr));</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span> (detailLevel.ordinal() &gt;= TExplainLevel.STANDARD.ordinal()) {</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">if</span> (!Bytes.equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a>, HConstants.EMPTY_START_ROW)) {</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; output.append(detailPrefix + <span class="stringliteral">&quot;start key: &quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a621d1f7f0e5401279f010282c4c5b89b">printKey</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a>) + <span class="stringliteral">&quot;\n&quot;</span>);</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span> (!Bytes.equals(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>, HConstants.EMPTY_END_ROW)) {</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; output.append(detailPrefix + <span class="stringliteral">&quot;stop key: &quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a621d1f7f0e5401279f010282c4c5b89b">printKey</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>) + <span class="stringliteral">&quot;\n&quot;</span>);</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a57b3dfffe657c21a2bcac949337abc44">filters_</a>.isEmpty()) {</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; output.append(detailPrefix + <span class="stringliteral">&quot;hbase filters:&quot;</span>);</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a57b3dfffe657c21a2bcac949337abc44">filters_</a>.size() == 1) {</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; THBaseFilter filter = filters_.get(0);</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; output.append(<span class="stringliteral">&quot; &quot;</span> + filter.family + <span class="stringliteral">&quot;:&quot;</span> + filter.qualifier + <span class="stringliteral">&quot; &quot;</span> +</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; CompareFilter.CompareOp.values()[filter.op_ordinal].toString() + <span class="stringliteral">&quot; &quot;</span> +</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="stringliteral">&quot;&#39;&quot;</span> + filter.filter_constant + <span class="stringliteral">&quot;&#39;&quot;</span>);</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; filters_.size(); ++i) {</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; THBaseFilter filter = filters_.get(i);</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; output.append(<span class="stringliteral">&quot;\n &quot;</span> + filter.family + <span class="stringliteral">&quot;:&quot;</span> + filter.qualifier + <span class="stringliteral">&quot; &quot;</span> +</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; CompareFilter.CompareOp.values()[filter.op_ordinal].toString() + <span class="stringliteral">&quot; &quot;</span> +</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="stringliteral">&quot;&#39;&quot;</span> + filter.filter_constant + <span class="stringliteral">&quot;&#39;&quot;</span>);</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; output.append(<span class="charliteral">&#39;\n&#39;</span>);</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; }</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a61f4bd6892dfde12236a27fffcad70cb">conjuncts_</a>.isEmpty()) {</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; output.append(</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; detailPrefix + <span class="stringliteral">&quot;predicates: &quot;</span> + <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a074eb8afca29fc9174acdb379d624ef2">getExplainString</a>(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a61f4bd6892dfde12236a27fffcad70cb">conjuncts_</a>) + <span class="stringliteral">&quot;\n&quot;</span>);</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">if</span> (detailLevel.ordinal() &gt;= TExplainLevel.EXTENDED.ordinal()) {</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; output.append(<a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html#a9b0e9ab3c75f1cfbfce9201eadf25dcd">getStatsExplainString</a>(detailPrefix, detailLevel));</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; output.append(<span class="stringliteral">&quot;\n&quot;</span>);</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">return</span> output.toString();</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div>
<div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad32a76d4eb9ba1102580531283cab4e3"> 447</a></span>&#160; <span class="keyword">private</span> byte[] <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad32a76d4eb9ba1102580531283cab4e3">convertToBytes</a>(String rowKey, <span class="keywordtype">boolean</span> nextKey) {</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; byte[] keyBytes = Bytes.toBytes(rowKey);</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">if</span> (!nextKey) {</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">return</span> keyBytes;</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">// append \0</span></div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">return</span> Arrays.copyOf(keyBytes, keyBytes.length + 1);</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;</div>
<div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a621d1f7f0e5401279f010282c4c5b89b"> 461</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> String <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a621d1f7f0e5401279f010282c4c5b89b">printKey</a>(byte[] key) {</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; StringBuilder result = <span class="keyword">new</span> StringBuilder();</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; key.length; ++i) {</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">if</span> (!Character.isISOControl(key[i])) {</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; result.append((char) key[i]);</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; result.append(<span class="stringliteral">&quot;\\&quot;</span>);</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; result.append(Integer.toOctalString(key[i]));</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> result.toString();</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;</div>
<div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a0447b8956f739d58f5df16e9a6374871"> 474</a></span>&#160; <span class="keyword">private</span> <span class="keyword">static</span> CompareFilter.CompareOp <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a0447b8956f739d58f5df16e9a6374871">impalaOpToHBaseOp</a>(</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1BinaryPredicate.html">BinaryPredicate</a>.Operator impalaOp) {</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">switch</span>(impalaOp) {</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">case</span> EQ: <span class="keywordflow">return</span> CompareFilter.CompareOp.EQUAL;</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">case</span> NE: <span class="keywordflow">return</span> CompareFilter.CompareOp.NOT_EQUAL;</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">case</span> GT: <span class="keywordflow">return</span> CompareFilter.CompareOp.GREATER;</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">case</span> GE: <span class="keywordflow">return</span> CompareFilter.CompareOp.GREATER_OR_EQUAL;</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">case</span> LT: <span class="keywordflow">return</span> CompareFilter.CompareOp.LESS;</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">case</span> LE: <span class="keywordflow">return</span> CompareFilter.CompareOp.LESS_OR_EQUAL;</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="comment">// TODO: Add support for pushing LIKE/REGEX down to HBase with a different Filter.</span></div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">throw</span> <span class="keyword">new</span> IllegalArgumentException(</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="stringliteral">&quot;HBase: Unsupported Impala compare operator: &quot;</span> + impalaOp);</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; }</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; @Override</div>
<div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ac0ad3d1fe5799ff43e2bfe32eda69070"> 490</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ac0ad3d1fe5799ff43e2bfe32eda69070">computeCosts</a>(TQueryOptions queryOptions) {</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="comment">// TODO: What&#39;s a good estimate of memory consumption?</span></div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a37c30672999db94543604ed98471893e">perHostMemCost_</a> = 1024L * 1024L * 1024L;</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div>
<div class="line"><a name="l00499"></a><span class="lineno"><a class="line" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a467cbd5dbb707fb1b9fb2592baa3d829"> 499</a></span>&#160; <span class="keyword">public</span> <span class="keyword">static</span> <span class="keywordtype">long</span> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a467cbd5dbb707fb1b9fb2592baa3d829">getPerHostMemUpperBound</a>() {</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="comment">// TODO: What&#39;s a good estimate of memory consumption?</span></div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">return</span> 1024L * 1024L * 1024L;</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; }</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;}</div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseColumn_html_a469d9ff29af3453c76cfe2c1d3890e0a"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseColumn.html#a469d9ff29af3453c76cfe2c1d3890e0a">com.cloudera.impala.catalog.HBaseColumn.getColumnFamily</a></div><div class="ttdeci">String getColumnFamily()</div><div class="ttdef"><b>Definition:</b> <a href="HBaseColumn_8java_source.html#l00036">HBaseColumn.java:36</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a467cbd5dbb707fb1b9fb2592baa3d829"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a467cbd5dbb707fb1b9fb2592baa3d829">com.cloudera.impala.planner.HBaseScanNode.getPerHostMemUpperBound</a></div><div class="ttdeci">static long getPerHostMemUpperBound()</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00499">HBaseScanNode.java:499</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html">com.cloudera.impala.planner.ScanNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ScanNode_8java_source.html#l00032">ScanNode.java:32</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode_html_aef7d931f6a4df4c38e19674eac6d09de"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html#aef7d931f6a4df4c38e19674eac6d09de">com.cloudera.impala.planner.ScanNode.inputCardinality_</a></div><div class="ttdeci">long inputCardinality_</div><div class="ttdef"><b>Definition:</b> <a href="ScanNode_8java_source.html#l00036">ScanNode.java:36</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html">com.cloudera.impala.analysis.TupleDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="TupleDescriptor_8java_source.html#l00054">TupleDescriptor.java:54</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode_html_a69fc5054ccc95a687e02b5275acd9e45"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html#a69fc5054ccc95a687e02b5275acd9e45">com.cloudera.impala.planner.ScanNode.addressToTNetworkAddress</a></div><div class="ttdeci">static TNetworkAddress addressToTNetworkAddress(String address)</div><div class="ttdef"><b>Definition:</b> <a href="ScanNode_8java_source.html#l00132">ScanNode.java:132</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseColumn_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseColumn.html">com.cloudera.impala.catalog.HBaseColumn</a></div><div class="ttdef"><b>Definition:</b> <a href="HBaseColumn_8java_source.html#l00023">HBaseColumn.java:23</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_a37c30672999db94543604ed98471893e"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a37c30672999db94543604ed98471893e">com.cloudera.impala.planner.PlanNode.perHostMemCost_</a></div><div class="ttdeci">long perHostMemCost_</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00114">PlanNode.java:114</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a57b3dfffe657c21a2bcac949337abc44"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a57b3dfffe657c21a2bcac949337abc44">com.cloudera.impala.planner.HBaseScanNode.filters_</a></div><div class="ttdeci">final List&lt; THBaseFilter &gt; filters_</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00089">HBaseScanNode.java:89</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_ad0c1643f1e823e085a10ea5ca0b58ec1"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad0c1643f1e823e085a10ea5ca0b58ec1">com.cloudera.impala.planner.HBaseScanNode.MAX_HBASE_FETCH_BATCH_SIZE</a></div><div class="ttdeci">static final int MAX_HBASE_FETCH_BATCH_SIZE</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00098">HBaseScanNode.java:98</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1BinaryPredicate_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1BinaryPredicate.html">com.cloudera.impala.analysis.BinaryPredicate</a></div><div class="ttdef"><b>Definition:</b> <a href="BinaryPredicate_8java_source.html#l00042">BinaryPredicate.java:42</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_a93c6ed48d9fd753d6e066d64858a019f"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a93c6ed48d9fd753d6e066d64858a019f">com.cloudera.impala.planner.PlanNode.numNodes_</a></div><div class="ttdeci">int numNodes_</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00107">PlanNode.java:107</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html">com.cloudera.impala.catalog.Type</a></div><div class="ttdef"><b>Definition:</b> <a href="Type_8java_source.html#l00042">Type.java:42</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a1f6412acf42b218c59bb2c9024f96af6"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">com.cloudera.impala.planner.HBaseScanNode.startKey_</a></div><div class="ttdeci">byte[] startKey_</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00080">HBaseScanNode.java:80</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_a3640f028c46f43b8cd5e95e264929c94"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a3640f028c46f43b8cd5e95e264929c94">com.cloudera.impala.planner.PlanNode.assignConjuncts</a></div><div class="ttdeci">void assignConjuncts(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00401">PlanNode.java:401</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a6750bd4cd186410640c4d01e6e2f43ad"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a6750bd4cd186410640c4d01e6e2f43ad">com.cloudera.impala.planner.HBaseScanNode.createHBaseFilters</a></div><div class="ttdeci">void createHBaseFilters(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00243">HBaseScanNode.java:243</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1StringLiteral_html_ab14b56397b4faf5570127f77ed240b77"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1StringLiteral.html#ab14b56397b4faf5570127f77ed240b77">com.cloudera.impala.analysis.StringLiteral.getValue</a></div><div class="ttdeci">String getValue()</div><div class="ttdef"><b>Definition:</b> <a href="StringLiteral_8java_source.html#l00072">StringLiteral.java:72</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type_html_a20128254897643f1f2a8bf575ffd8c41"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Type.html#a20128254897643f1f2a8bf575ffd8c41">com.cloudera.impala.catalog.Type.STRING</a></div><div class="ttdeci">static final ScalarType STRING</div><div class="ttdef"><b>Definition:</b> <a href="Type_8java_source.html#l00053">Type.java:53</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a621d1f7f0e5401279f010282c4c5b89b"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a621d1f7f0e5401279f010282c4c5b89b">com.cloudera.impala.planner.HBaseScanNode.printKey</a></div><div class="ttdeci">static String printKey(byte[] key)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00461">HBaseScanNode.java:461</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode_html_a9b0e9ab3c75f1cfbfce9201eadf25dcd"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html#a9b0e9ab3c75f1cfbfce9201eadf25dcd">com.cloudera.impala.planner.ScanNode.getStatsExplainString</a></div><div class="ttdeci">String getStatsExplainString(String prefix, TExplainLevel detailLevel)</div><div class="ttdef"><b>Definition:</b> <a href="ScanNode_8java_source.html#l00075">ScanNode.java:75</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_a074eb8afca29fc9174acdb379d624ef2"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a074eb8afca29fc9174acdb379d624ef2">com.cloudera.impala.planner.PlanNode.getExplainString</a></div><div class="ttdeci">String getExplainString()</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00219">PlanNode.java:219</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1service_1_1FeSupport_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1service_1_1FeSupport.html">com.cloudera.impala.service.FeSupport</a></div><div class="ttdef"><b>Definition:</b> <a href="FeSupport_8java_source.html#l00060">FeSupport.java:60</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_aea74288c4908d28a2a44675f6a69f01b"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aea74288c4908d28a2a44675f6a69f01b">com.cloudera.impala.planner.HBaseScanNode.computeStats</a></div><div class="ttdeci">void computeStats(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00190">HBaseScanNode.java:190</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_a04bb91215a1a50a038ce703e2dc78414"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a04bb91215a1a50a038ce703e2dc78414">com.cloudera.impala.planner.PlanNode.cardinality_</a></div><div class="ttdeci">long cardinality_</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00103">PlanNode.java:103</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange_html_a734a761156b0564a6f91a1369d00d8a6"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange.html#a734a761156b0564a6f91a1369d00d8a6">com.cloudera.impala.planner.ValueRange.isEqRange</a></div><div class="ttdeci">boolean isEqRange()</div><div class="ttdef"><b>Definition:</b> <a href="ValueRange_8java_source.html#l00061">ValueRange.java:61</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange_html_af1046a1fc69975277fe5bc3dca740605"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange.html#af1046a1fc69975277fe5bc3dca740605">com.cloudera.impala.planner.ValueRange.getUpperBound</a></div><div class="ttdeci">Expr getUpperBound()</div><div class="ttdef"><b>Definition:</b> <a href="ValueRange_8java_source.html#l00047">ValueRange.java:47</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a673148d653820a469fb39956a333c17b"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a673148d653820a469fb39956a333c17b">com.cloudera.impala.planner.HBaseScanNode.setKeyRangeStart</a></div><div class="ttdeci">void setKeyRangeStart(THBaseKeyRange keyRange, byte[] rangeStartKey)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00359">HBaseScanNode.java:359</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_aa09e0eed1ed191ac6dee638a1d0c6015"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aa09e0eed1ed191ac6dee638a1d0c6015">com.cloudera.impala.planner.HBaseScanNode.debugString</a></div><div class="ttdeci">String debugString()</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00222">HBaseScanNode.java:222</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a90347a04043f640112f8f34c2232f2ee"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a90347a04043f640112f8f34c2232f2ee">com.cloudera.impala.planner.HBaseScanNode.DEFAULT_SUGGESTED_CACHING</a></div><div class="ttdeci">static final int DEFAULT_SUGGESTED_CACHING</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00099">HBaseScanNode.java:99</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a1a61a4de8d9e6606f61e580a933744e1"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1a61a4de8d9e6606f61e580a933744e1">com.cloudera.impala.planner.HBaseScanNode.computeScanRangeLocations</a></div><div class="ttdeci">void computeScanRangeLocations(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00286">HBaseScanNode.java:286</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_abeaebfd273a194d5b1d91636932f9cac"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abeaebfd273a194d5b1d91636932f9cac">com.cloudera.impala.planner.HBaseScanNode.setStartStopKey</a></div><div class="ttdeci">void setStartStopKey(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00141">HBaseScanNode.java:141</a></div></div>
<div class="ttc" id="enumcom_1_1cloudera_1_1impala_1_1catalog_1_1PrimitiveType_html_a9ba86e827d4ea1ee853666e7c119e97e"><div class="ttname"><a href="enumcom_1_1cloudera_1_1impala_1_1catalog_1_1PrimitiveType.html#a9ba86e827d4ea1ee853666e7c119e97e">com.cloudera.impala.catalog.PrimitiveType.STRING</a></div><div class="ttdeci">STRING</div><div class="ttdef"><b>Definition:</b> <a href="PrimitiveType_8java_source.html#l00040">PrimitiveType.java:40</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor_html_a192f19cb7c2c1f102e14c7c782a61159"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#a192f19cb7c2c1f102e14c7c782a61159">com.cloudera.impala.analysis.TupleDescriptor.getId</a></div><div class="ttdeci">TupleId getId()</div><div class="ttdef"><b>Definition:</b> <a href="TupleDescriptor_8java_source.html#l00095">TupleDescriptor.java:95</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange.html">com.cloudera.impala.planner.ValueRange</a></div><div class="ttdef"><b>Definition:</b> <a href="ValueRange_8java_source.html#l00035">ValueRange.java:35</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Expr.html">com.cloudera.impala.analysis.Expr</a></div><div class="ttdef"><b>Definition:</b> <a href="Expr_8java_source.html#l00048">Expr.java:48</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_abc04d0e82763627998e4ebfeae6f8b8c"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abc04d0e82763627998e4ebfeae6f8b8c">com.cloudera.impala.planner.HBaseScanNode.setKeyRangeEnd</a></div><div class="ttdeci">void setKeyRangeEnd(THBaseKeyRange keyRange, byte[] rangeEndKey)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00375">HBaseScanNode.java:375</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_ad66ec3af2475d858d1ca89b7ff15ffd1"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad66ec3af2475d858d1ca89b7ff15ffd1">com.cloudera.impala.planner.HBaseScanNode.isEmpty_</a></div><div class="ttdeci">boolean isEmpty_</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00086">HBaseScanNode.java:86</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable_html_aa78f85f02f4089f443552e9313d1eee1"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html#aa78f85f02f4089f443552e9313d1eee1">com.cloudera.impala.catalog.HBaseTable.getHBaseTableName</a></div><div class="ttdeci">String getHBaseTableName(org.apache.hadoop.hive.metastore.api.Table tbl)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseTable_8java_source.html#l00377">HBaseTable.java:377</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1SlotDescriptor_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1SlotDescriptor.html">com.cloudera.impala.analysis.SlotDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="SlotDescriptor_8java_source.html#l00029">SlotDescriptor.java:29</a></div></div>
<div class="ttc" id="namespaceimpala_html_aa5bce0d3309643287a67504146c2f871"><div class="ttname"><a href="namespaceimpala.html#aa5bce0d3309643287a67504146c2f871">impala::PrimitiveType</a></div><div class="ttdeci">PrimitiveType</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00027">types.h:27</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor_html_a9a335d81cfb69d3d2a6f85554489b852"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#a9a335d81cfb69d3d2a6f85554489b852">com.cloudera.impala.analysis.TupleDescriptor.getSlots</a></div><div class="ttdeci">ArrayList&lt; SlotDescriptor &gt; getSlots()</div><div class="ttdef"><b>Definition:</b> <a href="TupleDescriptor_8java_source.html#l00096">TupleDescriptor.java:96</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor_html_ae375af570df03440405e9f07897f1ad8"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#ae375af570df03440405e9f07897f1ad8">com.cloudera.impala.analysis.TupleDescriptor.getAlias</a></div><div class="ttdeci">String getAlias()</div><div class="ttdef"><b>Definition:</b> <a href="TupleDescriptor_8java_source.html#l00131">TupleDescriptor.java:131</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_abab87c6b761de19041311030895379f5"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#abab87c6b761de19041311030895379f5">com.cloudera.impala.planner.HBaseScanNode.keyRanges_</a></div><div class="ttdeci">List&lt; ValueRange &gt; keyRanges_</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00076">HBaseScanNode.java:76</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_aec98d8afc546f531d9542acb7fe6c215"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aec98d8afc546f531d9542acb7fe6c215">com.cloudera.impala.planner.HBaseScanNode.toThrift</a></div><div class="ttdeci">void toThrift(TPlanNode msg)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00270">HBaseScanNode.java:270</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1StringLiteral_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1StringLiteral.html">com.cloudera.impala.analysis.StringLiteral</a></div><div class="ttdef"><b>Definition:</b> <a href="StringLiteral_8java_source.html#l00034">StringLiteral.java:34</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_a61f4bd6892dfde12236a27fffcad70cb"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a61f4bd6892dfde12236a27fffcad70cb">com.cloudera.impala.planner.PlanNode.conjuncts_</a></div><div class="ttdeci">List&lt; Expr &gt; conjuncts_</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00086">PlanNode.java:86</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1common_1_1InternalException_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1common_1_1InternalException.html">com.cloudera.impala.common.InternalException</a></div><div class="ttdef"><b>Definition:</b> <a href="InternalException_8java_source.html#l00021">InternalException.java:21</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html">com.cloudera.impala.planner.HBaseScanNode</a></div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00068">HBaseScanNode.java:68</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNodeId_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNodeId.html">com.cloudera.impala.planner.PlanNodeId</a></div><div class="ttdef"><b>Definition:</b> <a href="PlanNodeId_8java_source.html#l00020">PlanNodeId.java:20</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html">com.cloudera.impala.analysis.Analyzer</a></div><div class="ttdef"><b>Definition:</b> <a href="Analyzer_8java_source.html#l00105">Analyzer.java:105</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a24f48f52e056ae4dbeff6ef694a3d93a"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a24f48f52e056ae4dbeff6ef694a3d93a">com.cloudera.impala.planner.HBaseScanNode.LOG</a></div><div class="ttdeci">static final Logger LOG</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00069">HBaseScanNode.java:69</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a5210e1615a9fd12ec68911e38ac94635"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a5210e1615a9fd12ec68911e38ac94635">com.cloudera.impala.planner.HBaseScanNode.desc_</a></div><div class="ttdeci">final TupleDescriptor desc_</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00070">HBaseScanNode.java:70</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_ac27ac0a9f2c4e08424efac97a5cb49d9"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#ac27ac0a9f2c4e08424efac97a5cb49d9">com.cloudera.impala.planner.PlanNode.displayName_</a></div><div class="ttdeci">String displayName_</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00066">PlanNode.java:66</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_ad94a6f9eb5b1392c47d99e34653848d1"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad94a6f9eb5b1392c47d99e34653848d1">com.cloudera.impala.planner.HBaseScanNode.init</a></div><div class="ttdeci">void init(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00116">HBaseScanNode.java:116</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_ac0ad3d1fe5799ff43e2bfe32eda69070"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ac0ad3d1fe5799ff43e2bfe32eda69070">com.cloudera.impala.planner.HBaseScanNode.computeCosts</a></div><div class="ttdeci">void computeCosts(TQueryOptions queryOptions)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00490">HBaseScanNode.java:490</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_ae85be815a5423c220a5cadffd73a58b4"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#ae85be815a5423c220a5cadffd73a58b4">com.cloudera.impala.planner.PlanNode.computeMemLayout</a></div><div class="ttdeci">void computeMemLayout(Analyzer analyzer)</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00475">PlanNode.java:475</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a28bbc7169dbd7596c74f5ad10e9268f7"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a28bbc7169dbd7596c74f5ad10e9268f7">com.cloudera.impala.planner.HBaseScanNode.suggestedCaching_</a></div><div class="ttdeci">int suggestedCaching_</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00100">HBaseScanNode.java:100</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_aae2cef1553d228963b576a2e681a6fc9"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">com.cloudera.impala.planner.HBaseScanNode.stopKey_</a></div><div class="ttdeci">byte[] stopKey_</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00081">HBaseScanNode.java:81</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_aa14ba07f8429b799ccbce5714e84400d"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#aa14ba07f8429b799ccbce5714e84400d">com.cloudera.impala.planner.PlanNode.capAtLimit</a></div><div class="ttdeci">long capAtLimit(long cardinality)</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00450">PlanNode.java:450</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable_html"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html">com.cloudera.impala.catalog.HBaseTable</a></div><div class="ttdef"><b>Definition:</b> <a href="HBaseTable_8java_source.html#l00076">HBaseTable.java:76</a></div></div>
<div class="ttc" id="enumcom_1_1cloudera_1_1impala_1_1catalog_1_1PrimitiveType_html"><div class="ttname"><a href="enumcom_1_1cloudera_1_1impala_1_1catalog_1_1PrimitiveType.html">com.cloudera.impala.catalog.PrimitiveType</a></div><div class="ttdef"><b>Definition:</b> <a href="PrimitiveType_8java_source.html#l00022">PrimitiveType.java:22</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange_html_ab5e7c78b9a1b091e921d61c0e161f113"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ValueRange.html#ab5e7c78b9a1b091e921d61c0e161f113">com.cloudera.impala.planner.ValueRange.getLowerBound</a></div><div class="ttdeci">Expr getLowerBound()</div><div class="ttdef"><b>Definition:</b> <a href="ValueRange_8java_source.html#l00043">ValueRange.java:43</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1BinaryPredicate_html_a773c89d3973d81bf8102162f06e08dc6"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1BinaryPredicate.html#a773c89d3973d81bf8102162f06e08dc6">com.cloudera.impala.analysis.BinaryPredicate.getOp</a></div><div class="ttdeci">Operator getOp()</div><div class="ttdef"><b>Definition:</b> <a href="BinaryPredicate_8java_source.html#l00107">BinaryPredicate.java:107</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a544a3067f00b988b82bd9ab1da399b79"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a544a3067f00b988b82bd9ab1da399b79">com.cloudera.impala.planner.HBaseScanNode.hbaseConf_</a></div><div class="ttdeci">static Configuration hbaseConf_</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00103">HBaseScanNode.java:103</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_a22ffb5792713456084d84ca51c5e5a44"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a22ffb5792713456084d84ca51c5e5a44">com.cloudera.impala.planner.PlanNode.computeSelectivity</a></div><div class="ttdeci">double computeSelectivity()</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00484">PlanNode.java:484</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a2b42ff4da27110ea43ce82dd4147b604"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a2b42ff4da27110ea43ce82dd4147b604">com.cloudera.impala.planner.HBaseScanNode.setKeyRanges</a></div><div class="ttdeci">void setKeyRanges(List&lt; ValueRange &gt; keyRanges)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00110">HBaseScanNode.java:110</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode_html_a582ec5180d2747e3415fef20f144c856"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1ScanNode.html#a582ec5180d2747e3415fef20f144c856">com.cloudera.impala.planner.ScanNode.scanRanges_</a></div><div class="ttdeci">List&lt; TScanRangeLocations &gt; scanRanges_</div><div class="ttdef"><b>Definition:</b> <a href="ScanNode_8java_source.html#l00042">ScanNode.java:42</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_ad32a76d4eb9ba1102580531283cab4e3"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#ad32a76d4eb9ba1102580531283cab4e3">com.cloudera.impala.planner.HBaseScanNode.convertToBytes</a></div><div class="ttdeci">byte[] convertToBytes(String rowKey, boolean nextKey)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00447">HBaseScanNode.java:447</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode_html_a6113f9a419fbab952ed7063715d9a4fd"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1PlanNode.html#a6113f9a419fbab952ed7063715d9a4fd">com.cloudera.impala.planner.PlanNode.getNumNodes</a></div><div class="ttdeci">int getNumNodes()</div><div class="ttdef"><b>Definition:</b> <a href="PlanNode_8java_source.html#l00173">PlanNode.java:173</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a621f4fa7a42a17c30356e4b7489aebd5"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a621f4fa7a42a17c30356e4b7489aebd5">com.cloudera.impala.planner.HBaseScanNode.getNodeExplainString</a></div><div class="ttdeci">String getNodeExplainString(String prefix, String detailPrefix, TExplainLevel detailLevel)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00393">HBaseScanNode.java:393</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer_html_ac0c1510279ef3597b842e4adc803ffc3"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1Analyzer.html#ac0c1510279ef3597b842e4adc803ffc3">com.cloudera.impala.analysis.Analyzer.getHostIndex</a></div><div class="ttdeci">ListMap&lt; TNetworkAddress &gt; getHostIndex()</div><div class="ttdef"><b>Definition:</b> <a href="Analyzer_8java_source.html#l02070">Analyzer.java:2070</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor_html_ab82bdc60c694df8db1aeb1c77fd3c7a9"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1analysis_1_1TupleDescriptor.html#ab82bdc60c694df8db1aeb1c77fd3c7a9">com.cloudera.impala.analysis.TupleDescriptor.getTable</a></div><div class="ttdeci">Table getTable()</div><div class="ttdef"><b>Definition:</b> <a href="TupleDescriptor_8java_source.html#l00097">TupleDescriptor.java:97</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Table_html_a5b21c8bb6e4867e76fc27abd43cfa62a"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1Table.html#a5b21c8bb6e4867e76fc27abd43cfa62a">com.cloudera.impala.catalog.Table.getFullName</a></div><div class="ttdeci">String getFullName()</div><div class="ttdef"><b>Definition:</b> <a href="Table_8java_source.html#l00343">Table.java:343</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_af2c420f50a33681711cd83ed19ef8dd9"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#af2c420f50a33681711cd83ed19ef8dd9">com.cloudera.impala.planner.HBaseScanNode.HBaseScanNode</a></div><div class="ttdeci">HBaseScanNode(PlanNodeId id, TupleDescriptor desc)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00105">HBaseScanNode.java:105</a></div></div>
<div class="ttc" id="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode_html_a0447b8956f739d58f5df16e9a6374871"><div class="ttname"><a href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a0447b8956f739d58f5df16e9a6374871">com.cloudera.impala.planner.HBaseScanNode.impalaOpToHBaseOp</a></div><div class="ttdeci">static CompareFilter.CompareOp impalaOpToHBaseOp(BinaryPredicate.Operator impalaOp)</div><div class="ttdef"><b>Definition:</b> <a href="HBaseScanNode_8java_source.html#l00474">HBaseScanNode.java:474</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_ca2797c59c2e868cd2eca72571423f6a.html">fe</a></li><li class="navelem"><a class="el" href="dir_9456c03c9c6e5a96e843b28fc5c6395b.html">src</a></li><li class="navelem"><a class="el" href="dir_31c8d7a6e8855be2d8d6fa4227c487c3.html">main</a></li><li class="navelem"><a class="el" href="dir_d2615d3423c50009d0fa2801d3e0150c.html">java</a></li><li class="navelem"><a class="el" href="dir_df2af9fb37a2f3aedd0dd3e7b116eedc.html">com</a></li><li class="navelem"><a class="el" href="dir_48ee7e70be44cce637301d7ac948c4e1.html">cloudera</a></li><li class="navelem"><a class="el" href="dir_c062777d65f1b5dc463ca31df638b83a.html">impala</a></li><li class="navelem"><a class="el" href="dir_a3fab68f30a0ffb6d333069c8ce7d28d.html">planner</a></li><li class="navelem"><a class="el" href="HBaseScanNode_8java.html">HBaseScanNode.java</a></li>
<li class="footer">Generated on Thu May 7 2015 16:10:39 for Impala by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
</ul>
</div>
</body>
</html>