@Override public int compare(UnSafeTuple tuple1, UnSafeTuple tuple2) { for (int i = 0; i < sortKeyIds.length; i++) { int compare = OffHeapRowBlockUtils.compareColumn(tuple1, tuple2, sortKeyIds[i], sortKeyTypes[i], asc[i], nullFirsts[i]); if (compare != 0) { return compare; } } return 0; } }
@Override public boolean addTuple(Tuple tuple) { try { OffHeapRowBlockUtils.convert(tuple, this); } catch (ValueOutOfRangeException e) { return false; } return true; } }
/** * Sort a tuple block and store them into a chunk file */ private Chunk sortAndStoreChunk(int chunkId, UnSafeTupleList tupleBlock) throws IOException { int rowNum = tupleBlock.size(); long sortStart = System.currentTimeMillis(); OffHeapRowBlockUtils.sort(tupleBlock, unSafeComparator); long sortEnd = System.currentTimeMillis(); long chunkWriteStart = System.currentTimeMillis(); Path outputPath = getChunkPathForWrite(0, chunkId); final DirectRawFileWriter appender = new DirectRawFileWriter(context.getConf(), null, inSchema, intermediateMeta, outputPath); appender.init(); for (Tuple t : tupleBlock) { appender.addTuple(t); } appender.close(); long chunkWriteEnd = System.currentTimeMillis(); info(LOG, "Chunk #" + chunkId + " sort and written (" + FileUtil.humanReadableByteCount(appender.getOffset(), false) + " bytes, " + rowNum + " rows, " + "sort time: " + (sortEnd - sortStart) + " msec, " + "write time: " + (chunkWriteEnd - chunkWriteStart) + " msec)"); FileFragment frag = new FileFragment("", outputPath, 0, new File(localFS.makeQualified(outputPath).toUri()).length()); return new Chunk(inSchema, frag, intermediateMeta); }
private Scanner getScanner(Chunk chunk) throws IOException { if (chunk.isMemory()) { long sortStart = System.currentTimeMillis(); OffHeapRowBlockUtils.sort(inMemoryTable, unSafeComparator); Scanner scanner = new MemTableScanner<>(inMemoryTable, inMemoryTable.size(), inMemoryTable.usedMem()); if(LOG.isDebugEnabled()) { debug(LOG, "Memory Chunk sort (" + FileUtil.humanReadableByteCount(inMemoryTable.usedMem(), false) + " bytes, " + inMemoryTable.size() + " rows, sort time: " + (System.currentTimeMillis() - sortStart) + " msec)"); } return scanner; } else { return TablespaceManager.getLocalFs().getScanner(chunk.meta, chunk.schema, chunk.fragment, chunk.schema); } }
@Override public boolean addTuple(Tuple tuple) { try { OffHeapRowBlockUtils.convert(tuple, this); } catch (ValueOutOfRangeException e) { return false; } return true; } }
private List<UnSafeTuple> sort(UnSafeTupleList tupleBlock) { switch (sortAlgorithm) { case TIM: return OffHeapRowBlockUtils.sort(tupleBlock, unSafeComparator); case MSD_RADIX: return RadixSort.sort(context.getQueryContext(), tupleBlock, inSchema, sortSpecs, unSafeComparator); default: // The below line is not reachable. So, an exception should be thrown if it is executed. throw new TajoRuntimeException(new UnsupportedException(sortAlgorithm.name())); } }
@Override public int compare(UnSafeTuple tuple1, UnSafeTuple tuple2) { for (int i = 0; i < sortKeyIds.length; i++) { int compare = OffHeapRowBlockUtils.compareColumn(tuple1, tuple2, sortKeyIds[i], sortKeyTypes[i], asc[i], nullFirsts[i]); if (compare != 0) { return compare; } } return 0; } }
@Override public boolean addTuple(Tuple tuple) { try { if (tuple instanceof UnSafeTuple) { UnSafeTuple unSafeTuple = TUtil.checkTypeAndGet(tuple, UnSafeTuple.class); addTuple(unSafeTuple); } else { OffHeapRowBlockUtils.convert(tuple, this); } } catch (ValueOutOfRangeException e) { return false; } return true; }
@Override public boolean addTuple(Tuple tuple) { try { if (tuple instanceof UnSafeTuple) { UnSafeTuple unSafeTuple = TUtil.checkTypeAndGet(tuple, UnSafeTuple.class); addTuple(unSafeTuple); } else { OffHeapRowBlockUtils.convert(tuple, this); } } catch (ValueOutOfRangeException e) { return false; } return true; }
@Override public boolean addTuple(Tuple tuple) { try { if (tuple instanceof UnSafeTuple) { UnSafeTuple unSafeTuple = TUtil.checkTypeAndGet(tuple, UnSafeTuple.class); addTuple(unSafeTuple); rowBlock.setRows(rowBlock.rows() + 1); } else { OffHeapRowBlockUtils.convert(tuple, this); } } catch (ValueOutOfRangeException e) { return false; } return true; } }
@Override public boolean addTuple(Tuple tuple) { try { if (tuple instanceof UnSafeTuple) { UnSafeTuple unSafeTuple = TUtil.checkTypeAndGet(tuple, UnSafeTuple.class); addTuple(unSafeTuple); rowBlock.setRows(rowBlock.rows() + 1); } else { OffHeapRowBlockUtils.convert(tuple, this); } } catch (ValueOutOfRangeException e) { return false; } return true; } }