apache/seatunnel

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

Fechada

#10.584 aberto em 10 de mar. de 2026

 (7 comentários) (0 reação) (0 responsável)Java (1.432 forks)batch import
bughelp wanted

Métricas do repositório

Stars
 (6.897 estrelas)
Métricas de merge de PR
 (Mesclagem média 13d 21h) (143 fundiu PRs em 30d)

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

Guia do colaborador