byte type = field.getType(); try { Object object = pt.getTuple().get(i); if (DataType.isAtomic(type)) { target = object.toString(); Assert.isTrue(false, String.format("Unsupported data type [%s] for field [%s]; use only 'primitives' or 'tuples'", DataType.findTypeName(type), fieldName));
List<Object> data = tuple.getAll(); return data.toArray(); o = castBytes(o, targetPhoenixType); if (targetPhoenixType != PVarbinary.INSTANCE && targetPhoenixType != PBinary.INSTANCE) { inferredPType = getType(o, DataType.findType(o)); int inferredSqlType = targetPhoenixType.getSqlType(); if (inferredSqlType == Types.DATE) { return new Date(((DateTime)o).getMillis()); } if (inferredSqlType == Types.TIME) { return new Time(((DateTime)o).getMillis()); } if (inferredSqlType == Types.TIMESTAMP) { return new Timestamp(((DateTime)o).getMillis()); }
case DataType.BYTEARRAY: byte[] bytes = PDataType.fromTypeId(PBinary.INSTANCE.getSqlType()).toBytes(object); tuple.set(i, new DataByteArray(bytes, 0, bytes.length)); break; case DataType.CHARARRAY: tuple.set(i, DataType.toString(object)); break; case DataType.DOUBLE: tuple.set(i, DataType.toDouble(object)); break; case DataType.FLOAT: tuple.set(i, DataType.toFloat(object)); break; case DataType.INTEGER: tuple.set(i, DataType.toInteger(object)); break; case DataType.LONG: tuple.set(i, DataType.toLong(object)); break; case DataType.BOOLEAN: tuple.set(i, DataType.toBoolean(object)); break; case DataType.DATETIME: if (object instanceof java.sql.Timestamp) tuple.set(i,new DateTime(((java.sql.Timestamp)object).getTime())); else tuple.set(i,new DateTime(object)); break; case DataType.BIGDECIMAL:
assertEquals(DataType.LONG, DataType.findType(t.get(2))); assertEquals(DataType.TUPLE, DataType.findType(t.get(4))); Tuple doubleArrayTuple = (Tuple)t.get(4); assertEquals(2,doubleArrayTuple.size()); field1 = new ResourceFieldSchema().setType(DataType.BIGINTEGER); values.clear(); values.put("first", new BigDecimal(123123123.123213)); values.put("second", new BigInteger("1312313231312")); ResourceFieldSchema[] columns = { field, field1 }; assertEquals(DataType.BIGDECIMAL, DataType.findType(t.get(0))); assertEquals(DataType.BIGINTEGER, DataType.findType(t.get(1)));
return extractString(bytes, startIndex, endIndex, true); } else if (fs.type == DataType.BYTEARRAY) { return new DataByteArray(bytes, startIndex, endIndex+1); return ToDate.extractDateTime(val); } else if (fs.type == DataType.BIGINTEGER) { return new BigInteger(val); } else if (fs.type == DataType.BIGDECIMAL) { return new BigDecimal(val); } else { throw new ExecException("Can't deserialize type: " + DataType.findTypeName(fs.type));
return BigInteger.valueOf(((Integer)o).longValue()); return BigInteger.valueOf(((Long)o).longValue()); return BigInteger.valueOf(((Float)o).longValue()); return new BigInteger(((DataByteArray)o).toString()); return ((BigDecimal)o).toBigInteger(); return BigInteger.valueOf(((DateTime)o).getMillis()); default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a BigInteger."; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 1074; String msg = "Problem with formatting. Could not convert " + o + " to BigInteger."; throw new ExecException(msg, errCode, PigException.INPUT, nfe); } catch (Exception e) { int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to BigInteger."; throw new ExecException(msg, errCode, PigException.BUG);
return BigDecimal.valueOf(((Integer)o).longValue()); return BigDecimal.valueOf(((Long)o).longValue()); return BigDecimal.valueOf(((Float)o).doubleValue()); return new BigDecimal(((DataByteArray)o).toString()); return BigDecimal.valueOf(((DateTime)o).getMillis()); default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a BigDecimal."; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 1074; String msg = "Problem with formatting. Could not convert " + o + " to BigDecimal."; throw new ExecException(msg, errCode, PigException.INPUT, nfe); } catch (Exception e) { int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to BigDecimal."; throw new ExecException(msg, errCode, PigException.BUG);
/** * java level API * @param input expects a numeric value to round, a number of digits to keep, and an optional rounding mode. * @return output returns a single numeric value, the number with only those digits retained */ @Override public Double exec(Tuple input) throws IOException { if (input == null || input.size() < 2) return null; try { Double num = DataType.toDouble(input.get(0)); Integer digits = DataType.toInteger(input.get(1)); RoundingMode mode = (input.size() >= 3) ? RoundingMode.valueOf(DataType.toInteger(input.get(2))) : RoundingMode.HALF_EVEN; if (num == null) return null; BigDecimal bdnum = BigDecimal.valueOf(num); bdnum = bdnum.setScale(digits, mode); return bdnum.doubleValue(); } catch (NumberFormatException nfe){ System.err.println("Failed to process input; error - " + nfe.getMessage()); return null; } catch (Exception e){ throw new IOException("Caught exception processing input row ", e); } }
Object GetLargerValue(Object v) { byte type = DataType.findType(v); return (String) v + "0"; case DataType.BYTEARRAY: String str = ((DataByteArray) v).toString(); str = str + "0"; return new DataByteArray(str); case DataType.INTEGER: return Integer.valueOf((Integer) v + 1); return Double.valueOf((Double) v + 1); case DataType.BIGINTEGER: return ((BigInteger)v).add(BigInteger.ONE); case DataType.BIGDECIMAL: return ((BigDecimal)v).add(BigDecimal.ONE); case DataType.DATETIME: DateTime dt = (DateTime) v; if (dt.getMillisOfSecond() != 0) { return dt.plusMillis(1); } else if (dt.getSecondOfMinute() != 0) { return dt.plusSeconds(1); } else if (dt.getMinuteOfHour() != 0) {
return null; case BYTEARRAY: return new DateTime(((DataByteArray) o).toString()); case CHARARRAY: return new DateTime(((Integer) o).longValue()); case LONG: return new DateTime(((Long) o).longValue()); case FLOAT: return new DateTime(((Float) o).longValue()); return new DateTime(((Double) o).longValue()); case BIGINTEGER: return new DateTime(((BigInteger) o).longValue()); case BIGDECIMAL: return new DateTime(((BigDecimal) o).longValue()); case DATETIME: return (DateTime) o; default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a DateTime"; throw new ExecException(msg, errCode, PigException.INPUT);
realType = DataType.findType(res.result); res.result = DataType.toDateTime(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toDateTime(res.result, realType); Result res = in.getNextInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = new DateTime(((Integer) res.result).longValue()); Result res = in.getNextDouble(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = new DateTime(((Double) res.result).longValue()); Result res = in.getNextLong(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = new DateTime(((Long) res.result).longValue()); Result res = in.getNextBigInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = new DateTime(((BigInteger) res.result).longValue()); Result res = in.getNextBigDecimal(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = new DateTime(((BigDecimal) res.result).longValue());
return ((DateTime)o).toString(); return ((DataByteArray)o).toString(); return ((BigInteger)o).toString(); return ((BigDecimal)o).toString(); default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a String"; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to String."; throw new ExecException(msg, errCode, PigException.BUG);
realType = DataType.findType(res.result); try { res.result = DataType.toString(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toString(res.result, realType); res.result = caster.bytesToCharArray(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "string for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextDateTime(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = ((DateTime) res.result).toString(); Result res = in.getNextBigInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = ((BigInteger)res.result).toString(); Result res = in.getNextBigDecimal(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = ((BigDecimal)res.result).toString();
realType = DataType.findType(res.result); try { res.result = DataType.toLong(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toLong(res.result, realType); res.result = caster.bytesToLong(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "long for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextDateTime(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Long.valueOf(((DateTime) res.result).getMillis()); Result res = in.getNextBigInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Long.valueOf(((BigInteger)res.result).longValue()); Result res = in.getNextBigDecimal(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Long.valueOf(((BigDecimal)res.result).longValue());
return Long.valueOf(((DataByteArray)o).toString()); return Long.valueOf(((BigInteger)o).longValue()); return Long.valueOf(((BigDecimal)o).longValue()); return Long.valueOf(((DateTime)o).getMillis()); case MAP: case INTERNALMAP: default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a Long"; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 1074; String msg = "Problem with formatting. Could not convert " + o + " to Long."; throw new ExecException(msg, errCode, PigException.INPUT, nfe); } catch (Exception e) { int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to Long."; throw new ExecException(msg, errCode, PigException.BUG);
return Integer.valueOf(((DataByteArray)o).toString()); return Integer.valueOf(((BigInteger)o).intValue()); return Integer.valueOf(((BigDecimal)o).intValue()); return Integer.valueOf(Long.valueOf(((DateTime)o).getMillis()).intValue()); default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to an Integer"; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 1074; String msg = "Problem with formatting. Could not convert " + o + " to Integer."; throw new ExecException(msg, errCode, PigException.INPUT, nfe); } catch (Exception e) { int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to Integer."; throw new ExecException(msg, errCode, PigException.BUG);
realType = DataType.findType(res.result); try { res.result = DataType.toInteger(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toInteger(res.result, realType); res.result = caster.bytesToInteger(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "int for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextDateTime(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Integer.valueOf(Long.valueOf(((DateTime) res.result).getMillis()).intValue()); Result res = in.getNextBigInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Integer.valueOf(((BigInteger)res.result).intValue()); Result res = in.getNextBigDecimal(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Integer.valueOf(((BigDecimal)res.result).intValue());
Object GetSmallerValue(Object v) { byte type = DataType.findType(v); case DataType.BYTEARRAY: DataByteArray data = (DataByteArray) v; if (data.size() > 0) return new DataByteArray(data.get(), 0, data.size() - 1); else return null; return Double.valueOf((Double) v - 1); case DataType.BIGINTEGER: return ((BigInteger)v).subtract(BigInteger.ONE); case DataType.BIGDECIMAL: return ((BigDecimal)v).subtract(BigDecimal.ONE); case DataType.DATETIME: DateTime dt = (DateTime) v; if (dt.getMillisOfSecond() != 0) { return dt.minusMillis(1); } else if (dt.getSecondOfMinute() != 0) { return dt.minusSeconds(1); } else if (dt.getMinuteOfHour() != 0) {
realType = DataType.findType(res.result); try { res.result = DataType.toDouble(res.result, realType); } catch (ClassCastException cce) { realType = DataType.findType(res.result); res.result = DataType.toDouble(res.result, realType); res.result = caster.bytesToDouble(dba.get()); } else { int errCode = 1075; String msg = unknownByteArrayErrorMessage + "double for " + this.getOriginalLocations(); throw new ExecException(msg, errCode, PigException.INPUT); Result res = in.getNextDateTime(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = new Double(Long.valueOf(((DateTime) res.result).getMillis()).doubleValue()); Result res = in.getNextBigInteger(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Double.valueOf(((BigInteger)res.result).doubleValue()); Result res = in.getNextBigDecimal(); if (res.returnStatus == POStatus.STATUS_OK && res.result != null) { res.result = Double.valueOf(((BigDecimal)res.result).doubleValue());
return new Double(Long.valueOf(((DateTime)o).getMillis()).doubleValue()); return Double.valueOf(((DataByteArray)o).toString()); return Double.valueOf(((BigInteger)o).doubleValue()); return Double.valueOf(((BigDecimal)o).doubleValue()); default: int errCode = 1071; String msg = "Cannot convert a " + findTypeName(o) + " to a Double"; throw new ExecException(msg, errCode, PigException.INPUT); int errCode = 1074; String msg = "Problem with formatting. Could not convert " + o + " to Double."; throw new ExecException(msg, errCode, PigException.INPUT, nfe); } catch (Exception e) { int errCode = 2054; String msg = "Internal error. Could not convert " + o + " to Double."; throw new ExecException(msg, errCode, PigException.BUG);