【问题标题】:Delete record by time in InfluxDB-CXXInfluxDB-CXX按时间删除记录
【发布时间】:2022-11-22 05:28:39
【问题描述】:

参考:https://github.com/offa/influxdb-cxx

使用 CLI 界面很容易按时间删除记录,

delete from imagetable where time='2022-11-16T19:42:41.945508272Z'

但我不知道如何用 influxdb-cxx 做同样的事情。即无法通过 C++ 接口访问时间。

例如可以使用函数points[0].getTags()访问标签,但如何访问时间?

已经尝试使用 points[0].getTimestamp() 访问它,但无法在 C++ 2022-11-17T03:37:25.934547412Z 中以这种格式打印它

任何人都可以帮忙吗?提前致谢。

【问题讨论】:

标签: c++ influxdb


【解决方案1】:

在 influxdb-cxx 中,您可以使用 InfluxDB::execute method 来执行 InfluxQL 语句,就像您的 CLI 界面示例中那样。关于时间戳,它们在库的 Point 类中保存为 std::chrono::time_point<std::chrono::system_clock> (source),表示不包括闰秒的 Unix(纪元)时间(这是 InfluxDB 中的时间戳所代表的)。您的示例使用 RFC3339 表示法来提供时间戳,但 InfluxQL 也直接理解它的“自纪元以来的纳秒数”表示法 (example)。因此,没有必要在 RFC3339 符号中表示 Point 的时间点以在 execute 命令中使用它(这是可能的,但更难和冗余),您可以只使用标准 C++ chrono 库函数来获取纳秒,因为给定时间点的纪元。例子:

using namespace std::chrono;
auto nsEpoch = duration_cast<nanoseconds>(points[0].getTimestamp().time_since_epoch()).count();
idb->execute("delete from imagetable where time=" + std::to_string(nsEpoch));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 2016-10-24
    • 2021-05-23
    • 1970-01-01
    相关资源
    最近更新 更多