数据匹配

Cov

函数简介

本函数用于计算两列数值型数据的总体协方差。

函数名: COV

输入序列: 仅支持两个输入序列,类型均为 INT32 / INT64 / FLOAT / DOUBLE。

输出序列: 输出单个序列,类型为 DOUBLE。序列仅包含一个时间戳为 0、值为总体协方差的数据点。

提示:

  • 如果某行数据中包含空值、缺失值或NaN,该行数据将会被忽略;
  • 如果数据中所有的行都被忽略,函数将会输出NaN

使用示例

输入序列:

  1. +-----------------------------+---------------+---------------+
  2. | Time|root.test.d2.s1|root.test.d2.s2|
  3. +-----------------------------+---------------+---------------+
  4. |2020-01-01T00:00:02.000+08:00| 100.0| 101.0|
  5. |2020-01-01T00:00:03.000+08:00| 101.0| null|
  6. |2020-01-01T00:00:04.000+08:00| 102.0| 101.0|
  7. |2020-01-01T00:00:06.000+08:00| 104.0| 102.0|
  8. |2020-01-01T00:00:08.000+08:00| 126.0| 102.0|
  9. |2020-01-01T00:00:10.000+08:00| 108.0| 103.0|
  10. |2020-01-01T00:00:12.000+08:00| null| 103.0|
  11. |2020-01-01T00:00:14.000+08:00| 112.0| 104.0|
  12. |2020-01-01T00:00:15.000+08:00| 113.0| null|
  13. |2020-01-01T00:00:16.000+08:00| 114.0| 104.0|
  14. |2020-01-01T00:00:18.000+08:00| 116.0| 105.0|
  15. |2020-01-01T00:00:20.000+08:00| 118.0| 105.0|
  16. |2020-01-01T00:00:22.000+08:00| 100.0| 106.0|
  17. |2020-01-01T00:00:26.000+08:00| 124.0| 108.0|
  18. |2020-01-01T00:00:28.000+08:00| 126.0| 108.0|
  19. |2020-01-01T00:00:30.000+08:00| NaN| 108.0|
  20. +-----------------------------+---------------+---------------+

用于查询的 SQL 语句:

  1. select cov(s1,s2) from root.test.d2

输出序列:

  1. +-----------------------------+-------------------------------------+
  2. | Time|cov(root.test.d2.s1, root.test.d2.s2)|
  3. +-----------------------------+-------------------------------------+
  4. |1970-01-01T08:00:00.000+08:00| 12.291666666666666|
  5. +-----------------------------+-------------------------------------+

Dtw

函数简介

本函数用于计算两列数值型数据的 DTW 距离。

函数名: DTW

输入序列: 仅支持两个输入序列,类型均为 INT32 / INT64 / FLOAT / DOUBLE。

输出序列: 输出单个序列,类型为 DOUBLE。序列仅包含一个时间戳为 0、值为两个时间序列的 DTW 距离值。

提示:

  • 如果某行数据中包含空值、缺失值或NaN,该行数据将会被忽略;
  • 如果数据中所有的行都被忽略,函数将会输出 0。

使用示例

输入序列:

  1. +-----------------------------+---------------+---------------+
  2. | Time|root.test.d2.s1|root.test.d2.s2|
  3. +-----------------------------+---------------+---------------+
  4. |1970-01-01T08:00:00.001+08:00| 1.0| 2.0|
  5. |1970-01-01T08:00:00.002+08:00| 1.0| 2.0|
  6. |1970-01-01T08:00:00.003+08:00| 1.0| 2.0|
  7. |1970-01-01T08:00:00.004+08:00| 1.0| 2.0|
  8. |1970-01-01T08:00:00.005+08:00| 1.0| 2.0|
  9. |1970-01-01T08:00:00.006+08:00| 1.0| 2.0|
  10. |1970-01-01T08:00:00.007+08:00| 1.0| 2.0|
  11. |1970-01-01T08:00:00.008+08:00| 1.0| 2.0|
  12. |1970-01-01T08:00:00.009+08:00| 1.0| 2.0|
  13. |1970-01-01T08:00:00.010+08:00| 1.0| 2.0|
  14. |1970-01-01T08:00:00.011+08:00| 1.0| 2.0|
  15. |1970-01-01T08:00:00.012+08:00| 1.0| 2.0|
  16. |1970-01-01T08:00:00.013+08:00| 1.0| 2.0|
  17. |1970-01-01T08:00:00.014+08:00| 1.0| 2.0|
  18. |1970-01-01T08:00:00.015+08:00| 1.0| 2.0|
  19. |1970-01-01T08:00:00.016+08:00| 1.0| 2.0|
  20. |1970-01-01T08:00:00.017+08:00| 1.0| 2.0|
  21. |1970-01-01T08:00:00.018+08:00| 1.0| 2.0|
  22. |1970-01-01T08:00:00.019+08:00| 1.0| 2.0|
  23. |1970-01-01T08:00:00.020+08:00| 1.0| 2.0|
  24. +-----------------------------+---------------+---------------+

用于查询的 SQL 语句:

  1. select dtw(s1,s2) from root.test.d2

输出序列:

  1. +-----------------------------+-------------------------------------+
  2. | Time|dtw(root.test.d2.s1, root.test.d2.s2)|
  3. +-----------------------------+-------------------------------------+
  4. |1970-01-01T08:00:00.000+08:00| 20.0|
  5. +-----------------------------+-------------------------------------+

Pearson

函数简介

本函数用于计算两列数值型数据的皮尔森相关系数。

函数名: PEARSON

输入序列: 仅支持两个输入序列,类型均为 INT32 / INT64 / FLOAT / DOUBLE。

输出序列: 输出单个序列,类型为 DOUBLE。序列仅包含一个时间戳为 0、值为皮尔森相关系数的数据点。

提示:

  • 如果某行数据中包含空值、缺失值或NaN,该行数据将会被忽略;
  • 如果数据中所有的行都被忽略,函数将会输出NaN

使用示例

输入序列:

  1. +-----------------------------+---------------+---------------+
  2. | Time|root.test.d2.s1|root.test.d2.s2|
  3. +-----------------------------+---------------+---------------+
  4. |2020-01-01T00:00:02.000+08:00| 100.0| 101.0|
  5. |2020-01-01T00:00:03.000+08:00| 101.0| null|
  6. |2020-01-01T00:00:04.000+08:00| 102.0| 101.0|
  7. |2020-01-01T00:00:06.000+08:00| 104.0| 102.0|
  8. |2020-01-01T00:00:08.000+08:00| 126.0| 102.0|
  9. |2020-01-01T00:00:10.000+08:00| 108.0| 103.0|
  10. |2020-01-01T00:00:12.000+08:00| null| 103.0|
  11. |2020-01-01T00:00:14.000+08:00| 112.0| 104.0|
  12. |2020-01-01T00:00:15.000+08:00| 113.0| null|
  13. |2020-01-01T00:00:16.000+08:00| 114.0| 104.0|
  14. |2020-01-01T00:00:18.000+08:00| 116.0| 105.0|
  15. |2020-01-01T00:00:20.000+08:00| 118.0| 105.0|
  16. |2020-01-01T00:00:22.000+08:00| 100.0| 106.0|
  17. |2020-01-01T00:00:26.000+08:00| 124.0| 108.0|
  18. |2020-01-01T00:00:28.000+08:00| 126.0| 108.0|
  19. |2020-01-01T00:00:30.000+08:00| NaN| 108.0|
  20. +-----------------------------+---------------+---------------+

用于查询的 SQL 语句:

  1. select pearson(s1,s2) from root.test.d2

输出序列:

  1. +-----------------------------+-----------------------------------------+
  2. | Time|pearson(root.test.d2.s1, root.test.d2.s2)|
  3. +-----------------------------+-----------------------------------------+
  4. |1970-01-01T08:00:00.000+08:00| 0.5630881927754872|
  5. +-----------------------------+-----------------------------------------+

PtnSym

函数简介

本函数用于寻找序列中所有对称度小于阈值的对称子序列。对称度通过 DTW 计算,值越小代表序列对称性越高。

函数名: PTNSYM

输入序列: 仅支持一个输入序列,类型为 INT32 / INT64 / FLOAT / DOUBLE。

参数:

  • window:对称子序列的长度,是一个正整数,默认值为 10。
  • threshold:对称度阈值,是一个非负数,只有对称度小于等于该值的对称子序列才会被输出。在缺省情况下,所有的子序列都会被输出。

输出序列: 输出单个序列,类型为 DOUBLE。序列中的每一个数据点对应于一个对称子序列,时间戳为子序列的起始时刻,值为对称度。

使用示例

输入序列:

  1. +-----------------------------+---------------+
  2. | Time|root.test.d1.s4|
  3. +-----------------------------+---------------+
  4. |2021-01-01T12:00:00.000+08:00| 1.0|
  5. |2021-01-01T12:00:01.000+08:00| 2.0|
  6. |2021-01-01T12:00:02.000+08:00| 3.0|
  7. |2021-01-01T12:00:03.000+08:00| 2.0|
  8. |2021-01-01T12:00:04.000+08:00| 1.0|
  9. |2021-01-01T12:00:05.000+08:00| 1.0|
  10. |2021-01-01T12:00:06.000+08:00| 1.0|
  11. |2021-01-01T12:00:07.000+08:00| 1.0|
  12. |2021-01-01T12:00:08.000+08:00| 2.0|
  13. |2021-01-01T12:00:09.000+08:00| 3.0|
  14. |2021-01-01T12:00:10.000+08:00| 2.0|
  15. |2021-01-01T12:00:11.000+08:00| 1.0|
  16. +-----------------------------+---------------+

用于查询的 SQL 语句:

  1. select ptnsym(s4, 'window'='5', 'threshold'='0') from root.test.d1

输出序列:

  1. +-----------------------------+------------------------------------------------------+
  2. | Time|ptnsym(root.test.d1.s4, "window"="5", "threshold"="0")|
  3. +-----------------------------+------------------------------------------------------+
  4. |2021-01-01T12:00:00.000+08:00| 0.0|
  5. |2021-01-01T12:00:07.000+08:00| 0.0|
  6. +-----------------------------+------------------------------------------------------+

XCorr

函数简介

本函数用于计算两条时间序列的互相关函数值, 对离散序列而言,互相关函数可以表示为

CR(n)\=1N∑m\=1NS1[m]S2[m+n] CR(n) = \frac{1}{N} \sum_{m=1}^N S_1[m]S_2[m+n] CR(n)\=N1​m\=1∑N​S1​[m]S2​[m+n]

常用于表征两条序列在不同对齐条件下的相似度。

函数名: XCORR

输入序列: 仅支持两个输入序列,类型均为 INT32 / INT64 / FLOAT / DOUBLE。

输出序列: 输出单个序列,类型为 DOUBLE。序列中共包含2N−12N-12N−1个数据点, 其中正中心的值为两条序列按照预先对齐的结果计算的互相关系数(即等于以上公式的CR(0)CR(0)CR(0)), 前半部分的值表示将后一条输入序列向前平移时计算的互相关系数, 直至两条序列没有重合的数据点(不包含完全分离时的结果CR(−N)\=0.0CR(-N)=0.0CR(−N)\=0.0), 后半部分类似。 用公式可表示为(所有序列的索引从1开始计数):

OS[i]\=CR(−N+i)\=1N∑m\=1iS1[m]S2[N−i+m], if i<\=N OS[i] = CR(-N+i) = \frac{1}{N} \sum_{m=1}^{i} S_1[m]S_2[N-i+m],\ if\ i <= N OS[i]\=CR(−N+i)\=N1​m\=1∑i​S1​[m]S2​[N−i+m], if i<=N

OS[i]\=CR(i−N)\=1N∑m\=12N−iS1[i−N+m]S2[m], if i>N OS[i] = CR(i-N) = \frac{1}{N} \sum_{m=1}^{2N-i} S_1[i-N+m]S_2[m],\ if\ i > N OS[i]\=CR(i−N)\=N1​m\=1∑2N−i​S1​[i−N+m]S2​[m], if i>N

提示:

  • 两条序列中的nullNaN 值会被忽略,在计算中表现为 0。

使用示例

输入序列:

  1. +-----------------------------+---------------+---------------+
  2. | Time|root.test.d1.s1|root.test.d1.s2|
  3. +-----------------------------+---------------+---------------+
  4. |2020-01-01T00:00:01.000+08:00| null| 6|
  5. |2020-01-01T00:00:02.000+08:00| 2| 7|
  6. |2020-01-01T00:00:03.000+08:00| 3| NaN|
  7. |2020-01-01T00:00:04.000+08:00| 4| 9|
  8. |2020-01-01T00:00:05.000+08:00| 5| 10|
  9. +-----------------------------+---------------+---------------+

用于查询的 SQL 语句:

  1. select xcorr(s1, s2) from root.test.d1 where time <= 2020-01-01 00:00:05

输出序列:

  1. +-----------------------------+---------------------------------------+
  2. | Time|xcorr(root.test.d1.s1, root.test.d1.s2)|
  3. +-----------------------------+---------------------------------------+
  4. |1970-01-01T08:00:00.001+08:00| 0.0|
  5. |1970-01-01T08:00:00.002+08:00| 4.0|
  6. |1970-01-01T08:00:00.003+08:00| 9.6|
  7. |1970-01-01T08:00:00.004+08:00| 13.4|
  8. |1970-01-01T08:00:00.005+08:00| 20.0|
  9. |1970-01-01T08:00:00.006+08:00| 15.6|
  10. |1970-01-01T08:00:00.007+08:00| 9.2|
  11. |1970-01-01T08:00:00.008+08:00| 11.8|
  12. |1970-01-01T08:00:00.009+08:00| 6.0|
  13. +-----------------------------+---------------------------------------+