示例:创建和装入时间系列

本示例显示如何创建 TimeSeries 数据类型、创建时间系列表和使用 TSCreate 过程创建时间系列,以及如何使用 Data Studio 的 GBase 8s TimeSeries 插件将数据装入时间系列。

先决条件:
在本示例中,创建包含电表读数的时间系列。每 15 分钟读取表数。创建的表和 TimeSeries 数据类型与 stores_demo 数据库中 ts_data 表中的示例类似。下表列出本示例中使用的时间系列属性。
表 1. 本示例中使用的时间系列属性
时间系列属性 定义
时间点大小 15 分钟
时间点何时有效 每 15 分钟(没有无效时间)
时间系列中的数据 包含以下数据:
  • 时间戳记
  • 表示用电量的小数值
时间系列表 包含以下列:
  • BIGINT 类型的计量表标识列
  • TimeSeries 数据类型列
原点 所有计量表标识的原点都是 2010-11-10 00:00:00.00000
规则性 规则
元数据 无元数据
存储空间量 约 1 MB(28 行,每行 8640 个时间点)
存储数据的位置 在与 stores_demo 数据库相同的数据库空间(缺省情况下在根数据库空间中)中自动创建的容器中
如何装入数据 TimeSeries 插件
如何访问数据 虚拟表

创建 TimeSeries 数据类型和表

创建包含时间戳记列和用电量值列的 TimeSeries 数据类型。然后创建具有计量表标识主键列和 TimeSeries 列的表。

要创建 TimeSeries 数据类型和表,请执行以下操作:

  1. 通过运行以下 SQL 语句在 stores_demo 数据库中创建名为 my_meter_dataTimeSeries 子类型:
    CREATE ROW TYPE my_meter_data(
        timestamp    DATETIME YEAR TO FRACTION(5),
        data         DECIMAL(4,3)
    );
    timestamp 列包含计量表读数的时间,data 列包含读取值。
  2. 通过运行以下 SQL 语句创建名为 my_ts_data 的时间系列表:
    CREATE TABLE IF NOT EXISTS my_ts_data (
    	meter_id	BIGINT NOT NULL PRIMARY KEY,
     raw_reads	 TIMESERIES(my_meter_data)
    ) LOCK MODE ROW;

创建规则的空时间系列

需要为每个计量表标识定义时间系列的属性,方法是将计量表标识装入时间系列表并为每个计量表标识创建规则的空时间系列。使用 stores_demo 数据库中 ts_data 表的计量表标识填充 my_ts_data 表的 meter_id 列。

要创建规则的空时间系列,请执行以下操作:

  1. 通过运行以下 SQL 语句创建名为 my_meter_id.unl 的卸载文件,并在该文件中包含 ts_data 表的 loc_esi_id 列中的计量表标识:
    UNLOAD TO "my_meter_id.unl" SELECT loc_esi_id FROM ts_data; 
  2. 通过运行以下 SQL 语句创建名为 my_tmp 的临时表并将计量表标识装入临时表:
    CREATE TEMP TABLE my_tmp (
      id BIGINT NOT NULL PRIMARY KEY);
    
    LOAD FROM "my_meter_id.unl" INSERT INTO my_tmp;
    在下一步使用此表通过一个 SQL 语句为每个计量表标识创建时间系列,而不是为每个计量表标识运行单独的 SQL 语句。
  3. 通过运行使用时间系列输入函数的以下 SQL 语句,为使用预定义日历 ts_15min 的计量表标识创建规则的空时间系列:
    INSERT INTO my_ts_data
      SELECT id, 
             "origin(2010-11-10 00:00:00.00000),calendar(ts_15min),
              threshold(0),regular,[]"
      FROM my_tmp;
    因为没有指定容器名称,每个计量表标识的时间系列将存储在表所驻留的相同数据库空间的容器中。该容器会自动创建,并且成为缺省容器池的成员。

创建数据装入文件

通过基于 ts_data 表创建虚拟表然后卸载一些列,以创建时间系列数据装入文件。

要创建数据装入文件,请执行以下操作:

  1. 通过运行以下 SQL 语句基于 ts_data 表的 raw_reads 时间系列列创建虚拟表:
    EXECUTE PROCEDURE TSCreateVirtualTab("my_vt", "ts_data", 0, "raw_reads");
    使用虚拟表创建数据装入文件。
  2. 通过运行以下 SQL 语句将数据从虚拟表的 tstampvalue 列卸载到名为 my_meter_data.unl 的文件:
    UNLOAD TO my_meter_data.unl 
      SELECT loc_esi_id, tstamp, value 
           FROM my_vt;

装入时间系列数据

使用 TimeSeries 插件my_meter_data.unl 文件中的数据装入 my_ts_data 表。TimeSeries 插件有一个备忘单,可用于指导您完成数据装入过程。

要装入时间系列数据,请执行以下操作:

  1. 如果使用其他计算机上的 Data Studio 或 Optim Developer Studio,那么将 $GBASEDBTDIR\my_meter_data.unl 文件移动到该计算机上并启动 Data Studio 或 Optim Developer Studio。
  2. 从主菜单选择帮助 > 备忘单,展开 TimeSeries 数据类别,选择装入时间系列数据,然后单击确定
  3. 从主菜单选择帮助 > 备忘单,展开 TimeSeries 数据类别,选择从文件装入,然后单击确定
  4. 打开 TimeSeries 透视图。
  5. 创建名为 my_test 的项目区域。
  6. 创建 GBase 8s 表定义并定义该表的列。将表定义命名为 my_table 并将该定义保存在 my_test 项目目录中。定义以下表列:
    • meter_id:选择“大整数”类型并将其指定为主键
    • raw_reads:选择 TimeSeries 类型
  7. 定义 raw_reads 列的以下子列,然后保存该项目:
    • timestamp:选择“时间戳记”类型
    • data:选择“数字”类型
  8. 创建记录格式并定义数据文件的格式。将记录格式定义命名为 my_format 并将其保存在 my_test 项目目录中。定义以下记录格式:
    • meter_id:选择“大整数”类型并指定 |(管道)定界符
    • timestamp:选择“时间戳记”类型并指定 |(管道)定界符
    • data:选择“数字”类型并指定 |(管道)定界符
  9. 创建名为 my_map 的表映射并将数据文件的数据格式映射到 GBase 8s 表的列,然后将其保存到 my_test 项目目录中。
  10. 创建连接到 GBase 8s 数据库服务器的连接概要文件,并命名为 my_ifx
  11. 定义并启动装入作业。指定以下值:
    • 文件格式文件:my_format.udrf
    • 表定义文件:my_table.tbl
    • 映射文件:my_map.tblmap
    • 数据文件:my_meter_data.unl
    • 连接概要文件:my_ifx
    单击确定时,装入作业将启动,并且您会看到状态。

通过虚拟表访问时间系列数据

创建虚拟表来查看关系数据格式的时间系列数据。

要基于时间系列表创建虚拟表,请执行以下操作:

通过运行以下 SQL 语句,使用 TSCreateVirtualTab 过程基于 my_ts_data 表创建名为 my_vt2 的虚拟表:
EXECUTE PROCEDURE TSCreateVirtualTab("my_vt2", "my_ts_data", 
   "calendar(ts_15min), origin(2010-11-10 00:00:00.00000)");
可以运行标准 SQL 语句来查询虚拟表。例如,以下查询会返回每个计量表标识(共 28 个)的第一个值:
SELECT * FROM my_vt2 WHERE timestamp = "2010-11-10 00:00:00.00000";