This is an automated email from the ASF dual-hosted git repository.

yihua pushed a commit to branch branch-0.x
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/branch-0.x by this push:
     new ca937b774fb3 [HUDI-5034] Remove Spark Avro schema post processor 
(#6956) (#17799)
ca937b774fb3 is described below

commit ca937b774fb312b59ab445a758b9fcb7e5873e1d
Author: Lin Liu <[email protected]>
AuthorDate: Thu Jan 8 00:04:53 2026 -0800

    [HUDI-5034] Remove Spark Avro schema post processor (#6956) (#17799)
    
    Co-authored-by: Y Ethan Guo <[email protected]>
---
 .../org/apache/hudi/utilities/UtilHelpers.java     |   9 --
 .../config/HoodieSchemaProviderConfig.java         |   7 -
 .../utilities/schema/SparkAvroPostProcessor.java   |  56 --------
 .../hudi/utilities/TestSchemaPostProcessor.java    |   9 --
 .../deltastreamer/HoodieDeltaStreamerTestBase.java |   1 -
 .../deltastreamer/TestHoodieDeltaStreamer.java     |  47 ++----
 .../source_evolved_post_processed.avsc             | 160 ---------------------
 7 files changed, 13 insertions(+), 276 deletions(-)

diff --git 
a/hudi-utilities/src/main/java/org/apache/hudi/utilities/UtilHelpers.java 
b/hudi-utilities/src/main/java/org/apache/hudi/utilities/UtilHelpers.java
index 74cc775718a2..9c568858294d 100644
--- a/hudi-utilities/src/main/java/org/apache/hudi/utilities/UtilHelpers.java
+++ b/hudi-utilities/src/main/java/org/apache/hudi/utilities/UtilHelpers.java
@@ -52,7 +52,6 @@ import org.apache.hudi.index.HoodieIndex;
 import org.apache.hudi.storage.HoodieStorage;
 import org.apache.hudi.storage.StoragePath;
 import org.apache.hudi.utilities.checkpointing.InitialCheckPointProvider;
-import org.apache.hudi.utilities.config.HoodieSchemaProviderConfig;
 import org.apache.hudi.utilities.config.SchemaProviderPostProcessorConfig;
 import org.apache.hudi.utilities.exception.HoodieSchemaFetchException;
 import org.apache.hudi.utilities.exception.HoodieSchemaPostProcessException;
@@ -64,7 +63,6 @@ import 
org.apache.hudi.utilities.schema.RowBasedSchemaProvider;
 import org.apache.hudi.utilities.schema.SchemaPostProcessor;
 import org.apache.hudi.utilities.schema.SchemaProvider;
 import org.apache.hudi.utilities.schema.SchemaProviderWithPostProcessor;
-import org.apache.hudi.utilities.schema.SparkAvroPostProcessor;
 import 
org.apache.hudi.utilities.schema.postprocessor.ChainedSchemaPostProcessor;
 import org.apache.hudi.utilities.sources.InputBatch;
 import org.apache.hudi.utilities.sources.Source;
@@ -116,7 +114,6 @@ import java.util.Properties;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
-import static org.apache.hudi.common.util.ConfigUtils.getBooleanWithAltKeys;
 import static org.apache.hudi.common.util.ConfigUtils.getStringWithAltKeys;
 import static org.apache.hudi.hadoop.fs.HadoopFSUtils.convertToStoragePath;
 
@@ -547,12 +544,6 @@ public class UtilHelpers {
 
     String schemaPostProcessorClass = getStringWithAltKeys(
         cfg, SchemaProviderPostProcessorConfig.SCHEMA_POST_PROCESSOR, true);
-    boolean enableSparkAvroPostProcessor =
-        getBooleanWithAltKeys(cfg, 
HoodieSchemaProviderConfig.SPARK_AVRO_POST_PROCESSOR_ENABLE);
-    if (transformerClassNames != null && !transformerClassNames.isEmpty()
-        && enableSparkAvroPostProcessor && 
StringUtils.isNullOrEmpty(schemaPostProcessorClass)) {
-      schemaPostProcessorClass = SparkAvroPostProcessor.class.getName();
-    }
 
     if (schemaPostProcessorClass == null || 
schemaPostProcessorClass.isEmpty()) {
       return provider;
diff --git 
a/hudi-utilities/src/main/java/org/apache/hudi/utilities/config/HoodieSchemaProviderConfig.java
 
b/hudi-utilities/src/main/java/org/apache/hudi/utilities/config/HoodieSchemaProviderConfig.java
index e7ec7815b976..6e1dbab8e9ae 100644
--- 
a/hudi-utilities/src/main/java/org/apache/hudi/utilities/config/HoodieSchemaProviderConfig.java
+++ 
b/hudi-utilities/src/main/java/org/apache/hudi/utilities/config/HoodieSchemaProviderConfig.java
@@ -59,13 +59,6 @@ public class HoodieSchemaProviderConfig extends HoodieConfig 
{
       .markAdvanced()
       .withDocumentation("The class name of the custom schema converter to 
use.");
 
-  public static final ConfigProperty<Boolean> SPARK_AVRO_POST_PROCESSOR_ENABLE 
= ConfigProperty
-      .key(SCHEMAPROVIDER_CONFIG_PREFIX + "spark_avro_post_processor.enable")
-      .defaultValue(true)
-      .withAlternatives(OLD_SCHEMAPROVIDER_CONFIG_PREFIX + 
"spark_avro_post_processor.enable")
-      .markAdvanced()
-      .withDocumentation("Whether to enable Spark Avro post processor.");
-
   public static final ConfigProperty<String> SCHEMA_REGISTRY_BASE_URL = 
ConfigProperty
       .key(SCHEMAPROVIDER_CONFIG_PREFIX + "registry.baseUrl")
       .noDefaultValue()
diff --git 
a/hudi-utilities/src/main/java/org/apache/hudi/utilities/schema/SparkAvroPostProcessor.java
 
b/hudi-utilities/src/main/java/org/apache/hudi/utilities/schema/SparkAvroPostProcessor.java
deleted file mode 100644
index 406f71872d59..000000000000
--- 
a/hudi-utilities/src/main/java/org/apache/hudi/utilities/schema/SparkAvroPostProcessor.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hudi.utilities.schema;
-
-import org.apache.hudi.AvroConversionUtils;
-import org.apache.hudi.common.config.TypedProperties;
-import org.apache.hudi.utilities.config.HoodieSchemaProviderConfig;
-
-import org.apache.avro.Schema;
-import org.apache.spark.api.java.JavaSparkContext;
-import org.apache.spark.sql.types.StructType;
-
-/**
- * HUDI-1343:Add standard schema postprocessor which would rewrite the schema 
using spark-avro conversion.
- */
-public class SparkAvroPostProcessor extends SchemaPostProcessor {
-
-  @Deprecated
-  public static class Config {
-    @Deprecated
-    public static final String SPARK_AVRO_POST_PROCESSOR_PROP_ENABLE =
-        HoodieSchemaProviderConfig.SPARK_AVRO_POST_PROCESSOR_ENABLE.key();
-  }
-
-  public SparkAvroPostProcessor(TypedProperties props, JavaSparkContext jssc) {
-    super(props, jssc);
-  }
-
-  @Override
-  public Schema processSchema(Schema schema) {
-    if (schema == null) {
-      return null;
-    }
-
-    StructType structType = 
AvroConversionUtils.convertAvroSchemaToStructType(schema);
-    // NOTE: It's critical that we preserve incoming schema's qualified 
record-name to make
-    //       sure we maintain schema's compatibility (as defined by 
[[AvroSchemaCompatibility]])
-    return AvroConversionUtils.convertStructTypeToAvroSchema(structType, 
schema.getFullName());
-  }
-}
\ No newline at end of file
diff --git 
a/hudi-utilities/src/test/java/org/apache/hudi/utilities/TestSchemaPostProcessor.java
 
b/hudi-utilities/src/test/java/org/apache/hudi/utilities/TestSchemaPostProcessor.java
index 0818c43cc02f..264332ec77ce 100644
--- 
a/hudi-utilities/src/test/java/org/apache/hudi/utilities/TestSchemaPostProcessor.java
+++ 
b/hudi-utilities/src/test/java/org/apache/hudi/utilities/TestSchemaPostProcessor.java
@@ -23,7 +23,6 @@ import 
org.apache.hudi.utilities.config.SchemaProviderPostProcessorConfig;
 import org.apache.hudi.utilities.exception.HoodieSchemaPostProcessException;
 import org.apache.hudi.utilities.schema.SchemaPostProcessor;
 import org.apache.hudi.utilities.schema.SchemaProvider;
-import org.apache.hudi.utilities.schema.SparkAvroPostProcessor;
 import 
org.apache.hudi.utilities.schema.postprocessor.DeleteSupportSchemaPostProcessor;
 import 
org.apache.hudi.utilities.schema.postprocessor.DropColumnSchemaPostProcessor;
 import 
org.apache.hudi.utilities.schema.postprocessor.add.AddPrimitiveColumnSchemaPostProcessor;
@@ -88,7 +87,6 @@ public class TestSchemaPostProcessor extends 
UtilitiesTestBase {
 
   @Test
   public void testSparkAvro() throws IOException {
-    
properties.put(SchemaProviderPostProcessorConfig.SCHEMA_POST_PROCESSOR.key(), 
SparkAvroPostProcessor.class.getName());
     List<String> transformerClassNames = new ArrayList<>();
     transformerClassNames.add(FlatteningTransformer.class.getName());
 
@@ -185,11 +183,4 @@ public class TestSchemaPostProcessor extends 
UtilitiesTestBase {
     assertEquals(type, newColumn.schema().getType().getName());
 
   }
-
-  @Test
-  public void testSparkAvroSchema() throws IOException {
-    SparkAvroPostProcessor processor = new SparkAvroPostProcessor(properties, 
null);
-    Schema schema = new Schema.Parser().parse(ORIGINAL_SCHEMA);
-    assertEquals(RESULT_SCHEMA, processor.processSchema(schema).toString());
-  }
 }
diff --git 
a/hudi-utilities/src/test/java/org/apache/hudi/utilities/deltastreamer/HoodieDeltaStreamerTestBase.java
 
b/hudi-utilities/src/test/java/org/apache/hudi/utilities/deltastreamer/HoodieDeltaStreamerTestBase.java
index 51a8d26754a6..03ca6bd67815 100644
--- 
a/hudi-utilities/src/test/java/org/apache/hudi/utilities/deltastreamer/HoodieDeltaStreamerTestBase.java
+++ 
b/hudi-utilities/src/test/java/org/apache/hudi/utilities/deltastreamer/HoodieDeltaStreamerTestBase.java
@@ -187,7 +187,6 @@ public class HoodieDeltaStreamerTestBase extends 
UtilitiesTestBase {
         dfsBasePath + "/sql-transformer.properties");
     UtilitiesTestBase.Helpers.copyToDFS("streamer-config/source.avsc", 
storage, dfsBasePath + "/source.avsc");
     UtilitiesTestBase.Helpers.copyToDFS("streamer-config/source_evolved.avsc", 
storage, dfsBasePath + "/source_evolved.avsc");
-    
UtilitiesTestBase.Helpers.copyToDFS("streamer-config/source_evolved_post_processed.avsc",
 storage, dfsBasePath + "/source_evolved_post_processed.avsc");
     
UtilitiesTestBase.Helpers.copyToDFS("streamer-config/source-flattened.avsc", 
storage, dfsBasePath + "/source-flattened.avsc");
     UtilitiesTestBase.Helpers.copyToDFS("streamer-config/target.avsc", 
storage, dfsBasePath + "/target.avsc");
     
UtilitiesTestBase.Helpers.copyToDFS("streamer-config/target-flattened.avsc", 
storage, dfsBasePath + "/target-flattened.avsc");
diff --git 
a/hudi-utilities/src/test/java/org/apache/hudi/utilities/deltastreamer/TestHoodieDeltaStreamer.java
 
b/hudi-utilities/src/test/java/org/apache/hudi/utilities/deltastreamer/TestHoodieDeltaStreamer.java
index e20875608de5..d2c5cfa148e2 100644
--- 
a/hudi-utilities/src/test/java/org/apache/hudi/utilities/deltastreamer/TestHoodieDeltaStreamer.java
+++ 
b/hudi-utilities/src/test/java/org/apache/hudi/utilities/deltastreamer/TestHoodieDeltaStreamer.java
@@ -81,7 +81,6 @@ import org.apache.hudi.storage.StoragePathInfo;
 import org.apache.hudi.utilities.DummySchemaProvider;
 import org.apache.hudi.utilities.HoodieClusteringJob;
 import org.apache.hudi.utilities.HoodieIndexer;
-import org.apache.hudi.utilities.config.HoodieSchemaProviderConfig;
 import org.apache.hudi.utilities.config.HoodieStreamerConfig;
 import org.apache.hudi.utilities.config.SourceTestConfig;
 import org.apache.hudi.utilities.schema.FilebasedSchemaProvider;
@@ -278,23 +277,15 @@ public class TestHoodieDeltaStreamer extends 
HoodieDeltaStreamerTestBase {
    */
   private static Stream<Arguments> schemaEvolArgs() {
     return Stream.of(
-        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), true, 
true, HoodieRecordType.AVRO),
-        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), true, 
false, HoodieRecordType.AVRO),
-        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), false, 
true, HoodieRecordType.AVRO),
-        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), false, 
false, HoodieRecordType.AVRO),
-        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), true, 
true, HoodieRecordType.AVRO),
-        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), true, 
false, HoodieRecordType.AVRO),
-        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), false, 
true, HoodieRecordType.AVRO),
-        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), false, 
false, HoodieRecordType.AVRO),
-
-        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), true, 
true, HoodieRecordType.SPARK),
-        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), true, 
false, HoodieRecordType.SPARK),
-        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), false, 
true, HoodieRecordType.SPARK),
-        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), false, 
false, HoodieRecordType.SPARK),
-        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), true, 
true, HoodieRecordType.SPARK),
-        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), true, 
false, HoodieRecordType.SPARK),
-        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), false, 
true, HoodieRecordType.SPARK),
-        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), false, 
false, HoodieRecordType.SPARK));
+        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), true, 
HoodieRecordType.AVRO),
+        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), false, 
HoodieRecordType.AVRO),
+        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), true, 
HoodieRecordType.AVRO),
+        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), false, 
HoodieRecordType.AVRO),
+
+        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), true, 
HoodieRecordType.SPARK),
+        Arguments.of(DataSourceWriteOptions.COW_TABLE_TYPE_OPT_VAL(), false, 
HoodieRecordType.SPARK),
+        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), true, 
HoodieRecordType.SPARK),
+        Arguments.of(DataSourceWriteOptions.MOR_TABLE_TYPE_OPT_VAL(), false, 
HoodieRecordType.SPARK));
   }
 
   private static Stream<Arguments> provideValidCliArgs() {
@@ -569,8 +560,8 @@ public class TestHoodieDeltaStreamer extends 
HoodieDeltaStreamerTestBase {
   // TODO add tests w/ disabled reconciliation
   @ParameterizedTest
   @MethodSource("schemaEvolArgs")
-  public void testSchemaEvolution(String tableType, boolean 
useUserProvidedSchema, boolean useSchemaPostProcessor, HoodieRecordType 
recordType) throws Exception {
-    String tableBasePath = basePath + "/test_table_schema_evolution" + 
tableType + "_" + useUserProvidedSchema + "_" + useSchemaPostProcessor;
+  public void testSchemaEvolution(String tableType, boolean 
useUserProvidedSchema, HoodieRecordType recordType) throws Exception {
+    String tableBasePath = basePath + "/test_table_schema_evolution" + 
tableType + "_" + useUserProvidedSchema;
     defaultSchemaProviderClassName = FilebasedSchemaProvider.class.getName();
     // Insert data produced with Schema A, pass Schema A
     HoodieDeltaStreamer.Config cfg = TestHelpers.makeConfig(tableBasePath, 
WriteOperationType.INSERT, 
Collections.singletonList(TestIdentityTransformer.class.getName()),
@@ -579,9 +570,7 @@ public class TestHoodieDeltaStreamer extends 
HoodieDeltaStreamerTestBase {
     cfg.configs.add("hoodie.streamer.schemaprovider.source.schema.file=" + 
basePath + "/source.avsc");
     cfg.configs.add("hoodie.streamer.schemaprovider.target.schema.file=" + 
basePath + "/source.avsc");
     cfg.configs.add(DataSourceWriteOptions.RECONCILE_SCHEMA().key() + "=true");
-    if (!useSchemaPostProcessor) {
-      
cfg.configs.add(HoodieSchemaProviderConfig.SPARK_AVRO_POST_PROCESSOR_ENABLE.key()
 + "=false");
-    }
+
     new HoodieDeltaStreamer(cfg, jsc).sync();
     assertRecordCount(1000, tableBasePath, sqlContext);
     TestHelpers.assertCommitMetadata("00000", tableBasePath, 1);
@@ -593,9 +582,6 @@ public class TestHoodieDeltaStreamer extends 
HoodieDeltaStreamerTestBase {
     cfg.configs.add("hoodie.streamer.schemaprovider.source.schema.file=" + 
basePath + "/source.avsc");
     cfg.configs.add("hoodie.streamer.schemaprovider.target.schema.file=" + 
basePath + "/source_evolved.avsc");
     cfg.configs.add(DataSourceWriteOptions.RECONCILE_SCHEMA().key() + "=true");
-    if (!useSchemaPostProcessor) {
-      
cfg.configs.add(HoodieSchemaProviderConfig.SPARK_AVRO_POST_PROCESSOR_ENABLE.key()
 + "=false");
-    }
     new HoodieDeltaStreamer(cfg, jsc).sync();
     // out of 1000 new records, 500 are inserts, 450 are updates and 50 are 
deletes.
     assertRecordCount(1450, tableBasePath, sqlContext);
@@ -619,9 +605,6 @@ public class TestHoodieDeltaStreamer extends 
HoodieDeltaStreamerTestBase {
     if (useUserProvidedSchema) {
       cfg.configs.add("hoodie.streamer.schemaprovider.target.schema.file=" + 
basePath + "/source_evolved.avsc");
     }
-    if (!useSchemaPostProcessor) {
-      
cfg.configs.add(HoodieSchemaProviderConfig.SPARK_AVRO_POST_PROCESSOR_ENABLE.key()
 + "=false");
-    }
     cfg.configs.add(DataSourceWriteOptions.RECONCILE_SCHEMA().key() + "=true");
     new HoodieDeltaStreamer(cfg, jsc).sync();
     // again, 1000 new records, 500 are inserts, 450 are updates and 50 are 
deletes.
@@ -636,11 +619,7 @@ public class TestHoodieDeltaStreamer extends 
HoodieDeltaStreamerTestBase {
     assertNotNull(tableSchema);
 
     Schema expectedSchema;
-    if (!useSchemaPostProcessor) {
-      expectedSchema = new Schema.Parser().parse(fs.open(new Path(basePath + 
"/source_evolved.avsc")));
-    } else {
-      expectedSchema = new Schema.Parser().parse(fs.open(new Path(basePath + 
"/source_evolved_post_processed.avsc")));
-    }
+    expectedSchema = new Schema.Parser().parse(fs.open(new Path(basePath + 
"/source_evolved.avsc")));
     assertEquals(expectedSchema, tableSchema);
 
     // clean up and reinit
diff --git 
a/hudi-utilities/src/test/resources/streamer-config/source_evolved_post_processed.avsc
 
b/hudi-utilities/src/test/resources/streamer-config/source_evolved_post_processed.avsc
deleted file mode 100644
index af9844218c48..000000000000
--- 
a/hudi-utilities/src/test/resources/streamer-config/source_evolved_post_processed.avsc
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-{
-  "type": "record",
-  "name": "triprec",
-  "fields": [
-    {
-      "name": "timestamp",
-      "type": "long"
-    },
-    {
-      "name": "_row_key",
-      "type": "string"
-    },
-    {
-      "name": "partition_path",
-      "type": "string"
-    },
-    {
-      "name": "trip_type",
-      "type": "string"
-    },
-    {
-      "name": "rider",
-      "type": "string"
-    },
-    {
-      "name": "driver",
-      "type": "string"
-    },
-    {
-      "name": "begin_lat",
-      "type": "double"
-    },
-    {
-      "name": "begin_lon",
-      "type": "double"
-    },
-    {
-      "name": "end_lat",
-      "type": "double"
-    },
-    {
-      "name": "end_lon",
-      "type": "double"
-    },
-    {
-      "name": "distance_in_meters",
-      "type": "int"
-    },
-    {
-      "name": "seconds_since_epoch",
-      "type": "long"
-    },
-    {
-      "name": "weight",
-      "type": "float"
-    },
-    {
-      "name": "nation",
-      "type": "bytes"
-    },
-    {
-      "name": "current_date",
-      "type": {
-        "type": "int",
-        "logicalType": "date"
-      }
-    },
-    {
-      "name": "current_ts",
-      "type": "long"
-    },
-    {
-      "name": "height",
-      "type": {
-        "type": "fixed",
-        "name": "fixed",
-        "namespace": "triprec.height",
-        "size": 5,
-        "logicalType": "decimal",
-        "precision": 10,
-        "scale": 6
-      }
-    },
-    {
-      "name": "city_to_state",
-      "type": {
-        "type": "map",
-        "values": "string"
-      }
-    },
-    {
-      "name": "fare",
-      "type": {
-        "type": "record",
-        "name": "fare",
-        "namespace": "triprec",
-        "fields": [
-          {
-            "name": "amount",
-            "type": "double"
-          },
-          {
-            "name": "currency",
-            "type": "string"
-          }
-        ]
-      }
-    },
-    {
-      "name": "tip_history",
-      "type": {
-        "type": "array",
-        "items": {
-          "type": "record",
-          "name": "tip_history",
-          "namespace": "triprec",
-          "fields": [
-            {
-              "name": "amount",
-              "type": "double"
-            },
-            {
-              "name": "currency",
-              "type": "string"
-            }
-          ]
-        }
-      }
-    },
-    {
-      "name": "_hoodie_is_deleted",
-      "type": "boolean"
-    },
-    {
-      "name": "evoluted_optional_union_field",
-      "type": [
-        "null",
-        "string"
-      ],
-      "default": null
-    }
-  ]
-}

Reply via email to