如何在InfluxDB中删除一个点

时间:2018-11-02 08:39:38

标签: python influxdb

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

如何从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的回答之后,我得到了更多结果。以下查询(我有一个变量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')给出“找不到数据库:”,这很有意义,但我不知道如何解决。

4 个答案:

答案 0 :(得分:1)

首先,根据DELETE规范,您实际上无法删除单个点-删除系列中的所有点。

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

标签是DELETE用来定义要受影响的序列的方法-永远不要值!

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

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

这就是为什么它不起作用的原因:您应该将path(很可能也是table,也要在这里考虑基数)放入标记(调用中的单独参数),不是值。

然后它将起作用,但问题是-为什么您 根本要删除这些点? 你能回答这个问题吗?

-)这件事真是令人作呕,我必须承认,不知道你们是如何设法站得住脚的,也不是立即逃避到一些更人性化和文档化的库和语言

答案 1 :(得分:0)

尝试查询:

DELETE FROM "__SRC__" WHERE path='A'

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

答案 2 :(得分:0)

您可以指定具有不同近距离范围的时间范围。例如1微秒

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

答案 3 :(得分:0)

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

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

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