private Object readRow(Writable value, ExecMapperContext context) throws SerDeException { Object deserialized = deserializer.deserialize(value); Object row = partTblObjectInspectorConverter.convert(deserialized); if (hasVC()) { rowWithPartAndVC[0] = row; if (context != null) { populateVirtualColumnValues(context, vcs, vcValues, deserializer); } int vcPos = isPartitioned() ? 2 : 1; rowWithPartAndVC[vcPos] = vcValues; return rowWithPartAndVC; } else if (isPartitioned()) { rowWithPart[0] = row; return rowWithPart; } return row; }
@Override public boolean advanceNextPosition() { try { if (closed || !recordReader.next(key, value)) { close(); return false; } // reset loaded flags // partition keys are already loaded, but everything else is not System.arraycopy(isPartitionColumn, 0, loaded, 0, isPartitionColumn.length); // decode value rowData = deserializer.deserialize(value); return true; } catch (IOException | SerDeException | RuntimeException e) { closeWithSuppression(e); throw new PrestoException(HIVE_CURSOR_ERROR.toErrorCode(), e); } }
@Override public <E> void processRow(Object key, Iterator<E> values) throws IOException { if (reducer.getDone()) { return; } try { BytesWritable keyWritable = (BytesWritable) key; byte tag = 0; if (isTagged) { // remove the tag from key coming out of reducer // and store it in separate variable. int size = keyWritable.getSize() - 1; tag = keyWritable.get()[size]; keyWritable.setSize(size); } if (!keyWritable.equals(groupKey)) { // If a operator wants to do some work at the beginning of a group if (groupKey == null) { // the first group groupKey = new BytesWritable(); } else { // If a operator wants to do some work at the end of a group LOG.trace("End Group"); reducer.endGroup(); } try { keyObject = inputKeyDeserializer.deserialize(keyWritable); } catch (Exception e) { throw new HiveException( "Hive Runtime Error: Unable to deserialize reduce input key from " + Utilities.formatBinaryString(keyWritable.get(), 0, keyWritable.getSize()) + " with properties " + keyTableDesc.getProperties(), e); } groupKey.set(keyWritable.get(), 0, keyWritable.getSize()); LOG.trace("Start Group"); reducer.setGroupKeyObject(keyObject); reducer.startGroup(); } /* this.keyObject passed via reference */ if (vectorized) { processVectors(values, tag); } else { processKeyValues(values, tag); } } catch (Throwable e) { abort = true; Utilities.setReduceWork(jc, null); if (e instanceof OutOfMemoryError) { // Don't create a new object if we are already out of memory throw (OutOfMemoryError) e; } else { String msg = "Fatal error: " + e; LOG.fatal(msg, e); throw new RuntimeException(e); } } }