|
|
@@ -125,7 +125,7 @@ public class TdEngineService {
|
|
125
|
125
|
if (name == null || name.isEmpty()) {
|
|
126
|
126
|
return "`unknown`";
|
|
127
|
127
|
}
|
|
128
|
|
- return "`" + name.replaceAll("`", "") + "`";
|
|
|
128
|
+ return "`" + name.replace("`", "") + "`";
|
|
129
|
129
|
}
|
|
130
|
130
|
|
|
131
|
131
|
private boolean isValidFieldName(String name) {
|
|
|
@@ -136,18 +136,6 @@ public class TdEngineService {
|
|
136
|
136
|
return name != null && name.matches(ALLOWED_TABLE_NAME);
|
|
137
|
137
|
}
|
|
138
|
138
|
|
|
139
|
|
- private boolean isNumeric(String str) {
|
|
140
|
|
- if (str == null || str.isEmpty()) {
|
|
141
|
|
- return false;
|
|
142
|
|
- }
|
|
143
|
|
- try {
|
|
144
|
|
- Double.parseDouble(str);
|
|
145
|
|
- return true;
|
|
146
|
|
- } catch (NumberFormatException e) {
|
|
147
|
|
- return false;
|
|
148
|
|
- }
|
|
149
|
|
- }
|
|
150
|
|
-
|
|
151
|
139
|
// === 缓存工具方法 ===
|
|
152
|
140
|
private String getStableKey(String dbName, String stableName) {
|
|
153
|
141
|
return dbName + "." + stableName;
|
|
|
@@ -217,6 +205,7 @@ public class TdEngineService {
|
|
217
|
205
|
* 从数据库加载列类型
|
|
218
|
206
|
*/
|
|
219
|
207
|
private Map<String, String> loadStableColumnTypesFromDB(String dbName, String stableName) {
|
|
|
208
|
+
|
|
220
|
209
|
Map<String, String> columnTypes = new HashMap<>();
|
|
221
|
210
|
String sql = String.format("DESCRIBE %s.%s", wrapName(dbName), wrapName(stableName));
|
|
222
|
211
|
try (Connection conn = getConnection();
|
|
|
@@ -286,8 +275,6 @@ public class TdEngineService {
|
|
286
|
275
|
return;
|
|
287
|
276
|
}
|
|
288
|
277
|
|
|
289
|
|
-// String superTableName = extractSuperTableName(table);
|
|
290
|
|
-
|
|
291
|
278
|
int batchSize = DEFAULT_BATCH_SIZE;
|
|
292
|
279
|
for (int i = 0; i < dataList.size(); i += batchSize) {
|
|
293
|
280
|
List<Map<String, Object>> batch = dataList.subList(i, Math.min(i + batchSize, dataList.size()));
|
|
|
@@ -297,15 +284,11 @@ public class TdEngineService {
|
|
297
|
284
|
log.info("批量写入成功: {} | 条数: {}", table, dataList.size());
|
|
298
|
285
|
}
|
|
299
|
286
|
|
|
300
|
|
- private String extractSuperTableName(String table) {
|
|
301
|
|
- int idx = table.lastIndexOf('_');
|
|
302
|
|
- return idx > 0 ? table.substring(0, idx) : table;
|
|
303
|
|
- }
|
|
304
|
|
-
|
|
305
|
287
|
/**
|
|
306
|
288
|
* 收集数据中所有动态列及其类型
|
|
307
|
289
|
*/
|
|
308
|
290
|
private Map<String, String> collectColumnTypes(List<Map<String, Object>> dataList) {
|
|
|
291
|
+
|
|
309
|
292
|
Map<String, String> columnTypes = new LinkedHashMap<>();
|
|
310
|
293
|
for (Map<String, Object> data : dataList) {
|
|
311
|
294
|
if (data == null) {
|
|
|
@@ -327,7 +310,8 @@ public class TdEngineService {
|
|
327
|
310
|
* 构建批量插入 SQL
|
|
328
|
311
|
*/
|
|
329
|
312
|
private String buildInsertSql(String dbName, String table, String superTableName,
|
|
330
|
|
- Map<String, String> columnTypes, List<Map<String, Object>> dataList) {
|
|
|
313
|
+ Map<String, String> columnTypes, List<Map<String, Object>> dataList) {
|
|
|
314
|
+
|
|
331
|
315
|
if (columnTypes.isEmpty()) {
|
|
332
|
316
|
return null;
|
|
333
|
317
|
}
|
|
|
@@ -365,7 +349,8 @@ public class TdEngineService {
|
|
365
|
349
|
if (!hasData) {
|
|
366
|
350
|
return null;
|
|
367
|
351
|
}
|
|
368
|
|
- log.info("生成的 INSERT SQL | 列类型: {} | SQL 前100字符: {}", columnTypes, sql.toString().substring(0, Math.min(100, sql.toString().length())));
|
|
|
352
|
+ log.info("生成的 INSERT SQL | 列类型: {} | SQL 前100字符: {}",
|
|
|
353
|
+ columnTypes, sql.substring(0, Math.min(100, sql.toString().length())));
|
|
369
|
354
|
sql.setLength(sql.length() - 1);
|
|
370
|
355
|
return sql.toString();
|
|
371
|
356
|
}
|
|
|
@@ -495,7 +480,7 @@ public class TdEngineService {
|
|
495
|
480
|
/**
|
|
496
|
481
|
* 根据 TdEngine 列类型获取创建列的 SQL 类型
|
|
497
|
482
|
*/
|
|
498
|
|
- private String getColumnTypeForDDL(String tdType, String columnName) {
|
|
|
483
|
+ private String getColumnTypeForDDL(String tdType) {
|
|
499
|
484
|
switch (tdType) {
|
|
500
|
485
|
case "BOOL":
|
|
501
|
486
|
case "BIGINT":
|
|
|
@@ -586,7 +571,7 @@ public class TdEngineService {
|
|
586
|
571
|
}
|
|
587
|
572
|
|
|
588
|
573
|
if (!existingColumns.contains(col)) {
|
|
589
|
|
- String ddlType = getColumnTypeForDDL(colType, col);
|
|
|
574
|
+ String ddlType = getColumnTypeForDDL(colType);
|
|
590
|
575
|
String alterSql = String.format(
|
|
591
|
576
|
"ALTER STABLE %s.%s ADD COLUMN %s %s",
|
|
592
|
577
|
wrapName(dbName),
|