diff --git a/query_server/query/src/data_source/stream/tskv/factory.rs b/query_server/query/src/data_source/stream/tskv/factory.rs index b7a1cb35d2..18a101cbc9 100644 --- a/query_server/query/src/data_source/stream/tskv/factory.rs +++ b/query_server/query/src/data_source/stream/tskv/factory.rs @@ -1,3 +1,4 @@ +use std::collections::HashSet; use std::sync::Arc; use coordinator::service::CoordinatorRef; @@ -63,9 +64,16 @@ impl SchemaChecker for TskvStreamProviderFactory { })?; // Make sure that the columns specified in [`StreamTable`] must be included in the target table + let mut duplicated_cols = HashSet::new(); let target_schema = target_table.to_arrow_schema(); for f in table.schema().fields() { target_schema.field_with_name(f.name())?; + // check same col name + if !duplicated_cols.insert(f.name()) { + return Err(QueryError::SameColumnName { + column: f.name().to_string(), + }); + } } Ok(()) diff --git a/query_server/sqllogicaltests/cases/stream/syntax.slt b/query_server/sqllogicaltests/cases/stream/syntax.slt index 1bb0bd8c70..d666a6006c 100644 --- a/query_server/sqllogicaltests/cases/stream/syntax.slt +++ b/query_server/sqllogicaltests/cases/stream/syntax.slt @@ -85,3 +85,17 @@ CREATE STREAM TABLE TskvTable ( table = 'readings_kv', event_time_column = 'time' ) engine = xxx; + +# same col name +statement error Arrow error: Io error: Status \{ code: Internal, message: "Execute logical plan: Semantic error: Field or Tag have the same name time", .* +CREATE STREAM TABLE TskvTable ( + time TIMESTAMP, + time TIMESTAMP, + name STRING, + driver STRING, + elevation DOUBLE +) WITH ( + db = 'public', + table = 'readings_kv', + event_time_column = 'time' +) engine = tskv;