抱歉,这几乎肯定是重复的,但我无法将这些信息放在一起。
如何从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'
)给出“找不到数据库:”,这很有意义,但我不知道如何解决。
答案 0 :(得分:1)
首先,根据DELETE
规范,您实际上无法删除单个点-删除系列中的所有点。
在实践中,在这种情况下,您可以考虑将标签做成一个系列(过分简化,但在这里可行)。
标签是DELETE
用来定义要受影响的序列的方法-永远不要值!
换句话说,您可以在WHERE
中指定仅标签。
现在,我从这个Py库doc(-)中得到的是,DataFrame
被视为一组值,不标签。
这就是为什么它不起作用的原因:您应该将path
(很可能也是table
,也要在这里考虑基数)放入标记(调用中的单独参数),不是值。
然后它将起作用,但问题是-为什么您 根本要删除这些点? 你能回答这个问题吗?
-)这件事真是令人作呕,我必须承认,不知道你们是如何设法站得住脚的,也不是立即逃避到一些更人性化和文档化的库和语言 >
答案 1 :(得分:0)
答案 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 中的一些示例。