趋势计算函数

目前 IoTDB 支持如下趋势计算函数:

函数名输入序列类型输出序列类型功能描述
TIME_DIFFERENCEINT32 / INT64 / FLOAT / DOUBLE / BOOLEAN / TEXTINT64统计序列中某数据点的时间戳与前一数据点时间戳的差。范围内第一个数据点没有对应的结果输出。
DIFFERENCEINT32 / INT64 / FLOAT / DOUBLE与输入序列的实际类型一致统计序列中某数据点的值与前一数据点的值的差。范围内第一个数据点没有对应的结果输出。
NON_NEGATIVE_DIFFERENCEINT32 / INT64 / FLOAT / DOUBLE与输入序列的实际类型一致统计序列中某数据点的值与前一数据点的值的差的绝对值。范围内第一个数据点没有对应的结果输出。
DERIVATIVEINT32 / INT64 / FLOAT / DOUBLEDOUBLE统计序列中某数据点相对于前一数据点的变化率,数量上等同于 DIFFERENCE / TIME_DIFFERENCE。范围内第一个数据点没有对应的结果输出。
NON_NEGATIVE_DERIVATIVEINT32 / INT64 / FLOAT / DOUBLEDOUBLE统计序列中某数据点相对于前一数据点的变化率的绝对值,数量上等同于 NON_NEGATIVE_DIFFERENCE / TIME_DIFFERENCE。范围内第一个数据点没有对应的结果输出。

例如:

  1. select s1, time_difference(s1), difference(s1), non_negative_difference(s1), derivative(s1), non_negative_derivative(s1) from root.sg1.d1 limit 5 offset 1000;

结果:

  1. +-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+
  2. | Time| root.sg1.d1.s1|time_difference(root.sg1.d1.s1)|difference(root.sg1.d1.s1)|non_negative_difference(root.sg1.d1.s1)|derivative(root.sg1.d1.s1)|non_negative_derivative(root.sg1.d1.s1)|
  3. +-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+
  4. |2020-12-10T17:11:49.037+08:00|7360723084922759782| 1| -8431715764844238876| 8431715764844238876| -8.4317157648442388E18| 8.4317157648442388E18|
  5. |2020-12-10T17:11:49.038+08:00|4377791063319964531| 1| -2982932021602795251| 2982932021602795251| -2.982932021602795E18| 2.982932021602795E18|
  6. |2020-12-10T17:11:49.039+08:00|7972485567734642915| 1| 3594694504414678384| 3594694504414678384| 3.5946945044146785E18| 3.5946945044146785E18|
  7. |2020-12-10T17:11:49.040+08:00|2508858212791964081| 1| -5463627354942678834| 5463627354942678834| -5.463627354942679E18| 5.463627354942679E18|
  8. |2020-12-10T17:11:49.041+08:00|2817297431185141819| 1| 308439218393177738| 308439218393177738| 3.0843921839317773E17| 3.0843921839317773E17|
  9. +-----------------------------+-------------------+-------------------------------+--------------------------+---------------------------------------+--------------------------+---------------------------------------+
  10. Total line number = 5
  11. It costs 0.014s
函数名输入序列类型参数输出序列类型功能描述
DIFFINT32 / INT64 / FLOAT / DOUBLEignoreNull:可选,默认为true;为true时,前一个数据点值为null时,忽略该数据点继续向前找到第一个出现的不为null的值;为false时,如果前一个数据点为null,则不忽略,使用null进行相减,结果也为nullDOUBLE统计序列中某数据点的值与前一数据点的值的差。第一个数据点没有对应的结果输出,输出值为null

使用示例

原始数据
  1. +-----------------------------+------------+------------+
  2. | Time|root.test.s1|root.test.s2|
  3. +-----------------------------+------------+------------+
  4. |1970-01-01T08:00:00.001+08:00| 1| 1.0|
  5. |1970-01-01T08:00:00.002+08:00| 2| null|
  6. |1970-01-01T08:00:00.003+08:00| null| 3.0|
  7. |1970-01-01T08:00:00.004+08:00| 4| null|
  8. |1970-01-01T08:00:00.005+08:00| 5| 5.0|
  9. |1970-01-01T08:00:00.006+08:00| null| 6.0|
  10. +-----------------------------+------------+------------+
不使用ignoreNull参数(忽略null)

SQL:

  1. SELECT DIFF(s1), DIFF(s2) from root.test;

输出:

  1. +-----------------------------+------------------+------------------+
  2. | Time|DIFF(root.test.s1)|DIFF(root.test.s2)|
  3. +-----------------------------+------------------+------------------+
  4. |1970-01-01T08:00:00.001+08:00| null| null|
  5. |1970-01-01T08:00:00.002+08:00| 1.0| null|
  6. |1970-01-01T08:00:00.003+08:00| null| 2.0|
  7. |1970-01-01T08:00:00.004+08:00| 2.0| null|
  8. |1970-01-01T08:00:00.005+08:00| 1.0| 2.0|
  9. |1970-01-01T08:00:00.006+08:00| null| 1.0|
  10. +-----------------------------+------------------+------------------+
使用ignoreNull参数

SQL:

  1. SELECT DIFF(s1, 'ignoreNull'='false'), DIFF(s2, 'ignoreNull'='false') from root.test;

输出:

  1. +-----------------------------+----------------------------------------+----------------------------------------+
  2. | Time|DIFF(root.test.s1, "ignoreNull"="false")|DIFF(root.test.s2, "ignoreNull"="false")|
  3. +-----------------------------+----------------------------------------+----------------------------------------+
  4. |1970-01-01T08:00:00.001+08:00| null| null|
  5. |1970-01-01T08:00:00.002+08:00| 1.0| null|
  6. |1970-01-01T08:00:00.003+08:00| null| null|
  7. |1970-01-01T08:00:00.004+08:00| null| null|
  8. |1970-01-01T08:00:00.005+08:00| 1.0| null|
  9. |1970-01-01T08:00:00.006+08:00| null| 1.0|
  10. +-----------------------------+----------------------------------------+----------------------------------------+