- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我大约一个月前开始使用 Node-RED 从我的智能电表记录数据,它看起来像这个 json 数据(有效负载是重要的一点):
{
"topic":"stat/smartmeter/all",
"payload":"{
\"kwh_low_tarrif\":866.696,
\"kwh_high_tarrif\":902.156,
\"current_tarrif\":1,
\"current_watt_draw\":485,
\"gas_timestamp\":1554675307000,
\"gas_total\":326.509,
\"kwh_combined\":1768.852
}",
"qos":0,
"retain":false,
"_topic":"stat/smartmeter/all",
"_msgid":"db4ebc0.72b9a48"
}
此数据的问题在于我在 Grafana 仪表板中计算了电费和燃气费:
我在 InfluxDB 数据选择中使用数学函数将成本硬编码到仪表板中:
您可以看到我使用了每千瓦时用电量 0.230662 欧元的值(value)(或价格)。现在愚蠢的我从来没有想过想要能够在这个价格会波动的多年内运行计算,所以一旦我发现了我的电力供应商的公共(public) API 端点,我可以在其中读取我的特定计划的价格,我将它添加到测量中,所以现在 json 数据如下所示:
{
"topic":"stat/smartmeter/all",
"payload":"{
\"kwh_low_tarrif\":866.696,
\"kwh_high_tarrif\":902.156,
\"kwh_low_price\":0.230662,
\"kwh_high_price\":0.230662,
\"current_tarrif\":1,
\"current_watt_draw\":485,
\"current_kwh_price\":0.230662,
\"gas_timestamp\":1554675307000,
\"gas_total\":326.509,
\"gas_price\":0.804565,
\"kwh_combined\":1768.852
}",
"qos":0,
"retain":false,
"_topic":"stat/smartmeter/all",
"_msgid":"db4ebc0.72b9a48"
}
现在唯一的问题(也是我的主要问题)是:
1) 如何编写在价格计算中使用此值的查询?我现在使用的查询(来自上面的屏幕截图)是:
SELECT distinct("kwh_combined") * 0.230662 FROM "smartmeter" WHERE $timeFilter GROUP BY time($__interval) fill(linear)
2) 如何回填数据?(从我开始记录时将这些电力和天然气价格写入数据库,并将其添加到我当时进行的测量中)
我宁愿将我之前在面板中硬编码的值设置为我已经进行的测量,而不是在测量不存在或“空”时编写异常。我的意思是,数据本身是静态的,因为价格没有变化,所以它不会那么难,不是吗?即使它需要重建数据,我是否可以将它重新插入到一个新的数据集合中并自己添加字段?
请告诉我这对于 InfluxDB 是可行的...
我的意思是,在 MySQL 中,它会是一个简单的 ALTER TABLE 语句,可能对具有空值的记录进行简单的插入。
.. 还是我要求时间序列日志系统能够更改其已记录数据的数据结构是不合理的,我是否对 InfluxDB 要求太多?
最佳答案
您可以向现有测量添加额外字段(price_1、price_2、...)。使用完全相同的时间戳和标签值插入它们,以使用这些新的价格列扩展现有数据记录,以备在 grafana 中使用:
INSERT smartmeter,tagA=tagAvalue,tagB=tagBvalue,... price1=1234,price2=4321 1549983966469023105
...
另一种方法是导出现有数据,添加额外的价格列,然后再导入回来。
这两种方式看起来都不简单。使用 select ... into
语法似乎更容易运行(没有这个丑陋的 0*last() + ...
hack 对我不起作用):
SELECT
last(kwh_combined) as kwh_combined,
last(other_field) as other_field,
...add other fields here...
0 * last(kwh_combined) + 1234 as price1,
0 * last(kwh_combined) + 4321 as price2
INTO new_smartmeter
FROM smartmeter GROUP BY *
关于database - InfluxDB:如何回填以前未测量的测量标签(如果可能的话)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55563915/
我是 firebase 的新手,我正在尝试分页查询。我喜欢有一个“下一个”和“上一个”按钮。我的下一个按钮工作正常,我的问题是单击上一个 引用:https://firebase.google.com/
抱歉,标题这么蹩脚,但我只是不知道该放什么,希望你能理解。另外,我不知道以前是否有人问过类似的问题,因为我不知道合适的关键字 - 因此也无法用谷歌搜索。 基本上...在查看preg_match_all
我想在 TFS 中 check out 一个检入文件的先前版本。我可以轻松获得特定文件的变更集 ID 列表,但无法弄清楚如何 checkout 以前的版本。 我目前的代码: var workspace
我想使用 @FunctionalInterface来 self 代码中的 Java 8,但我希望能够将生成的类文件与 Java 6 一起使用。我认为我应该将源版本设为 1.8 , 目标版本为 1.6
自从 versions 被删除以来,我一直无法找到安装以前版本软件的方法。命令并点击 Homebrew。我在 2008 Mac Pro (3,1) 上运行 macOS 10.14.3 (Mojave)
当我开始当前的项目时,App Store 中已经有一个应用程序。此应用程序仅适用于 iPhone。 我的第一个任务是测试和构建一个也可以在 iPod Touch 上运行的版本。 大约 3 周前,App
我在 GitHub 上有一个曾经是 fork 的 repo,但现在不是了,因为我已经删除了原始项目的任何痕迹并开始了一个同名的新项目。 但是,GitHub 仍然表示该项目是 fork 的。有什么方法可
我是一名优秀的程序员,十分优秀!