编写装入器程序

可以使用时间系列 SQL 例程来编写程序以装入时间系列数据。

必须具备以下先决条件才能装入数据:

一个装入器程序会创建一个装入器会话。装入器会话将数据装入到特定的 TimeSeries 列。必须为每个 TimeSeries 列使用单独的装入器会话。打开装入器会话需要一些时间。请将会话保持打开,而不要反复打开并关闭会话。

在一个装入器会话中,可以打开多个数据库会话,这样就可以并行装入数据。

要编写使用一个数据库会话的装入器程序:

  1. 通过运行 TSL_Init 函数,初始化全局上下文并打开数据库会话。
  2. 通过运行 TSL_PutTSL_PutRowTLS_PutSQL 函数,将文件或输入流中的数据复制到数据库服务器。
    装入数据期间会多次运行此函数。
  3. 通过运行 TSL_Flush 函数,将数据保存到磁盘。
    装入 65536 条记录后,必须运行此函数。
  4. 如果需要,通过运行 TSL_SetLogMode 函数,更改日志记录方式。
  5. 通过运行 TSL_GetLogMessage 函数,监视装入和保存数据的进度。
  6. 通过运行 TSL_SessionClose 函数,关闭数据库会话。
  7. 通过运行 TSL_Shutdown 过程,除去全局上下文并关闭装入器。

要编写使用多个数据库会话的装入器程序:

  1. 通过运行 TSL_Init 函数,初始化全局上下文并打开数据库会话。
  2. 通过运行 TSL_Attach 函数,打开其他数据库会话。
  3. 通过运行 TSL_GetKeyContainer 函数在每个主键值所属的容器中进行查找,确定如何在数据库会话之间分发数据。

    如果每个数据库会话将数据装入到不同的容器,那么装入速度会更快。

  4. 在每个数据库会话的上下文中,运行 TSL_PutTSL_Flush 函数以装入并保存数据。
  5. 在每个数据库会话的上下文中,通过运行 TSL_GetLogMessage 函数,监视装入和保存数据的进度。
  6. 如果需要,通过运行 TSL_SetLogMode 函数,更改所有数据库会话的日志记录方式。
  7. 在每个数据库会话的上下文中,通过运行 TSL_SessionClose 函数,关闭该数据库会话。
  8. 通过运行 TSL_Shutdown 过程,除去全局上下文并关闭装入器。

示例

以下装入器会话使用一个数据库会话将数据装入到 stores_demo 数据库中的 ts_data 表:

EXECUTE PROCEDURE ifx_allow_newline ('t');

EXECUTE FUNCTION TSL_Init ('ts_data','raw_reads',
                          	3,4, NULL, '%Y-%m-%d %H:%M:%S',
                         	'/tmp/rejects.log',NULL);

EXECUTE FUNCTION TSL_Put ('ts_data|raw_reads',
'4727354321000111|KWH|P|2010-11-10 00:00:00.00000|0.092|
4727354321000111|KWH|P|2010-11-10 00:15:00.00000|0.084|
4727354321000111|KWH|P|2010-11-10 00:30:00.00000|0.09|
4727354321000111|KWH|P|2010-11-10 00:45:00.00000|0.085|
4727354321000111|KWH|P|2010-11-10 01:00:00.00000|0.088|
4727354321000111|KWH|P|2010-11-10 01:15:00.00000|0.088|
4727354321000111|KWH|P|2010-11-10 01:30:00.00000|0.085|
4727354321000111|KWH|P|2010-11-10 01:45:00.00000|0.091|
4727354321046021|KWH|P|2010-11-10 00:00:00.00000|0.041|
4727354321046021|KWH|P|2010-11-10 00:15:00.00000|0.041|
4727354321046021|KWH|P|2010-11-10 00:30:00.00000|0.04|
4727354321046021|KWH|P|2010-11-10 00:45:00.00000|0.041|
4727354321046021|KWH|P|2010-11-10 01:00:00.00000|0.041|
4727354321046021|KWH|P|2010-11-10 01:15:00.00000|0.041|
4727354321046021|KWH|P|2010-11-10 01:30:00.00000|0.055|
4727354321046021|KWH|P|2010-11-10 01:45:00.00000|0.073|
4727354321046021|KWH|P|2010-11-10 02:00:00.00000|0.071|
4727354321046021|KWH|P|2010-11-10 02:15:00.00000|0.068|
4727354321046021|KWH|P|2010-11-10 02:30:00.00000|0.07|
');

EXECUTE FUNCTION TSL_Put ('ts_data|raw_reads',
'4727354321090954|KWH|P|2010-11-10 00:00:00.00000|0.026|
4727354321090954|KWH|P|2010-11-10 00:15:00.00000|0.035|
4727354321090954|KWH|P|2010-11-10 00:30:00.00000|0.062|
4727354321090954|KWH|P|2010-11-10 00:45:00.00000|0.092|
4727354321090954|KWH|P|2010-11-10 01:00:00.00000|0.016|
4727354321090954|KWH|P|2010-11-10 01:15:00.00000|0.043|
4727354321090954|KWH|P|2010-11-10 01:30:00.00000|0.038|
4727354321090954|KWH|P|2010-11-10 01:45:00.00000|0.037|
4727354321090954|KWH|P|2010-11-10 02:00:00.00000|0.034|
4727354321090954|KWH|P|2010-11-10 02:15:00.00000|0.023|
4727354321090954|KWH|P|2010-11-10 02:30:00.00000|0.03|
4727354321090954|KWH|P|2010-11-10 02:45:00.00000|0.05|
4727354321090954|KWH|P|2010-11-10 03:00:00.00000|0.048|
4727354321090954|KWH|P|2010-11-10 03:15:00.00000|0.047|
');

begin;
EXECUTE FUNCTION TSL_Flush ('ts_data|raw_reads');
commit;

EXECUTE FUNCTION TSL_SessionClose ('ts_data|raw_reads');

EXECTUE PROCEDURE TSL_Shutdown ('ts_data|raw_reads');