【问题标题】:How can I delete measurements within a time range for a given RP?如何删除给定 RP 在时间范围内的测量?
【发布时间】:2018-08-07 21:51:24
【问题描述】:

问题

对于特定的保留策略,是否可以使用时间范围删除测量数据?

DELETE FROM "SensorData"."Quarantine"./.*/ WHERE "time" >= '2018-02-28T02:26:08.0000000Z' AND "time" <= '2018-02-28T02:27:08.0000000Z'

我们当前的查询尝试是删除某个时间段之间的所有数据,但是 Delete 似乎并不乐意列出数据库或保留策略。


可能的 XY 问题

原因(我怀疑这是一个未解决的 XY 问题)(请参阅github://influxdata/influxdb#8088)(这是下面的第 3 步)

我们有一个名为 SensorData 的数据库,它的主缓冲区默认保留策略为 30 天,因此我们不会用完磁盘空间。

但是,如果传感器记录了“超出”,我们有一个要求,要求我们保留该数据,每边 + 一个小时,以作为证据。我们称之为隔离区。

到目前为止,我们已将此作为保留政策实施,称为隔离。

所以我们有 Primary 和 Quarantine,并且可能在未来,某种高频保留策略可能会被下采样到 Primary。

XY 问题是,“您如何在 Influx 中以事务方式复制/移动/更改某些记录数据的保留策略?”

我们的解决方案(在找不到之后)

曾经,

例如

  1. 创建一个临时数据库,命名为唯一标识正在进行的隔离操作。

    create "TempDB"+"_Quarantine_"+startUnixTime+"_"+"endUnixTime"

  2. 将数据从 Primary 复制到 tempdb

    Copy Primary -&gt; TempDB

3.删除主要数据

   `Delete Primary`
  1. 将数据复制到隔离区

    Copy TempDB -&gt; Quarantine

  2. 删除临时数据库

    Drop TempDB

这将允许对失败的操作进行回滚,或在崩溃的情况下回滚/恢复。

【问题讨论】:

  • 如果我误解了您的问题,请原谅我,但是您为什么要尝试删除保留策略的数据,如果它会在指定的持续时间持续后删除它呢?您的“主要”RP 将在 30 天内删除所有数据,如果您需要保留一些数据,您只需将其复制到“隔离区”即可。
  • 我们需要能够随意更改给定数据范围的保留策略。另一位开发人员的一些初步调查是在重新插入之前先删除数据,但复制或覆盖可能会更好。我认为这可能与希望操作具有事务性有关。

标签: influxdb


【解决方案1】:

如果您只是想更改某些数据范围的保留策略,我建议将此类数据范围复制到另一个保留策略中:

USE "SensorData"

SELECT *
INTO "Quarantine"."MeasurementName" 
FROM "Primary"."MeasurementName" 
WHERE "time" >= '2018-02-28T02:26:08.0000000Z' 
    AND "time" <= '2018-02-28T02:27:08.0000000Z'

在为"Primary" RP 指定的持续时间结束(30 天)后,数据将照常从"Primary"."MeasurementName" 中删除,而复制的范围将保留在"Quarantine" RP 中。

如果你想立即从主数据库中删除数据,接下来可以尝试做的是:

USE "SensorData"."Primary"

DELETE 
FROM "MeasurementName"
WHERE "time" >= '2018-02-28T02:26:08.0000000Z' 
    AND "time" <= '2018-02-28T02:27:08.0000000Z'

【讨论】:

    【解决方案2】:

    不支持通过 InfluxQL 指定数据库和保留策略。我希望它会在未来或在 IFQL 中。

    目前,我建议对聚合数据使用不同的测量方法。

    【讨论】:

    • 这是一个很好的建议:聚合数据,从长远来看,明确知道您正在查看的数据可能会更好。
    【解决方案3】:

    Chronograf 在解析查询时非常时髦,造成了很多混乱。

    Influx(从 1.4 开始)无法删除特定保留策略的数据,Chronograf 无法在未指定数据库的情况下解析删除命令。

    最终起作用的是(通过 API)调用

    DELETE FROM /.*/ WHERE "time" &gt;= '2018-02-28T02:26:08.0000000Z' AND "time" &lt;= '2018-02-28T02:27:08.0000000Z'

    未指定数据库,因为它已在 API 的其他地方指定。

    预计相当于在 CLI 前行或 CLI 中调用use SensorData

    因此,目前的解决方法是删除所有 RP 的数据,并希望您将来不需要高频数据保留策略。

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 2017-01-19
      • 2022-12-22
      • 2022-10-14
      • 2021-05-16
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多