时间系列数据的虚拟表

虚拟表提供时间系列数据的关系视图。

虚拟表对于查看简单格式的时间系列数据非常有用。对虚拟表执行 SQL SELECT 语句将以普通数据类型格式而不是 TimeSeries 数据类型格式返回数据。TimeSeries SQL 函数和 API 例程执行的许多操作都可以通过对虚拟表执行 SQL 语句来完成。对虚拟表编写一些 SQL 查询要比对底层时间系列表编写容易,特别是对 TimeSeries 列执行的带限定的 SQL 查询。

虚拟表不是存储在数据库中的实际表。其中的数据是不重复的。在任何给定的时刻,虚拟表中可见的数据与基本表中的内容都是相同的。不能对时间系列虚拟表创建索引。

大多数情况下,在虚拟表上执行查询的性能与使用 TimeSeries 函数的性能相似。例如,Clip 函数通过虚拟表应用比直接在时间系列上执行要快。但在时间系列上运行 ApplyTranspose 例程比通过虚拟表使用 TSCreateExpressionVirtualTab 过程运行这些例程要快。

一些操作在一个界面中很难或不可能完成,但在其他界面中可以轻松完成。例如,要查找一段时间内时间系列中某个字段的平均值,通过对虚拟表执行查询比使用 TimeSeries 函数要快。对虚拟表执行以下查询将查找一年内的平均股票价格:
select avg(vol) from daily_stocks_no_ts 
where stock_name = 'GBase' 
and timestamp between datetime(2010-1-1) year to day 
and datetime(2010-12-31) year to day;

但是,使用 AggregateBy 例程从一个日历聚集到另一个日历更为容易。

要在规则的时间系列中选择第 n 个元素,使用 GetNthElem 例程很容易,但使用虚拟表则相当困难。

可以将数据插入基于时间系列表的虚拟表,这将自动更新底层基本表。可以将 SELECT 和 INSERT 语句用于时间系列虚拟表。不能使用 UPDATE 或 DELETE 语句,但可以通过将相同时间点的新元素插入虚拟表来更新基本表中的时间系列元素。

可以基于在时间系列表上执行的表达式创建虚拟表。

可以每次仅基于一个 TimeSeries 列创建虚拟表。如果基本表包含多个 TimeSeries 列,可以为每个列创建虚拟表。