This is an automated email from the ASF dual-hosted git repository.

duansg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/master by this push:
     new dc96f1766b [Fix]: fix TAG type mismatch by introducing schema version 
for TDengine (#3963)
dc96f1766b is described below

commit dc96f1766b0a919132af333d10bbf430954faf03
Author: LunaRain_079 <[email protected]>
AuthorDate: Tue Jan 13 21:29:27 2026 +0800

    [Fix]: fix TAG type mismatch by introducing schema version for TDengine 
(#3963)
---
 .../history/tsdb/tdengine/TdEngineDataStorage.java    | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git 
a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tsdb/tdengine/TdEngineDataStorage.java
 
b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tsdb/tdengine/TdEngineDataStorage.java
index b81bc5b401..85e905f31d 100644
--- 
a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tsdb/tdengine/TdEngineDataStorage.java
+++ 
b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tsdb/tdengine/TdEngineDataStorage.java
@@ -68,8 +68,14 @@ public class TdEngineDataStorage extends 
AbstractHistoryDataStorage {
     private static final String INSTANCE_NULL = "''";
     private static final String CONSTANTS_CREATE_DATABASE = "CREATE DATABASE 
IF NOT EXISTS %s";
     private static final String INSERT_TABLE_DATA_SQL = "INSERT INTO `%s` 
USING `%s` TAGS (%s) VALUES %s";
-    private static final String CREATE_SUPER_TABLE_SQL = "CREATE STABLE IF NOT 
EXISTS `%s` %s TAGS (monitor BIGINT)";
+    private static final String CREATE_SUPER_TABLE_SQL = "CREATE STABLE IF NOT 
EXISTS `%s` %s TAGS (instance NCHAR(128))";
     private static final String NO_SUPER_TABLE_ERROR = "Table does not exist";
+    /**
+     * schema version suffix - increment when TAG definition changes.
+     * v1: instance BIGINT (original monitorId like 123456789)
+     * v2: instance NCHAR(128) (supports string instance values like 
127.0.0.1:8080)
+     */
+    private static final String SUPER_TABLE_VERSION = "_v2";
 
     private static final String QUERY_HISTORY_WITH_INSTANCE_SQL =
             "SELECT ts, metric_labels, `%s` FROM `%s` WHERE metric_labels = 
'%s' AND ts >= now - %s order by ts desc";
@@ -185,7 +191,7 @@ public class TdEngineDataStorage extends 
AbstractHistoryDataStorage {
         String instance = metricsData.getInstance();
         String app = metricsData.getApp();
         String metrics = metricsData.getMetrics();
-        String superTable = getTable(app, metrics, "_super");
+        String superTable = getSuperTable(app, metrics);
         String table = getTable(app, metrics, instance);
         StringBuilder sqlBuffer = new StringBuilder();
         int i = 0;
@@ -246,7 +252,7 @@ public class TdEngineDataStorage extends 
AbstractHistoryDataStorage {
                 sqlBuffer.append(" 
").append(String.format(sqlRowBuffer.toString(), 
formatStringValue(JsonUtil.toJson(labels))));
             }
 
-            String insertDataSql = String.format(INSERT_TABLE_DATA_SQL, table, 
superTable, instance, sqlBuffer);
+            String insertDataSql = String.format(INSERT_TABLE_DATA_SQL, table, 
superTable, "'" + formatStringValue(instance) + "'", sqlBuffer);
 
             if (log.isDebugEnabled()) {
                 log.debug(insertDataSql);
@@ -325,7 +331,12 @@ public class TdEngineDataStorage extends 
AbstractHistoryDataStorage {
                     .replace("[", "_")
                     .replace("]", "_");
         }
-        return app + "_" + metrics + "_" + instance;
+        return app + "_" + metrics + "_" + instance + SUPER_TABLE_VERSION;
+    }
+
+    @NotNull
+    private static String getSuperTable(String app, String metrics) {
+        return app + "_" + metrics + "_super" + SUPER_TABLE_VERSION;
     }
 
     private String formatStringValue(String value) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to