| <!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 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 List</span></a></li> |
| <li><a href="globals.html"><span>File 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"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </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> <span class="comment">// Copyright 2012 Cloudera Inc.</span></div> |
| <div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div> |
| <div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></div> |
| <div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <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> <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> <span class="comment">//</span></div> |
| <div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <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> <span class="comment">//</span></div> |
| <div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <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> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></div> |
| <div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <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> <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> <span class="comment">// limitations under the License.</span></div> |
| <div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div> |
| <div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">package </span>com.cloudera.impala.planner;</div> |
| <div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div> |
| <div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">import</span> java.io.IOException;</div> |
| <div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">import</span> java.nio.ByteBuffer;</div> |
| <div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">import</span> java.util.ArrayList;</div> |
| <div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">import</span> java.util.Arrays;</div> |
| <div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="keyword">import</span> java.util.List;</div> |
| <div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">import</span> java.util.Map;</div> |
| <div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div> |
| <div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">import</span> org.apache.hadoop.conf.Configuration;</div> |
| <div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">import</span> org.apache.hadoop.hbase.HBaseConfiguration;</div> |
| <div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> org.apache.hadoop.hbase.HConstants;</div> |
| <div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">import</span> org.apache.hadoop.hbase.HRegionLocation;</div> |
| <div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">import</span> org.apache.hadoop.hbase.client.HTable;</div> |
| <div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">import</span> org.apache.hadoop.hbase.filter.CompareFilter;</div> |
| <div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">import</span> org.apache.hadoop.hbase.util.Bytes;</div> |
| <div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">import</span> org.slf4j.Logger;</div> |
| <div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">import</span> org.slf4j.LoggerFactory;</div> |
| <div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div> |
| <div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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> <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> <span class="keyword">import</span> com.cloudera.impala.common.Pair;</div> |
| <div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <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> <span class="keyword">import</span> com.cloudera.impala.thrift.TColumnValue;</div> |
| <div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">import</span> com.cloudera.impala.thrift.TExplainLevel;</div> |
| <div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">import</span> com.cloudera.impala.thrift.THBaseFilter;</div> |
| <div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">import</span> com.cloudera.impala.thrift.THBaseKeyRange;</div> |
| <div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">import</span> com.cloudera.impala.thrift.THBaseScanNode;</div> |
| <div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">import</span> com.cloudera.impala.thrift.TNetworkAddress;</div> |
| <div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">import</span> com.cloudera.impala.thrift.TPlanNode;</div> |
| <div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">import</span> com.cloudera.impala.thrift.TPlanNodeType;</div> |
| <div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">import</span> com.cloudera.impala.thrift.TQueryOptions;</div> |
| <div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">import</span> com.cloudera.impala.thrift.TScanRange;</div> |
| <div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">import</span> com.cloudera.impala.thrift.TScanRangeLocation;</div> |
| <div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">import</span> com.cloudera.impala.thrift.TScanRangeLocations;</div> |
| <div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">import</span> com.google.common.base.Objects;</div> |
| <div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">import</span> com.google.common.base.Preconditions;</div> |
| <div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">import</span> com.google.common.collect.Lists;</div> |
| <div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">import</span> com.google.common.collect.Maps;</div> |
| <div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </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> <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>  <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>  <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> </div> |
| <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  <span class="comment">// A null entry means there's no range restriction for that particular key.</span></div> |
| <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <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>  <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>  <span class="keyword">private</span> List<ValueRange> <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> </div> |
| <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">// derived from keyRanges_; empty means unbounded;</span></div> |
| <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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>  <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>  <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> </div> |
| <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <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>  <span class="comment">// evaluates to null, or if the lower bound > upper bound, then this scan node won't</span></div> |
| <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <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>  <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> </div> |
| <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <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>  <span class="keyword">private</span> <span class="keyword">final</span> List<THBaseFilter> <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a57b3dfffe657c21a2bcac949337abc44">filters_</a> = <span class="keyword">new</span> ArrayList<THBaseFilter>();</div> |
| <div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div> |
| <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// The suggested value for "hbase.client.scan.setCaching", which batches maxCaching</span></div> |
| <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <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>  <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>  <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>  <span class="comment">// region server.</span></div> |
| <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <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>  <span class="comment">// won'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>  <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>  <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>  <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> </div> |
| <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <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>  <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> </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>  <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>  super(<span class="keywordtype">id</span>, desc, <span class="stringliteral">"SCAN HBASE"</span>);</div> |
| <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <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>  }</div> |
| <div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </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>  <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<ValueRange> keyRanges) {</div> |
| <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  Preconditions.checkNotNull(keyRanges);</div> |
| <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <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>  }</div> |
| <div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div> |
| <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  @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>  <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>  <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>  <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>  <span class="comment">// Convert predicates to HBase filters_.</span></div> |
| <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <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> </div> |
| <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="comment">// materialize slots in remaining conjuncts_</span></div> |
| <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  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>  <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>  <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> </div> |
| <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <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>  <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>  }</div> |
| <div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </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>  <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>  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>  Preconditions.checkState(keyRanges_.size() == 1);</div> |
| <div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div> |
| <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <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>  <span class="keywordflow">if</span> (rowRange != null) {</div> |
| <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <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>  Preconditions.checkState(rowRange.getLowerBound().isConstant());</div> |
| <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  Preconditions.checkState(</div> |
| <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  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>  TColumnValue val = FeSupport.EvalConstExpr(rowRange.getLowerBound(),</div> |
| <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  analyzer.getQueryCtx());</div> |
| <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span> (!val.isSetString_val()) {</div> |
| <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="comment">// lower bound is null.</span></div> |
| <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <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>  <span class="keywordflow">return</span>;</div> |
| <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  } <span class="keywordflow">else</span> {</div> |
| <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  !rowRange.getLowerBoundInclusive());</div> |
| <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div> |
| <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div> |
| <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <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>  Preconditions.checkState(rowRange.getUpperBound().isConstant());</div> |
| <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  Preconditions.checkState(</div> |
| <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  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>  TColumnValue val = FeSupport.EvalConstExpr(rowRange.getUpperBound(),</div> |
| <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  analyzer.getQueryCtx());</div> |
| <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">if</span> (!val.isSetString_val()) {</div> |
| <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="comment">// upper bound is null.</span></div> |
| <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <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>  <span class="keywordflow">return</span>;</div> |
| <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  } <span class="keywordflow">else</span> {</div> |
| <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <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>  rowRange.getUpperBoundInclusive());</div> |
| <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div> |
| <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div> |
| <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div> |
| <div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div> |
| <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <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>  <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_) > 0) && !endKeyIsEndOfTable) {</div> |
| <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="comment">// Lower bound is greater than upper bound.</span></div> |
| <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <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>  }</div> |
| <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div> |
| <div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div> |
| <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  @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>  <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>  super.computeStats(analyzer);</div> |
| <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <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> </div> |
| <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <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>  <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>  <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>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rowRange != null && 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>  <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>  } <span class="keywordflow">else</span> {</div> |
| <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="comment">// Set maxCaching so that each fetch from hbase won't return a batch of more than</span></div> |
| <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="comment">// MAX_HBASE_FETCH_BATCH_SIZE bytes.</span></div> |
| <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  Pair<Long, Long> 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>  <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>  <span class="keywordflow">if</span> (estimate.second.longValue() > 0) {</div> |
| <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <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>  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>  }</div> |
| <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  }</div> |
| <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <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> </div> |
| <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <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>  <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>  <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>  LOG.debug(<span class="stringliteral">"computeStats HbaseScan: cardinality="</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> </div> |
| <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="comment">// TODO: take actual regions into account</span></div> |
| <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <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>  LOG.debug(<span class="stringliteral">"computeStats HbaseScan: #nodes="</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>  }</div> |
| <div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div> |
| <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  @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>  <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>  <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>  <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>  .add(<span class="stringliteral">"tid"</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>  .add(<span class="stringliteral">"hiveTblName"</span>, tbl.getFullName())</div> |
| <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  .add(<span class="stringliteral">"hbaseTblName"</span>, tbl.getHBaseTableName())</div> |
| <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  .add(<span class="stringliteral">"startKey"</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>  .add(<span class="stringliteral">"stopKey"</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>  .add(<span class="stringliteral">"isEmpty"</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>  .addValue(super.debugString())</div> |
| <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  .toString();</div> |
| <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div> |
| <div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div> |
| <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="comment">// We convert predicates of the form <slotref> op <constant> where slotref is of</span></div> |
| <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <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>  <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>  <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>  <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>  <span class="comment">// scans don't return correct data.</span></div> |
| <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <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>  <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>  <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>  <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>  <span class="comment">// We only consider binary predicates</span></div> |
| <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <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>  BinaryPredicate bp = (BinaryPredicate) e;</div> |
| <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  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>  <span class="comment">// Ignore unsupported ops</span></div> |
| <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <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> </div> |
| <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <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>  <span class="comment">// Only push down predicates on string columns</span></div> |
| <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <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> </div> |
| <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <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>  <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> </div> |
| <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  StringLiteral literal = (StringLiteral) bindingExpr;</div> |
| <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <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>  filters_.add(<span class="keyword">new</span> THBaseFilter(</div> |
| <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  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>  (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>  analyzer.materializeSlots(Lists.newArrayList(e));</div> |
| <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div> |
| <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div> |
| <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div> |
| <div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div> |
| <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  @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>  <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>  msg.node_type = TPlanNodeType.HBASE_SCAN_NODE;</div> |
| <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <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>  msg.hbase_scan_node =</div> |
| <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <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>  <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>  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>  }</div> |
| <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  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>  }</div> |
| <div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </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>  <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>  <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> </div> |
| <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <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>  <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> </div> |
| <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <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>  <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>  HTable hbaseTbl = null;</div> |
| <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  List<HRegionLocation> regionsLoc;</div> |
| <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">try</span> {</div> |
| <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  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>  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>  } <span class="keywordflow">catch</span> (IOException e) {</div> |
| <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> RuntimeException(</div> |
| <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="stringliteral">"couldn't retrieve HBase table ("</span> + tbl.<a class="code" href="classcom_1_1cloudera_1_1impala_1_1catalog_1_1HBaseTable.html#aa78f85f02f4089f443552e9313d1eee1">getHBaseTableName</a>() + <span class="stringliteral">") info:\n"</span></div> |
| <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  + e.getMessage());</div> |
| <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div> |
| <div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div> |
| <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="comment">// Convert list of HRegionLocation to Map<hostport, List<HRegionLocation>>.</span></div> |
| <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="comment">// The List<HRegionLocations>'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>  <span class="comment">// regionsLoc is sorted that way.</span></div> |
| <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  Map<String, List<HRegionLocation>> locationMap = Maps.newHashMap();</div> |
| <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">for</span> (HRegionLocation regionLoc: regionsLoc) {</div> |
| <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  String locHostPort = regionLoc.getHostnamePort();</div> |
| <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (locationMap.containsKey(locHostPort)) {</div> |
| <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  locationMap.get(locHostPort).add(regionLoc);</div> |
| <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  } <span class="keywordflow">else</span> {</div> |
| <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  locationMap.put(locHostPort, Lists.newArrayList(regionLoc));</div> |
| <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div> |
| <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div> |
| <div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div> |
| <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">for</span> (Map.Entry<String, List<HRegionLocation>> locEntry: locationMap.entrySet()) {</div> |
| <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <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>  <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>  <span class="comment">// for all adjacent regions on this server.</span></div> |
| <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  THBaseKeyRange keyRange = null;</div> |
| <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  byte[] prevEndKey = null;</div> |
| <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">for</span> (HRegionLocation regionLoc: locEntry.getValue()) {</div> |
| <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  byte[] curRegStartKey = regionLoc.getRegionInfo().getStartKey();</div> |
| <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  byte[] curRegEndKey = regionLoc.getRegionInfo().getEndKey();</div> |
| <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">if</span> (prevEndKey != null &&</div> |
| <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  Bytes.compareTo(prevEndKey, curRegStartKey) == 0) {</div> |
| <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <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>  <span class="comment">// extend the key range</span></div> |
| <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <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>  } <span class="keywordflow">else</span> {</div> |
| <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <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>  <span class="comment">// with it).</span></div> |
| <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  keyRange = <span class="keyword">new</span> THBaseKeyRange();</div> |
| <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <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>  <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> </div> |
| <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  TScanRangeLocations scanRangeLocation = <span class="keyword">new</span> TScanRangeLocations();</div> |
| <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  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>  scanRangeLocation.addToLocations(</div> |
| <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <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>  scanRanges_.add(scanRangeLocation);</div> |
| <div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div> |
| <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  TScanRange scanRange = <span class="keyword">new</span> TScanRange();</div> |
| <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  scanRange.setHbase_key_range(keyRange);</div> |
| <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  scanRangeLocation.setScan_range(scanRange);</div> |
| <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  }</div> |
| <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  prevEndKey = curRegEndKey;</div> |
| <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div> |
| <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div> |
| <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div> |
| <div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </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>  <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>  keyRange.unsetStartKey();</div> |
| <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <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>  <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>  !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>  byte[] partStart = (Bytes.compareTo(rangeStartKey, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#a1f6412acf42b218c59bb2c9024f96af6">startKey_</a>) < 0) ?</div> |
| <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  startKey_ : rangeStartKey;</div> |
| <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  keyRange.setStartKey(Bytes.toString(partStart));</div> |
| <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div> |
| <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  }</div> |
| <div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </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>  <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>  keyRange.unsetStopKey();</div> |
| <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <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>  <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>  !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>  <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>  keyRange.setStopKey(Bytes.toString(rangeEndKey));</div> |
| <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  } <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>  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>  } <span class="keywordflow">else</span> {</div> |
| <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  byte[] partEnd = (Bytes.compareTo(rangeEndKey, <a class="code" href="classcom_1_1cloudera_1_1impala_1_1planner_1_1HBaseScanNode.html#aae2cef1553d228963b576a2e681a6fc9">stopKey_</a>) < 0) ?</div> |
| <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  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>  keyRange.setStopKey(Bytes.toString(partEnd));</div> |
| <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  }</div> |
| <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  }</div> |
| <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  }</div> |
| <div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div> |
| <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  @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>  <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>  TExplainLevel detailLevel) {</div> |
| <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <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>  StringBuilder output = <span class="keyword">new</span> StringBuilder();</div> |
| <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <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>  output.append(prefix + <span class="stringliteral">"empty scan node\n"</span>);</div> |
| <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">return</span> output.toString();</div> |
| <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  }</div> |
| <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  String aliasStr = <span class="stringliteral">""</span>;</div> |
| <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <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()) &&</div> |
| <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  !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>  aliasStr = <span class="stringliteral">" "</span> + desc_.getAlias();</div> |
| <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div> |
| <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  output.append(String.format(<span class="stringliteral">"%s%s:%s [%s%s]\n"</span>, prefix, id_.toString(),</div> |
| <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <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>  <span class="keywordflow">if</span> (detailLevel.ordinal() >= TExplainLevel.STANDARD.ordinal()) {</div> |
| <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <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>  output.append(detailPrefix + <span class="stringliteral">"start key: "</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">"\n"</span>);</div> |
| <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  }</div> |
| <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <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>  output.append(detailPrefix + <span class="stringliteral">"stop key: "</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">"\n"</span>);</div> |
| <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  }</div> |
| <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <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>  output.append(detailPrefix + <span class="stringliteral">"hbase filters:"</span>);</div> |
| <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <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>  THBaseFilter filter = filters_.get(0);</div> |
| <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  output.append(<span class="stringliteral">" "</span> + filter.family + <span class="stringliteral">":"</span> + filter.qualifier + <span class="stringliteral">" "</span> +</div> |
| <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  CompareFilter.CompareOp.values()[filter.op_ordinal].toString() + <span class="stringliteral">" "</span> +</div> |
| <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="stringliteral">"'"</span> + filter.filter_constant + <span class="stringliteral">"'"</span>);</div> |
| <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  } <span class="keywordflow">else</span> {</div> |
| <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < filters_.size(); ++i) {</div> |
| <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  THBaseFilter filter = filters_.get(i);</div> |
| <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  output.append(<span class="stringliteral">"\n "</span> + filter.family + <span class="stringliteral">":"</span> + filter.qualifier + <span class="stringliteral">" "</span> +</div> |
| <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  CompareFilter.CompareOp.values()[filter.op_ordinal].toString() + <span class="stringliteral">" "</span> +</div> |
| <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="stringliteral">"'"</span> + filter.filter_constant + <span class="stringliteral">"'"</span>);</div> |
| <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div> |
| <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  }</div> |
| <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  output.append(<span class="charliteral">'\n'</span>);</div> |
| <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  }</div> |
| <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <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>  output.append(</div> |
| <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  detailPrefix + <span class="stringliteral">"predicates: "</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">"\n"</span>);</div> |
| <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div> |
| <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div> |
| <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">if</span> (detailLevel.ordinal() >= TExplainLevel.EXTENDED.ordinal()) {</div> |
| <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  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>  output.append(<span class="stringliteral">"\n"</span>);</div> |
| <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div> |
| <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">return</span> output.toString();</div> |
| <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  }</div> |
| <div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </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>  <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>  byte[] keyBytes = Bytes.toBytes(rowKey);</div> |
| <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">if</span> (!nextKey) {</div> |
| <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">return</span> keyBytes;</div> |
| <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  } <span class="keywordflow">else</span> {</div> |
| <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="comment">// append \0</span></div> |
| <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keywordflow">return</span> Arrays.copyOf(keyBytes, keyBytes.length + 1);</div> |
| <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  }</div> |
| <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div> |
| <div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </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>  <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>  StringBuilder result = <span class="keyword">new</span> StringBuilder();</div> |
| <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < key.length; ++i) {</div> |
| <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">if</span> (!Character.isISOControl(key[i])) {</div> |
| <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  result.append((char) key[i]);</div> |
| <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  } <span class="keywordflow">else</span> {</div> |
| <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  result.append(<span class="stringliteral">"\\"</span>);</div> |
| <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  result.append(Integer.toOctalString(key[i]));</div> |
| <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  }</div> |
| <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  }</div> |
| <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">return</span> result.toString();</div> |
| <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</div> |
| <div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </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>  <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>  <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>  <span class="keywordflow">switch</span>(impalaOp) {</div> |
| <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <span class="stringliteral">"HBase: Unsupported Impala compare operator: "</span> + impalaOp);</div> |
| <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div> |
| <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div> |
| <div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div> |
| <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  @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>  <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>  <span class="comment">// TODO: What's a good estimate of memory consumption?</span></div> |
| <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <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>  }</div> |
| <div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </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>  <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>  <span class="comment">// TODO: What's a good estimate of memory consumption?</span></div> |
| <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordflow">return</span> 1024L * 1024L * 1024L;</div> |
| <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  }</div> |
| <div class="line"><a name="l00503"></a><span class="lineno"> 503</span> }</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< THBaseFilter > 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< SlotDescriptor > 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< ValueRange > 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< Expr > 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< ValueRange > 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< TScanRangeLocations > 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< TNetworkAddress > 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> |