예제 #1
0
 private void writeRecordFields(GroupType schema, Schema tajoSchema, Tuple tuple) {
   List<Type> fields = schema.getFields();
   // Parquet ignores Tajo NULL_TYPE columns, so the index may differ.
   int index = 0;
   for (int tajoIndex = 0; tajoIndex < tajoSchema.size(); ++tajoIndex) {
     Column column = tajoSchema.getColumn(tajoIndex);
     if (column.getDataType().getType() == TajoDataTypes.Type.NULL_TYPE) {
       continue;
     }
     Type fieldType = fields.get(index);
     if (!tuple.isBlankOrNull(tajoIndex)) {
       recordConsumer.startField(fieldType.getName(), index);
       writeValue(column, tuple, tajoIndex);
       recordConsumer.endField(fieldType.getName(), index);
     } else if (fieldType.isRepetition(Type.Repetition.REQUIRED)) {
       throw new RuntimeException("Null-value for required field: " + column.getSimpleName());
     }
     ++index;
   }
 }
예제 #2
0
  private void writeValue(Column column, Tuple tuple, int index) {
    switch (column.getDataType().getType()) {
      case BOOLEAN:
        recordConsumer.addBoolean(tuple.getBool(index));
        break;
      case BIT:
      case INT2:
      case INT4:
        recordConsumer.addInteger(tuple.getInt4(index));
        break;
      case INT8:
        recordConsumer.addLong(tuple.getInt8(index));
        break;
      case FLOAT4:
        recordConsumer.addFloat(tuple.getFloat4(index));
        break;
      case FLOAT8:
        recordConsumer.addDouble(tuple.getFloat8(index));
        break;
      case CHAR:
        if (tuple.size(index) > column.getDataType().getLength()) {
          throw new ValueTooLongForTypeCharactersException(column.getDataType().getLength());
        }

        recordConsumer.addBinary(Binary.fromByteArray(tuple.getTextBytes(index)));
        break;
      case TEXT:
        recordConsumer.addBinary(Binary.fromByteArray(tuple.getTextBytes(index)));
        break;
      case DATE:
        // Parquet DATE type is based on Unix Epoch(Jan 1, 1970).
        recordConsumer.addInteger(tuple.getInt4(index) - DateTimeConstants.UNIX_EPOCH_JDATE);
        break;
      case PROTOBUF:
      case BLOB:
        recordConsumer.addBinary(Binary.fromByteArray(tuple.getBytes(index)));
        break;
      default:
        break;
    }
  }
예제 #3
0
 @Override
 public void writeValue(RecordConsumer recordConsumer) {
   recordConsumer.addFloat(value);
 }
예제 #4
0
 /**
  * Writes a Tuple to the file.
  *
  * @param tuple The Tuple to write to the file.
  */
 @Override
 public void write(Tuple tuple) {
   recordConsumer.startMessage();
   writeRecordFields(rootSchema, rootTajoSchema, tuple);
   recordConsumer.endMessage();
 }