代码之家  ›  专栏  ›  技术社区  ›  Avi Rob Spoor

带石墨查询的“Where”子句

  •  0
  • Avi Rob Spoor  · 技术社区  · 9 年前

    我用石墨保存了很多时间序列度量数据。假设我有两个不同的指标 十、 Y 代表两种不同产品的价格。

    我现在想从一个应用程序中查询数据,并执行如下操作(当然,这是一个伪sql):

    Select all points of metric X where value is smaller than value of metric Y during a time frame
    

    我找不到任何合理的方法,不写我自己的脚本或做一些地图缩减工作。

    例如,我可以绘制图表,并尝试很容易地从视觉上理解它。但它不能供应用程序使用。

    我还考虑使用一些功能,如 currentBelow currentAbove 但看起来我不能提供两个不同的序列进行比较,但在整个时间段内只能提供一个特定的整数。

    1 回复  |  直到 8 年前
        1
  •  2
  •   kwarunek    9 年前

    免责声明:我希望有更好的解决方案;)。

    解决方案是:

    韵律学:

    product.X.price
    product.Y.price
    
    1. 创建筛选器掩码-值0不大于1

      1. diffSeries -要设置边界0,请在要包含的点上方,在要排除的点下方。

        diffSeries(product.X.price, product.Y.price)
        
      2. removeBelowValue -要删除所有排除的-低于0,

        removeBelowValue(diffSeries(product.X.price, product.Y.price), 0)
        
      3. 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))
        
    2. 用准备好的面膜过滤掉 multiplySeries 自从

      0*数据点=0

      1*数据点=数据点

      multiplySeries(product.X.price, divideSeries(removeBelowValue(diffSeries(product.X.price, product.Y.price), 0), removeBelowValue(diffSeries(product.X.price, product.Y.price), 0)))