如何从Thingsboard删除旧事件?

时间:2019-02-12 05:33:24

标签: thingsboard

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

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

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

2 个答案:

答案 0 :(得分:1)

在研究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;

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

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

答案 1 :(得分:0)

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