rangareddy commented on issue #12024:
URL: https://github.com/apache/hudi/issues/12024#issuecomment-2418667373

   Hi @usberkeley 
   
   I got the expected exception when we specify the same location while 
creating the table and saving the data.
   
   **Exception:**
   
   ```scala
   24/10/17 12:10:12 INFO HoodieTableConfig: Loading table properties from 
file:/tmp/hudi/Test12114/.hoodie/hoodie.properties
   24/10/17 12:10:12 INFO HoodieTableMetaClient: Finished Loading Table of type 
COPY_ON_WRITE(version=1, baseFileFormat=PARQUET) from file:///tmp/hudi/Test12114
   Exception in thread "main" org.apache.hudi.exception.HoodieException: Config 
conflict(key    current value   existing value):
   RecordKey:   id,age  id,name
        at 
org.apache.hudi.HoodieWriterUtils$.validateTableConfig(HoodieWriterUtils.scala:229)
        at 
org.apache.hudi.HoodieSparkSqlWriterInternal.writeInternal(HoodieSparkSqlWriter.scala:232)
        at 
org.apache.hudi.HoodieSparkSqlWriterInternal.write(HoodieSparkSqlWriter.scala:187)
        at 
org.apache.hudi.HoodieSparkSqlWriter$.write(HoodieSparkSqlWriter.scala:125)
        at org.apache.hudi.DefaultSource.createRelation(DefaultSource.scala:168)
   ```
   
   **Code:**
   
   ```scala
   import org.apache.spark.SparkConf
   import org.apache.spark.sql.types._
   import org.apache.spark.sql.{Row, SparkSession}
   
   object Test12024 extends App {
     val name = this.getClass.getSimpleName.replace("$", "")
     val sparkConf = new 
SparkConf().setAppName(name).setIfMissing("spark.master", "local[2]")
   
     val spark = SparkSession.builder.appName(name).config(sparkConf)
       .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
       .config("spark.sql.extensions", 
"org.apache.spark.sql.hudi.HoodieSparkSessionExtension")
       .config("spark.sql.hive.convertMetastoreParquet", "false")
       .getOrCreate()
   
     val tableName = name
     val basePath = f"file:///tmp/hudi/$tableName"
   
     spark.sql(
       f"""
         |CREATE TABLE IF NOT EXISTS ${tableName} (
         |  `id` VARCHAR(20),
         |  `name` VARCHAR(10),
         |  `age` INT,
         |  `ts` Long
         |) USING HUDI TBLPROPERTIES (primaryKey = 'id,name', preCombineField = 
'ts')
         | LOCATION '${basePath}'
       """.stripMargin)
   
     val input_schema = StructType(Seq(
       StructField("id", LongType),
       StructField("name", StringType),
       StructField("age", IntegerType),
       StructField("ts", LongType),
     ))
   
     val input_data = Seq(
       Row(1L, "hello", 42,  1695159649087L),
       Row(2L, "world", 13, 1695091554788L),
       Row(3L, "spark", 7, 1695115999911L),
       Row(1L, "hello", 43,  1695159649087L),
     )
   
     val hoodieConf = scala.collection.mutable.Map[String, String]()
     hoodieConf.put("hoodie.datasource.write.recordkey.field", "id,age")
     hoodieConf.put("hoodie.table.precombine.field", "ts")
     hoodieConf.put("hoodie.table.name", tableName)
   
     val input_df = 
spark.createDataFrame(spark.sparkContext.parallelize(input_data), input_schema)
   
     input_df.write.format("hudi").
       options(hoodieConf).
       mode("append").
       save(basePath)
   
     spark.read.format("hudi").load(basePath).show(false)
     
     spark.stop()
   }
   ```
   
   


-- 
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