예제 #1
0
 /**
  * Postpone processing the big table row temporarily by spilling it to a row container
  *
  * @param hybridHtContainer Hybrid hashtable container
  * @param row big table row
  */
 protected void spillBigTableRow(MapJoinTableContainer hybridHtContainer, Object row)
     throws HiveException {
   HybridHashTableContainer ht = (HybridHashTableContainer) hybridHtContainer;
   int partitionId = ht.getToSpillPartitionId();
   HashPartition hp = ht.getHashPartitions()[partitionId];
   ObjectContainer bigTable = hp.getMatchfileObjContainer();
   bigTable.add(row);
 }
예제 #2
0
 /**
  * Iterate over the big table row container and feed process() with leftover rows
  *
  * @param partitionId the partition from which to take out spilled big table rows
  * @throws HiveException
  */
 protected void reProcessBigTable(int partitionId) throws HiveException {
   // For binary join, firstSmallTable is the only small table; it has reference to spilled big
   // table rows;
   // For n-way join, since we only spill once, when processing the first small table, so only the
   // firstSmallTable has reference to the spilled big table rows.
   HashPartition partition = firstSmallTable.getHashPartitions()[partitionId];
   ObjectContainer bigTable = partition.getMatchfileObjContainer();
   while (bigTable.hasNext()) {
     Object row = bigTable.next();
     process(row, conf.getPosBigTable());
   }
   bigTable.clear();
 }