【问题标题】:How to delete a point in influxDB如何删除influxDB中的一个点
【发布时间】:2019-04-06 11:55:34
【问题描述】:

抱歉,这几乎可以肯定是重复的,但我无法将这些信息放在一起。

如何从 influxDB 中删除一个点? 首先我使用 Python 和 DataFrameClient:

client = DataFrameClient('localhost', '8086', 'root', 'root', 'meteo')

然后我写了多个点,例如:

meta = pd.DataFrame({'path': ['A'],
                     'table': ['B'],
                     'md5': ['C']},
                     index=[pd.datetime.now()])
client.write_points(dataframe=meta,
                    measurement='__SRC__',
                    protocol='line',
                    database='meteo')

现在我想删除所有点,其中path'A'。我尝试使用client.query:

DELETE FROM "meteo"."autogen"."__SRC__" WHERE path='A'

> received status code 400 from server: err: error parsing query:
>     retention policy not supported at line 1, char 1

现在这条消息可能是有意义的,但你能帮助我了解我做错了什么以及在哪里阅读它吗?非常感谢!

更新

按照@JanGaraj 的回答,我得到了更多结果。以下查询(我有一个 var.table 而不是 path,但看不出这有什么不同。)

client = influxdb.DataFrameClient('localhost', '8086', 'root', 'root', 'meteo')
client.query('DELETE  FROM "__SRC__" WHERE table=\'A\'')

返回

ResultSet({})

但不删除任何内容(SELECT * FROM "__SRC__" WHERE table=\'A\' 我得到 4 个数据点)。

输入 Chronograf 的相同查询 (DELETE FROM "__SRC__" WHERE table='A') 给出“找不到数据库:”,这是有道理的,但我不知道如何解决。

【问题讨论】:

    标签: python influxdb


    【解决方案1】:

    尝试查询:

    DELETE FROM "__SRC__" WHERE path='A'
    

    在这种情况下,FROM 部分不支持数据库和保留策略 - 请参阅 InfluxDB DELETE doc

    【讨论】:

    • 那么这是否意味着我不能直接从 Python 使用相同的查询,比如在 Chronograf 中?
    • 为什么不能使用?使用正确的语法,你可以在任何地方使用。
    • 那里我得到“找不到数据库”。有道理,因为我从未在任何地方指定它,但显然不允许在命令中指定它?
    【解决方案2】:

    首先,根据DELETE 规范,您实际上不能删除单个点 - 您可以删除一系列中的所有点。

    在实践中,在这种情况下,您可以考虑将标签组成一个系列(过于简单,但在这里可行)。

    而标签是DELETE 用来定义要受影响的系列的东西 - 从不值!

    换句话说,您可以在WHERE 中指定ONLY 标签。

    现在,我从这个 Py 库 doc(-) 中得到的,DataFrame 被认为是一组值,NOT 标签。

    这正是它不起作用的原因:您应该将path(很可能也是table,考虑这里的基数)放入标签(调用中的单独参数)中,而不是值。

    那么它会起作用,但问题是 - 为什么你会需要删除这些点? 你能回答这个问题吗?

    -) 这件事真的很恶心,我必须承认,不知道你们是如何忍受的,而不是立即逃到一些更人性化设计和记录的库和语言中 p>

    【讨论】:

    • 非常感谢您的解释!一旦我了解了涌入的工作原理,我可能不想删除积分。所以我读了几个文件并将值存储在数据库中(作为时间序列)。除此之外,我还必须存储和更新文件的元数据,例如 md5 校验和,以便在下次运行时跳过未更改的文件。我应该如何保存这个元数据?我的意思是它不是真正的时间序列数据......基本上我只需要查找“文件路径--> md5-sum”,但我认为如果我尝试将所有数据保存到 sam DB 中可能会很方便。感谢您的帮助!
    【解决方案3】:

    您可以指定时间范围与变化的近距离范围。例如 1 微秒

    delete from "rs_5f5b34f89aded07f6dba81e0" where time >=1599858000000000000 and time < 1599858000000000001
    

    【讨论】:

    • 我认为这个答案与问题无关......
    【解决方案4】:

    不管实际的查询字符串是什么,你在这里缺少一个重要的组件——当使用 InfluxDB 客户端时,你需要指定方法为 POST,因为它默认为 GET 用于查询数据库并取回点——这就是您的查询返回 ResultSet 并且不删除这些点的原因。所以,你需要使用:

    client.query(query_str, method="POST")
    

    您可以查看InfluxDB client implementation 中的一些示例。

    【讨论】:

      猜你喜欢
      • 2022-11-05
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2013-03-11
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      相关资源
      最近更新 更多