跳到主要内容

删除历史数据

法规约束

数据删除是高敏感操作, 多数行业法规 (GMP / FDA / ISO) 要求"永不删除"或"删除必须留审计". 服务端实现可能加额外保护.

deleteHistoryRange

删除时间区间内全部数据点.

public Enums.StatusCode deleteHistoryRange(
String nodeId,
Instant start,
Instant end,
boolean deleteModifiedToo);
参数说明
nodeId目标 NodeId
start / end区间 (UTC Instant, 包含)
deleteModifiedTootrue = 同时删修改记录; false = 只删 raw, 保留修改记录

返回 Enums.StatusCode (Good = 删除成功).

import java.time.Instant;
import java.time.Duration;

Enums.StatusCode st = ua.deleteHistoryRange(
"ns=2;s=Temperature",
Instant.now().minus(Duration.ofDays(30)),
Instant.now().minus(Duration.ofDays(7)),
false);

if (st != Enums.StatusCode.Good) {
System.err.println("Delete failed: " + st);
}

删除单时间点 / 单事件 (走 updateHistory)

当前 Java SDK 把"按时间点删""按事件 ID 删"统一通过 updateHistory(..., HistoryUpdateType.REMOVE, ...) 表达, 不再单独提供 deleteAtTime / deleteEvents 方法. 详见 HistoryUpdate.


法规约束

  • 永不删除 (只允许标记 obsolete)
  • 删除必须留审计 (谁删的, 何时, 原因)

服务端实现可能加额外保护. 客户端可能拿到 BadUserAccessDenied.

性能

  • 大区间 Delete 服务端可能阻塞数秒到数分钟 (重建索引)
  • 长时间操作建议异步, 避免 UI 卡死
// 异步示例
import java.util.concurrent.CompletableFuture;

CompletableFuture<Enums.StatusCode> f = CompletableFuture.supplyAsync(() ->
ua.deleteHistoryRange("ns=2;s=Temperature",
Instant.now().minus(Duration.ofDays(30)),
Instant.now().minus(Duration.ofDays(7)),
false));

f.thenAccept(st -> System.out.println("Delete done: " + st));

下一步