TIMESERIES 子句

空白填充和插值 (GFI) 计算,这是时序分析计算的一个重要组件。有关详细信息和示例,请参阅时序分析

语法

TIMESERIES slice‑time AS 'length‑and‑time‑unit‑expr' OVER (
  [ PARTITION BY (column‑expr[,...] ] ORDER BY time‑expr ) [ ORDER BY table‑column[,...] ]

参数

slice‑time
TIMESERIES 子句产生的时间列,用于存储空白填充生成的时间片开始时间。

注意:此参数为别名,因此,您可以使用任何名称作为别名。

length‑and‑time‑unit‑expr
INTERVAL DAY TO SECOND 字面量,用于指定时间片计算的时间单位长度。例如: TIMESERIES slice_time AS '3 seconds' ...
OVER()
指定功能分区和排序。 OVER() 还指定时序函数在查询结果集上的操作—换而言之,评估 FROMWHEREGROUP BYHAVING 子句之后返回的行。
PARTITION BY (column‑expr[,...] )
按指定的列表达式对数据进行分区。分别在每个分区上执行空白填充和插值
ORDER BY time‑expr
TIMESTAMP表达式 time-expr 对数据排序,以计算时序数据的时间信息。

注意

如果在 TIMESERIES OVER() 内没有为每个定义的时间片指定 window-partition-clause,则只产生一个输出记录;否则,则按每个时间片的每个分区产生一个输出记录。插值在该处计算。

如提供包含 TIMESERIES 子句的查询块,则以下是语义执行阶段(评估 FROM 和可选 WHERE 子句之后):

  1. 计算 time-expression。

  2. 根据 time‑exp 和 'length‑and‑time‑unit‑expr' 的结果在每个输入记录上执行与 TIME_SLICE() 函数一样的计算。

    1. 执行空白填充以生成输入记录中缺失的时间片。

    2. 将此计算结果命名为 slice_time,表示空白填充之后生成的“时序”列(别名)。

  3. expressionslice‑time 对数据分区。针对每个分区执行步骤 4。

  4. time‑expr 对数据排序。插值在此处计算。

TIMESERIES 子句和 TIME_SLICE 函数之间存在语义重叠,主要区别如下:

  • TIMESERIES 仅支持间隔限定符DAY TO SECOND;不允许 YEAR TO MONTH

  • TIME_SLICE 不同,length‑and‑time‑unit‑expr 中表示的时间片长度和时间单位必须为常量,以便很好地界定时间片间隙。

  • TIMESERIES 执行空白填充,而 TIME_SLICE 函数则不执行。

  • TIME_SLICE 可以根据其第四个输入参数 (start‑or‑end) 的值来返回时间片的开始和结束时间。TIMESERIES,另一方面,始终返回每个时间片的开始时间。要输出每个时间片的结束时间,请写入 SELECT 语句,如下所示:

    => SELECT slice_time + <slice_length>;
    

限制

  • 在 SQL 查询块中发生 TIMESERIES 子句时,仅以下子句可用于相同查询块中:

    • SELECT

    • FROM

    • WHERE

    • ORDER BY

    不允许使用“GROUP BY”和“HAVING”子句。如果在间隙填充和插值 (GFI) 之前或之后需要执行“GROUP BY”操作,请使用子查询,并且将“GROUP BY”放入外部查询。例如: => SELECT symbol, AVG(first_bid) as avg_bid FROM ( SELECT symbol, slice_time, TS_FIRST_VALUE(bid1) AS first_bid FROM Tickstore WHERE symbol IN ('MSFT', 'IBM') TIMESERIES slice_time AS '5 seconds' OVER (PARTITION BY symbol ORDER BY ts) ) AS resultOfGFI GROUP BY symbol;

  • TIMESERIES 子句出现在 SQL 查询块时,SELECT 列表仅可包含以下:

    例如,以下两个查询返回语法错误,因为 bid1 不是 PARTITION BYGROUP BY 列:

    => SELECT bid, symbol, TS_FIRST_VALUE(bid) FROM Tickstore
       TIMESERIES slice_time AS '5 seconds' OVER (PARTITION BY symbol ORDER BY ts);
       ERROR:  column "Tickstore.bid" must appear in the PARTITION BY list of Timeseries clause or be used in a Timeseries Output function
    => SELECT bid, symbol, AVG(bid) FROM Tickstore
       GROUP BY symbol;
       ERROR:  column "Tickstore.bid" must appear in the GROUP BY clause or be used in an aggregate function
    

示例

例如,请参阅空白填充和插值 (GFI)

另请参阅