nsivabalan commented on code in PR #8574:
URL: https://github.com/apache/hudi/pull/8574#discussion_r1190135969


##########
hudi-utilities/src/main/java/org/apache/hudi/utilities/transform/ChainedTransformer.java:
##########
@@ -59,11 +65,15 @@ public ChainedTransformer(List<Transformer> 
transformersList) {
    * Creates a chained transformer using the input transformer class names. 
Refer {@link HoodieDeltaStreamer.Config#transformerClassNames}
    * for more information on how the transformers can be configured.
    *
-   * @param configuredTransformers List of configured transformer class names.
-   * @param ignore Added for avoiding two methods with same erasure. Ignored.
+   * @param sourceSchemaOpt                   Source Schema
+   * @param configuredTransformers            List of configured transformer 
class names.
+   * @param enableSchemaValidation            If true, schema is validated for 
the transformed data against expected schema.
+   *                                          Expected schema is provided by 
{@link Transformer#transformedSchema}
    */
-  public ChainedTransformer(List<String> configuredTransformers, int... 
ignore) {
+  public ChainedTransformer(List<String> configuredTransformers, 
Option<Schema> sourceSchemaOpt, boolean enableSchemaValidation) {
     this.transformers = new ArrayList<>(configuredTransformers.size());
+    this.enableSchemaValidation = enableSchemaValidation;
+    this.sourceSchemaOpt = sourceSchemaOpt;

Review Comment:
   do we need any validation as below
   when enableSchemaValidation is true, sourceSchemaOpt is present ? 



##########
hudi-utilities/src/main/java/org/apache/hudi/utilities/transform/ChainedTransformer.java:
##########
@@ -109,6 +123,29 @@ private void validateIdentifier(String id, Set<String> 
identifiers, String confi
     }
   }
 
+  private Option<Schema> validateAndGetTransformedSchema(TransformerInfo 
transformerInfo, Dataset<Row> dataset, Option<Schema> incomingSchemaOpt,
+                                                         JavaSparkContext jsc, 
SparkSession sparkSession, TypedProperties properties) {
+    if (!incomingSchemaOpt.isPresent()) {
+      throw new HoodieSchemaException(String.format("Source schema not 
available for transformer %s", transformerInfo));
+    }
+    Schema incomingSchema = incomingSchemaOpt.get();
+
+    // Get expected target schema from transformer and actual target schema 
from struct
+    Schema targetSchema = 
AvroConversionUtils.convertStructTypeToAvroSchema(dataset.schema(), 
incomingSchema.getName(),
+        incomingSchema.getNamespace());
+    Option<Schema> expectedTargetSchemaOpt = 
transformerInfo.getTransformer().transformedSchema(jsc, sparkSession, 
incomingSchema, properties);
+    if (!expectedTargetSchemaOpt.isPresent()) {
+      throw new HoodieSchemaException(String.format("Expected target schema 
not provided for transformer %s", transformerInfo));
+    }
+
+    Schema expectedTargetSchema = expectedTargetSchemaOpt.get();
+    if (!AvroSchemaUtils.isSchemaCompatible(expectedTargetSchema, 
targetSchema, false, false)) {

Review Comment:
   ok. 
   can we make the checkNaming to true though? (3rd arg)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to