如何从 Thingsboard 中删除旧事件?

ska*_*gmy 5 thingsboard

我应该怎么做才能从 Thingsboard 中正确删除“事件”条目?

据我所知,当前的 API 没有提供删除事件的方法。似乎唯一的方法是直接删除数据库中的记录。

顺便说一下,我使用 PostgreSQL 作为数据库。

Dav*_*ies 5

在 Thingsboard 源代码中研究了两个小时后,我找到了解决方案。

日期包含在 V1 UUID 格式的 uid_event 字段中。

所以首先,您需要编写一个函数uuid_timestamp来将 UUID 转换为时间戳。我在这里找到了解决方案:https : //stackoverflow.com/a/24191574/5300212

CREATE FUNCTION uuid_timestamp(id uuid) RETURNS timestamptz AS $$
  select TIMESTAMP WITH TIME ZONE 'epoch' +
      (((('x' || lpad(split_part(id::text, '-', 1), 16, '0'))::bit(64)::bigint) +
      (('x' || lpad(split_part(id::text, '-', 2), 16, '0'))::bit(64)::bigint << 32) +
      ((('x' || lpad(split_part(id::text, '-', 3), 16, '0'))::bit(64)::bigint&4095) << 48) - 122192928000000000) / 10000000 ) * INTERVAL '1 second';    
$$ LANGUAGE SQL
  IMMUTABLE
  RETURNS NULL ON NULL INPUT;
Run Code Online (Sandbox Code Playgroud)

之后,要删除 30 天前的所有事件,您可以运行如下查询:

DELETE FROM public.event WHERE uuid_timestamp(event_uid::uuid) < now() - '30 days'::interval;
Run Code Online (Sandbox Code Playgroud)


And*_*rew 0

你的假设是正确的。您将需要执行 SQL 脚本来清理“事件”表。我必须注意,对于 Cassandra DB,我们已经有了“cassandra.query.ts_key_value_ttl”和“cassandra.query.events_ttl”配置参数来自动执行此过程。