public static VectorColumnAssign[] buildAssigners(VectorizedRowBatch outputBatch) throws HiveException { VectorColumnAssign[] vca = new VectorColumnAssign[outputBatch.cols.length]; for (int i = 0; i < vca.length; ++i) { ColumnVector cv = outputBatch.cols[i]; if (cv == null) { continue; } else if (cv instanceof LongColumnVector) { vca[i] = new VectorLongColumnAssign() { @Override protected void copyValue(LongColumnVector in, int srcIndex, int destIndex) { assignLong(in.vector[srcIndex], destIndex); } }.init(outputBatch, (LongColumnVector) cv); } else if (cv instanceof DoubleColumnVector) { vca[i] = new VectorDoubleColumnAssign() { @Override protected void copyValue(DoubleColumnVector in, int srcIndex, int destIndex) { assignDouble(in.vector[srcIndex], destIndex); } }.init(outputBatch, (DoubleColumnVector) cv); } else if (cv instanceof BytesColumnVector) { vca[i] = new VectorBytesColumnAssign() { @Override protected void copyValue(BytesColumnVector src, int srcIndex, int destIndex) { assignBytes( src.vector[srcIndex], src.start[srcIndex], src.length[srcIndex], destIndex); } }.init(outputBatch, (BytesColumnVector) cv); } else if (cv instanceof DecimalColumnVector) { vca[i] = new VectorDecimalColumnAssign() { @Override protected void copyValue(DecimalColumnVector src, int srcIndex, int destIndex) { assignDecimal(src.vector[srcIndex], destIndex); } }; } else { throw new HiveException("Unimplemented vector column type: " + cv.getClass().getName()); } } return vca; }
public static VectorColumnAssign buildObjectAssign( VectorizedRowBatch outputBatch, int outColIndex, ObjectInspector objInspector) throws HiveException { PrimitiveObjectInspector poi = (PrimitiveObjectInspector) objInspector; VectorColumnAssign outVCA = null; ColumnVector destCol = outputBatch.cols[outColIndex]; if (destCol instanceof LongColumnVector) { switch (poi.getPrimitiveCategory()) { case BOOLEAN: outVCA = new VectorLongColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { BooleanWritable bw = (BooleanWritable) val; assignLong(bw.get() ? 1 : 0, destIndex); } } }.init(outputBatch, (LongColumnVector) destCol); break; case BYTE: outVCA = new VectorLongColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { ByteWritable bw = (ByteWritable) val; assignLong(bw.get(), destIndex); } } }.init(outputBatch, (LongColumnVector) destCol); break; case SHORT: outVCA = new VectorLongColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { ShortWritable bw = (ShortWritable) val; assignLong(bw.get(), destIndex); } } }.init(outputBatch, (LongColumnVector) destCol); break; case INT: outVCA = new VectorLongColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { IntWritable bw = (IntWritable) val; assignLong(bw.get(), destIndex); } } }.init(outputBatch, (LongColumnVector) destCol); break; case LONG: outVCA = new VectorLongColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { LongWritable bw = (LongWritable) val; assignLong(bw.get(), destIndex); } } }.init(outputBatch, (LongColumnVector) destCol); break; case TIMESTAMP: outVCA = new VectorLongColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { TimestampWritable bw = (TimestampWritable) val; Timestamp t = bw.getTimestamp(); assignLong(TimestampUtils.getTimeNanoSec(t), destIndex); } } }.init(outputBatch, (LongColumnVector) destCol); break; case DATE: outVCA = new VectorLongColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { DateWritable bw = (DateWritable) val; assignLong(bw.getDays(), destIndex); } } }.init(outputBatch, (LongColumnVector) destCol); break; default: throw new HiveException( "Incompatible Long vector column and primitive category " + poi.getPrimitiveCategory()); } } else if (destCol instanceof DoubleColumnVector) { switch (poi.getPrimitiveCategory()) { case DOUBLE: outVCA = new VectorDoubleColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { DoubleWritable bw = (DoubleWritable) val; assignDouble(bw.get(), destIndex); } } }.init(outputBatch, (DoubleColumnVector) destCol); break; case FLOAT: outVCA = new VectorDoubleColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { FloatWritable bw = (FloatWritable) val; assignDouble(bw.get(), destIndex); } } }.init(outputBatch, (DoubleColumnVector) destCol); break; default: throw new HiveException( "Incompatible Double vector column and primitive category " + poi.getPrimitiveCategory()); } } else if (destCol instanceof BytesColumnVector) { switch (poi.getPrimitiveCategory()) { case STRING: outVCA = new VectorBytesColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { Text bw = (Text) val; byte[] bytes = bw.getBytes(); assignBytes(bytes, 0, bytes.length, destIndex); } } }.init(outputBatch, (BytesColumnVector) destCol); break; default: throw new HiveException( "Incompatible Bytes vector column and primitive category " + poi.getPrimitiveCategory()); } } else if (destCol instanceof DecimalColumnVector) { switch (poi.getPrimitiveCategory()) { case DECIMAL: outVCA = new VectorDecimalColumnAssign() { @Override public void assignObjectValue(Object val, int destIndex) throws HiveException { if (val == null) { assignNull(destIndex); } else { HiveDecimalWritable hdw = (HiveDecimalWritable) val; assignDecimal(hdw, destIndex); } } }.init(outputBatch, (DecimalColumnVector) destCol); break; default: throw new HiveException( "Incompatible Decimal vector column and primitive category " + poi.getPrimitiveCategory()); } } else { throw new HiveException("Unknown vector column type " + destCol.getClass().getName()); } return outVCA; }