apache/seatunnel

[Bug] [hudi sink] hudi sink java client not support struct field type where is null

Open

#10584 opened on Mar 10, 2026

View on GitHub
 (7 comments) (0 reactions) (0 assignees)Java (6,897 stars) (1,432 forks)batch import
bughelp wanted

Description

Search before asking

  • I had searched in the issues and found no similar issues.

What happened

INSERT INTO test.dcjob_hudi2hudi_ly_0122_1 (_hoodie_commit_time, _hoodie_commit_seqno, _hoodie_record_key, _hoodie_partition_path, _hoodie_file_name, int_column, string_column, varchar_column, tinyint_column, smallint_column, bigint_column, float_column, double_column, decimal_column, date_column, timestamp_column, char_column, boolean_column, binary_column, array_column, map_column, struct_column) VALUES('20260306093746536', '20260306093746536_0_6', '11', '', 'eb787520-2452-4f83-b623-4b89c89b29e2-0_0-4733-5267_20260306154907638.parquet', 11, 'varchar_column1', 'string值1', 121, 321, 922337203685477501, 1.21, 123.41, 12345678.91, '2026-01-01', '2026-01-01 15:30:20.000', 'char值1', false, 0x62696E6172795F636F6C756D6E31, NULL, NULL, []);

Caused by: java.lang.NullPointerException at org.apache.avro.generic.GenericData.getField(GenericData.java:846) at org.apache.avro.generic.GenericData.getField(GenericData.java:865) at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:219) at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:210) at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:131) at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:83) at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:221) at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:210) at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:131)

SeaTunnel Version

2.3.9

SeaTunnel Config

{
	"env": {
		"job.mode": "BATCH",
		"parallelism": 1,
		"job.name": "zsdcTest_hudi2hudi_0121_instance_1768987020918_5401",
		"checkpoint.interval": 10
	},
	"source": [{
		"_type": "hudi_source",
		"plugin_name": "hudi",
		"result_table_name": "dcjob_hudi2hudi_ly_0121_12101424056",
		"table_dfs_path": "hdfs://nameservice1/user/hive/warehouse",
		"table_name": "dcjob_hudi2hudi_ly_0122_1",
		"database": "test",
		"query": "select * from `dcjob_hudi2hudi_ly_0122_1`"
	}],
	"sink": [{
		"_type": "hudi_sink",
		"schema_save_mode": "ERROR_WHEN_SCHEMA_NOT_EXIST",
		"data_save_mode": "APPEND_DATA",
		"plugin_name": "Hudi",
		"source_table_name": "dcjob_hudi2hudi_ly_0121_12101424056_t",
		"table_dfs_path": "hdfs://nameservice1/user/hive/warehouse",
		"table_name": "dcjob_hudi2hudi_mb_0122_1",
		"database": "test",
		"table_type": "COPY_ON_WRITE"
	}],
	"transform": [{
		"_type": "sql_trans",
		"query": "SELECT TRY_CAST(`int_column` AS INTEGER) as `int_column`,TRY_CAST(`string_column` AS STRING) as `string_column`,TRY_CAST(`varchar_column` AS STRING) as `varchar_column`,TRY_CAST(`tinyint_column` AS INTEGER) as `tinyint_column`,TRY_CAST(`smallint_column` AS INTEGER) as `smallint_column`,TRY_CAST(`bigint_column` AS BIGINT) as `bigint_column`,TRY_CAST(`float_column` AS FLOAT) as `float_column`,TRY_CAST(`double_column` AS DOUBLE) as `double_column`,TRY_CAST(`decimal_column` AS DECIMAL(10,2)) as `decimal_column`,TRY_CAST(`date_column` AS DATE) as `date_column`,TRY_CAST(`timestamp_column` AS TIMESTAMP) as `timestamp_column`,TRY_CAST(`char_column` AS STRING) as `char_column`,TRY_CAST(`boolean_column` AS BOOLEAN) as `boolean_column`,TRY_CAST(`binary_column` AS BYTES) as `binary_column`,TRY_CAST(`array_column` AS ARRAY<STRING>) as `array_column`,TRY_CAST(`map_column` AS MAP(VARCHAR, INT)) as `map_column`,TRY_CAST(`struct_column` AS ROW(field1 string,field2 int)) as `struct_column` FROM `dcjob_hudi2hudi_ly_0121_12101424056`",
		"source_table_name": "dcjob_hudi2hudi_ly_0121_12101424056",
		"result_table_name": "dcjob_hudi2hudi_ly_0121_12101424056_t"
	}]
}

Running Command

xxx

Error Exception

Caused by: java.lang.NullPointerException
	at org.apache.avro.generic.GenericData.getField(GenericData.java:846)
	at org.apache.avro.generic.GenericData.getField(GenericData.java:865)
	at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:219)
	at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:210)
	at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:131)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:83)
	at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:221)
	at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:210)
	at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:131)

Zeta or Flink or Spark Version

No response

Java or Scala Version

No response

Screenshots

No response

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Contributor guide