我在石墨中持有大量的时间序列度量数据。假设我有2个不同的指标 X 和 Y ,它们代表两种不同产品的价格。
我现在想查询应用程序中的数据并执行类似的操作(当然,这是伪sql):
Select all points of metric X where value is smaller than value of metric Y during a time frame
我没有找到任何合理的方法,没有编写我自己的脚本或一些map-reduce工作,就可以做到。
例如,我可以绘制图形并尝试在视觉上很容易理解它。但它不适用于应用程序。我还想过使用像currentBelow
和currentAbove
这样的函数,但看起来我不能提供两个不同的系列来比较,但在整个时间段内只能提供一个特定的整数。 / p>
答案 0 :(得分:2)
免责声明:我希望有更好的解决方案;)。
解决方案是:
度量:
product.X.price
product.Y.price
创建过滤器掩码 - 值0不大,1大于
diffSeries - 设置0 - 我们想要包含的上述点,下面要排除。
diffSeries(product.X.price, product.Y.price)
removeBelowValue - 删除所有排除 - 低于0,
removeBelowValue(diffSeries(product.X.price, product.Y.price), 0)
divideSeries - 将上面的系列划分为0和1的掩码 - 幸运的是,在石墨的函数中0/0 = 0(sic!),
divideSeries(removeBelowValue(diffSeries(product.X.price, product.Y.price), 0), removeBelowValue(diffSeries(product.X.price, product.Y.price), 0))
使用准备好的掩码过滤掉multiplySeries,因为
0 * datapoint = 0
1 * datapoint = datapoint
multiplySeries(product.X.price, divideSeries(removeBelowValue(diffSeries(product.X.price, product.Y.price), 0), removeBelowValue(diffSeries(product.X.price, product.Y.price), 0)))