PageRenderTime 27ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/release-0.1-rc2/hive/external/ql/src/java/org/apache/hadoop/hive/ql/plan/HashTableSinkDesc.java

#
Java | 376 lines | 243 code | 72 blank | 61 comment | 2 complexity | 53d61e430e11e60552bae9fb41aa36f0 MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, JSON, CPL-1.0
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. package org.apache.hadoop.hive.ql.plan;
  19. import java.io.Serializable;
  20. import java.util.ArrayList;
  21. import java.util.HashMap;
  22. import java.util.Iterator;
  23. import java.util.LinkedHashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.Set;
  27. import java.util.Map.Entry;
  28. /**
  29. * Map Join operator Descriptor implementation.
  30. *
  31. */
  32. @Explain(displayName = "HashTable Sink Operator")
  33. public class HashTableSinkDesc extends JoinDesc implements Serializable {
  34. private static final long serialVersionUID = 1L;
  35. // used to handle skew join
  36. private boolean handleSkewJoin = false;
  37. private int skewKeyDefinition = -1;
  38. private Map<Byte, String> bigKeysDirMap;
  39. private Map<Byte, Map<Byte, String>> smallKeysDirMap;
  40. private Map<Byte, TableDesc> skewKeysValuesTables;
  41. // alias to key mapping
  42. private Map<Byte, List<ExprNodeDesc>> exprs;
  43. // alias to filter mapping
  44. private Map<Byte, List<ExprNodeDesc>> filters;
  45. // used for create joinOutputObjectInspector
  46. protected List<String> outputColumnNames;
  47. // key:column output name, value:tag
  48. private transient Map<String, Byte> reversedExprs;
  49. // No outer join involved
  50. protected boolean noOuterJoin;
  51. protected JoinCondDesc[] conds;
  52. protected Byte[] tagOrder;
  53. private TableDesc keyTableDesc;
  54. private Map<Byte, List<ExprNodeDesc>> keys;
  55. private TableDesc keyTblDesc;
  56. private List<TableDesc> valueTblDescs;
  57. private List<TableDesc> valueTblFilteredDescs;
  58. private int posBigTable;
  59. private Map<Byte, List<Integer>> retainList;
  60. private transient String bigTableAlias;
  61. private LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> aliasBucketFileNameMapping;
  62. private LinkedHashMap<String, Integer> bucketFileNameMapping;
  63. private float hashtableMemoryUsage;
  64. public HashTableSinkDesc() {
  65. bucketFileNameMapping = new LinkedHashMap<String, Integer>();
  66. }
  67. public HashTableSinkDesc(MapJoinDesc clone) {
  68. this.bigKeysDirMap = clone.getBigKeysDirMap();
  69. this.conds = clone.getConds();
  70. this.exprs= clone.getExprs();
  71. this.handleSkewJoin = clone.getHandleSkewJoin();
  72. this.keyTableDesc = clone.getKeyTableDesc();
  73. this.noOuterJoin = clone.getNoOuterJoin();
  74. this.outputColumnNames = clone.getOutputColumnNames();
  75. this.reversedExprs = clone.getReversedExprs();
  76. this.skewKeyDefinition = clone.getSkewKeyDefinition();
  77. this.skewKeysValuesTables = clone.getSkewKeysValuesTables();
  78. this.smallKeysDirMap = clone.getSmallKeysDirMap();
  79. this.tagOrder = clone.getTagOrder();
  80. this.filters = clone.getFilters();
  81. this.keys = clone.getKeys();
  82. this.keyTblDesc = clone.getKeyTblDesc();
  83. this.valueTblDescs = clone.getValueTblDescs();
  84. this.valueTblFilteredDescs = clone.getValueFilteredTblDescs();
  85. this.posBigTable = clone.getPosBigTable();
  86. this.retainList = clone.getRetainList();
  87. this.bigTableAlias = clone.getBigTableAlias();
  88. this.aliasBucketFileNameMapping = clone.getAliasBucketFileNameMapping();
  89. this.bucketFileNameMapping = clone.getBucketFileNameMapping();
  90. }
  91. private void initRetainExprList() {
  92. retainList = new HashMap<Byte, List<Integer>>();
  93. Set<Entry<Byte, List<ExprNodeDesc>>> set = exprs.entrySet();
  94. Iterator<Entry<Byte, List<ExprNodeDesc>>> setIter = set.iterator();
  95. while (setIter.hasNext()) {
  96. Entry<Byte, List<ExprNodeDesc>> current = setIter.next();
  97. List<Integer> list = new ArrayList<Integer>();
  98. for (int i = 0; i < current.getValue().size(); i++) {
  99. list.add(i);
  100. }
  101. retainList.put(current.getKey(), list);
  102. }
  103. }
  104. public float getHashtableMemoryUsage() {
  105. return hashtableMemoryUsage;
  106. }
  107. public void setHashtableMemoryUsage(float hashtableMemoryUsage) {
  108. this.hashtableMemoryUsage = hashtableMemoryUsage;
  109. }
  110. public boolean isHandleSkewJoin() {
  111. return handleSkewJoin;
  112. }
  113. @Override
  114. public void setHandleSkewJoin(boolean handleSkewJoin) {
  115. this.handleSkewJoin = handleSkewJoin;
  116. }
  117. @Override
  118. public int getSkewKeyDefinition() {
  119. return skewKeyDefinition;
  120. }
  121. @Override
  122. public void setSkewKeyDefinition(int skewKeyDefinition) {
  123. this.skewKeyDefinition = skewKeyDefinition;
  124. }
  125. @Override
  126. public Map<Byte, String> getBigKeysDirMap() {
  127. return bigKeysDirMap;
  128. }
  129. @Override
  130. public void setBigKeysDirMap(Map<Byte, String> bigKeysDirMap) {
  131. this.bigKeysDirMap = bigKeysDirMap;
  132. }
  133. @Override
  134. public Map<Byte, Map<Byte, String>> getSmallKeysDirMap() {
  135. return smallKeysDirMap;
  136. }
  137. @Override
  138. public void setSmallKeysDirMap(Map<Byte, Map<Byte, String>> smallKeysDirMap) {
  139. this.smallKeysDirMap = smallKeysDirMap;
  140. }
  141. @Override
  142. public Map<Byte, TableDesc> getSkewKeysValuesTables() {
  143. return skewKeysValuesTables;
  144. }
  145. @Override
  146. public void setSkewKeysValuesTables(Map<Byte, TableDesc> skewKeysValuesTables) {
  147. this.skewKeysValuesTables = skewKeysValuesTables;
  148. }
  149. @Override
  150. public Map<Byte, List<ExprNodeDesc>> getExprs() {
  151. return exprs;
  152. }
  153. @Override
  154. public void setExprs(Map<Byte, List<ExprNodeDesc>> exprs) {
  155. this.exprs = exprs;
  156. }
  157. @Override
  158. public Map<Byte, List<ExprNodeDesc>> getFilters() {
  159. return filters;
  160. }
  161. public List<TableDesc> getValueTblFilteredDescs() {
  162. return valueTblFilteredDescs;
  163. }
  164. public void setValueTblFilteredDescs(List<TableDesc> valueTblFilteredDescs) {
  165. this.valueTblFilteredDescs = valueTblFilteredDescs;
  166. }
  167. @Override
  168. public void setFilters(Map<Byte, List<ExprNodeDesc>> filters) {
  169. this.filters = filters;
  170. }
  171. @Override
  172. public List<String> getOutputColumnNames() {
  173. return outputColumnNames;
  174. }
  175. @Override
  176. public void setOutputColumnNames(List<String> outputColumnNames) {
  177. this.outputColumnNames = outputColumnNames;
  178. }
  179. @Override
  180. public Map<String, Byte> getReversedExprs() {
  181. return reversedExprs;
  182. }
  183. @Override
  184. public void setReversedExprs(Map<String, Byte> reversedExprs) {
  185. this.reversedExprs = reversedExprs;
  186. }
  187. @Override
  188. public boolean isNoOuterJoin() {
  189. return noOuterJoin;
  190. }
  191. @Override
  192. public void setNoOuterJoin(boolean noOuterJoin) {
  193. this.noOuterJoin = noOuterJoin;
  194. }
  195. @Override
  196. public JoinCondDesc[] getConds() {
  197. return conds;
  198. }
  199. @Override
  200. public void setConds(JoinCondDesc[] conds) {
  201. this.conds = conds;
  202. }
  203. @Override
  204. public Byte[] getTagOrder() {
  205. return tagOrder;
  206. }
  207. @Override
  208. public void setTagOrder(Byte[] tagOrder) {
  209. this.tagOrder = tagOrder;
  210. }
  211. @Override
  212. public TableDesc getKeyTableDesc() {
  213. return keyTableDesc;
  214. }
  215. @Override
  216. public void setKeyTableDesc(TableDesc keyTableDesc) {
  217. this.keyTableDesc = keyTableDesc;
  218. }
  219. public Map<Byte, List<Integer>> getRetainList() {
  220. return retainList;
  221. }
  222. public void setRetainList(Map<Byte, List<Integer>> retainList) {
  223. this.retainList = retainList;
  224. }
  225. /**
  226. * @return the keys
  227. */
  228. @Explain(displayName = "keys")
  229. public Map<Byte, List<ExprNodeDesc>> getKeys() {
  230. return keys;
  231. }
  232. /**
  233. * @param keys
  234. * the keys to set
  235. */
  236. public void setKeys(Map<Byte, List<ExprNodeDesc>> keys) {
  237. this.keys = keys;
  238. }
  239. /**
  240. * @return the position of the big table not in memory
  241. */
  242. @Explain(displayName = "Position of Big Table")
  243. public int getPosBigTable() {
  244. return posBigTable;
  245. }
  246. /**
  247. * @param posBigTable
  248. * the position of the big table not in memory
  249. */
  250. public void setPosBigTable(int posBigTable) {
  251. this.posBigTable = posBigTable;
  252. }
  253. /**
  254. * @return the keyTblDesc
  255. */
  256. public TableDesc getKeyTblDesc() {
  257. return keyTblDesc;
  258. }
  259. /**
  260. * @param keyTblDesc
  261. * the keyTblDesc to set
  262. */
  263. public void setKeyTblDesc(TableDesc keyTblDesc) {
  264. this.keyTblDesc = keyTblDesc;
  265. }
  266. /**
  267. * @return the valueTblDescs
  268. */
  269. public List<TableDesc> getValueTblDescs() {
  270. return valueTblDescs;
  271. }
  272. /**
  273. * @param valueTblDescs
  274. * the valueTblDescs to set
  275. */
  276. public void setValueTblDescs(List<TableDesc> valueTblDescs) {
  277. this.valueTblDescs = valueTblDescs;
  278. }
  279. /**
  280. * @return bigTableAlias
  281. */
  282. public String getBigTableAlias() {
  283. return bigTableAlias;
  284. }
  285. /**
  286. * @param bigTableAlias
  287. */
  288. public void setBigTableAlias(String bigTableAlias) {
  289. this.bigTableAlias = bigTableAlias;
  290. }
  291. public LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> getAliasBucketFileNameMapping() {
  292. return aliasBucketFileNameMapping;
  293. }
  294. public void setAliasBucketFileNameMapping(
  295. LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>> aliasBucketFileNameMapping) {
  296. this.aliasBucketFileNameMapping = aliasBucketFileNameMapping;
  297. }
  298. public LinkedHashMap<String, Integer> getBucketFileNameMapping() {
  299. return bucketFileNameMapping;
  300. }
  301. public void setBucketFileNameMapping(LinkedHashMap<String, Integer> bucketFileNameMapping) {
  302. this.bucketFileNameMapping = bucketFileNameMapping;
  303. }
  304. }