private StructField getGeneratedField()

in xtable-core/src/main/java/org/apache/xtable/delta/DeltaPartitionExtractor.java [356:400]


  private StructField getGeneratedField(InternalPartitionField internalPartitionField) {
    String generatedExpression;
    DataType dataType;
    String currPartitionColumnName = getGeneratedColumnName(internalPartitionField);
    switch (internalPartitionField.getTransformType()) {
      case YEAR:
        generatedExpression =
            String.format(YEAR_FUNCTION, internalPartitionField.getSourceField().getPath());
        dataType = DataTypes.IntegerType;
        break;
      case MONTH:
      case HOUR:
        generatedExpression =
            String.format(
                DATE_FORMAT_FUNCTION,
                internalPartitionField.getSourceField().getPath(),
                getDateFormat(internalPartitionField.getTransformType()));
        dataType = DataTypes.StringType;
        break;
      case DAY:
        generatedExpression =
            String.format(CAST_FUNCTION, internalPartitionField.getSourceField().getPath());
        dataType = DataTypes.DateType;
        break;
      case BUCKET:
        generatedExpression =
            String.format(
                BUCKET_FUNCTION,
                internalPartitionField.getSourceField().getPath(),
                Integer.MAX_VALUE,
                (int)
                    internalPartitionField
                        .getTransformOptions()
                        .get(InternalPartitionField.NUM_BUCKETS));
        dataType = DataTypes.IntegerType;
        break;
      default:
        throw new PartitionSpecException("Invalid transform type");
    }
    Map<String, String> generatedExpressionMetadata =
        Collections.singletonMap(DELTA_GENERATION_EXPRESSION, generatedExpression);
    Metadata partitionFieldMetadata =
        new Metadata(ScalaUtils.convertJavaMapToScala(generatedExpressionMetadata));
    return new StructField(currPartitionColumnName, dataType, true, partitionFieldMetadata);
  }