diff --git a/src/operator/src/insert.rs b/src/operator/src/insert.rs index b12bd91989..5d27de039b 100644 --- a/src/operator/src/insert.rs +++ b/src/operator/src/insert.rs @@ -580,6 +580,10 @@ impl Inserter { // for it's a very unexpected behavior and should be set by user explicitly for mut create_table in create_tables { if create_table.table_name == trace_services_table_name(trace_table_name) { + // Disable append mode for trace services table since it requires upsert behavior. + create_table + .table_options + .insert(APPEND_MODE_KEY.to_string(), "false".to_string()); let table = self .create_physical_table(create_table, None, ctx, statement_executor) .await?; diff --git a/src/servers/src/otlp/trace/v1.rs b/src/servers/src/otlp/trace/v1.rs index 86d4112807..68dfff0a97 100644 --- a/src/servers/src/otlp/trace/v1.rs +++ b/src/servers/src/otlp/trace/v1.rs @@ -176,9 +176,9 @@ fn write_trace_services_to_row(writer: &mut TableData, services: HashSet )?; // Write the `service_name` column. - row_writer::write_fields( + row_writer::write_tags( writer, - std::iter::once(make_string_column_data(SERVICE_NAME_COLUMN, service_name)), + std::iter::once((SERVICE_NAME_COLUMN.to_string(), service_name)), &mut row, )?; writer.add_row(row); diff --git a/tests-integration/tests/http.rs b/tests-integration/tests/http.rs index f02d25dbd6..7ce500b9b1 100644 --- a/tests-integration/tests/http.rs +++ b/tests-integration/tests/http.rs @@ -2838,7 +2838,7 @@ pub async fn test_otlp_traces_v1(store_type: StorageType) { ) .await; - let expected_ddl = r#"[["mytable_services","CREATE TABLE IF NOT EXISTS \"mytable_services\" (\n \"timestamp\" TIMESTAMP(9) NOT NULL,\n \"service_name\" STRING NULL,\n TIME INDEX (\"timestamp\")\n)\n\nENGINE=mito\nWITH(\n append_mode = 'true'\n)"]]"#; + let expected_ddl = r#"[["mytable_services","CREATE TABLE IF NOT EXISTS \"mytable_services\" (\n \"timestamp\" TIMESTAMP(9) NOT NULL,\n \"service_name\" STRING NULL,\n TIME INDEX (\"timestamp\"),\n PRIMARY KEY (\"service_name\")\n)\n\nENGINE=mito\nWITH(\n append_mode = 'false'\n)"]]"#; validate_data( "otlp_traces", &client,