説明

データベース管理方法、計算機、センサネットワークシステム及びデータベース検索プログラム

【課題】プラント等の多数のセンサ情報を扱うシステムにおいて、データベースに格納されるデータ量を削減し、異常箇所及び異常原因の特定のための追跡を容易にすることを目的とする。
【解決手段】データベースを管理する計算機におけるデータベース管理方法であって、
クエリを受け付けた場合に、計算機が、クエリを解析するステップと、クエリの解析結果に基づいて圧縮データを検索するための第1の問い合わせを生成するステップと、時系列データに対する検索を実行するための第2の問い合わせを生成するステップと、第2の問い合わせに対する応答結果に基づいて、取得された複数の時系列データから所定のデータを抽出するステップと、抽出された所定のデータからクライアント計算機に出力するためのデータを抽出し、出力結果を生成するステップと、を含むことを特徴とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理を行うための計算機システム及びそのデータ処理方法に係り、特に、工場やプラントにおける設備等の予防保全を目的にして収集される大量のデータを処理するに適した計算機システム及びそのデータ処理方法に関する。
【背景技術】
【0002】
火力発電プラントでは、数千にも及ぶセンサが施設の様々な部位に取りつけられている。それらセンサは、秒単位、又は、ミリ秒単位で計測結果を常時発信し続けており、プラント生涯に渡って発信されるデータ量は数百〜数十テラバイトと膨大なデータ量になると試算される。これら多年度にわたって日々刻々と送られてくるデータを管理するシステムでは、データベースに格納されるデータ量が膨大となるため、データベースのディスク容量の増加が課題となる。
【0003】
一方、プラントにおいて異常が発生した場合に、プラントの管理者は、当該データベースに格納されたセンサ情報を解析して異常が発生した原因を早急に特定する必要がある。まず、異常な値を示すセンサデータ(信号)をビューア等に表示しながら、問題発生の原因を絞り込むべく、データベース上の膨大なデータに対して何度も検索クエリを発行することになるため、異常原因の特定まで時間がかかる。
【0004】
これを解決する方法としては、例えば、特許文献1に記載されるように、センサ情報を圧縮してデータベースに格納することによって、ディスク容量の増加を解消することが可能である。また、異常原因の特定では、データベースに発行するクエリ数を削減することで異常原因の特定が短時間で行える。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2002−358117号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかし、前述した方法では、圧縮データを検索する場合、データを一旦何処かへ展開したのち、展開後のデータに対して検索を行う必要が生じるため検索速度が犠牲になるという問題があった。また、異常の原因を特定する場合に、センサ情報から異常箇所の検索のための検索クエリ、及び異常が発生した原因を特定するために異常箇所の追跡を行うための検索クエリを複数回にわけて発行する必要があった。したがって、発行されるクエリ数の増大と異常箇所の検索時間の増大という問題があった。
【0007】
本発明は、前述した問題点に鑑みてなされた発明である。すなわち、データベースに格納されるデータ量を削減し、大量のデータの中から所望とするデータを効率よく検索することを目的とする。
【課題を解決するための手段】
【0008】
本発明の代表的な一例を示せば以下の通りである。すなわち、プロセッサと、前記プロセッサに接続されるメモリとを備え、データベースを管理する計算機におけるデータベース管理方法であって、前記データベースは、所定の条件に基づいて圧縮された複数の圧縮データを格納し、前記データベース管理方法は、前記計算機に接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記計算機が、前記受け付けたクエリを解析する第1のステップと、前記計算機が、前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第1の問い合わせを生成する第2のステップと、前記計算機が、前記受け付けたクエリの解析結果に基づいて、前記第1の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の時系列データに対する検索を実行するための第2の問い合わせを生成する第3のステップと、前記計算機が、前記データベースに前記第1の問い合わせを発行して、前記データベースから前記第1の問い合わせの応答結果として一つ以上の前記圧縮データを取得する第4のステップと、前記計算機が、前記第1の問い合わせに対する応答結果として取得された一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得する第5のステップと、前記計算機が、前記取得された複数の時系列データに対して前記第2の問い合わせを実行する第6のステップと、前記計算機が、前記第2の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する第7のステップと、前記計算機が、前記第7のステップにおいて抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成する第8のステップと、を含むことを特徴とする。
【発明の効果】
【0009】
本発明によれば、実質的なデータを維持しつつデータベースに格納されるデータ量を削減し、また、大量なデータから所望とするデータを効率よく検索することができる。
【図面の簡単な説明】
【0010】
【図1】本発明が適用されたセンサネットワークシステムの一実施形態における計算機システムの概要を説明するブロック図である。
【図2】本実施形態におけるセンタサーバのハードウェア構成を説明するブロック図である。
【図3】本実施形態におけるセンタネットワークシステムのソフトウェア構成を説明するブロック図である。
【図4】本実施形態におけるデータローダモジュール及びデータベースを説明するブロック図である。
【図5A】本実施形態において、データローダモジュールによって実行される処理を説明するフローチャートである。
【図5B】本実施形態において、データローダモジュールによって実行されるデータロード処理を説明するフローチャートである。
【図5C】本実施形態において、データローダモジュールによって実行されるデータロード処理を説明するフローチャートである。
【図6】本実施形態におけるデータ検索モジュールを説明するブロック図である。
【図7】本実施形態において、データ検索モジュールによって出力されるデータの構造の一例を示す説明図である。
【図8A】本実施形態におけるクエリ、SQL及びCQLの一例を示す説明図である
【図8B】本実施形態におけるクエリ、SQL及びCQLの一例を示す説明図である。
【図9】データ検索モジュールによって実行される処理の概要を説明するフローチャートである。
【図10A】本実施形態においてクエリ解析部によって切り出される文字列を示す説明図である。
【図10B】本実施形態のクエリ解析部によって実行されるクエリ解析処理の一例を説明するフローチャートである。
【図11A】本実施形態におけるSQLを生成するためのSQLテンプレートを示す説明図である。
【図11B】本実施形態のSQL生成部によって実行される処理の一例を説明するフローチャートである。
【図12A】本実施形態におけるCQLを生成するためのCQLテンプレートを示す説明図である。
【図12B】本実施形態において、CQL生成部によって実行される処理を説明するフローチャートである。
【図13】本実施形態のDB検索部によって実行されるSQL処理の一例を説明するフローチャートである。
【図14A】本実施形態のデータ解凍/並び替え処理部によって実行される処理の一例を説明するフローチャートである。
【図14B】本実施形態のデータ解凍/並び替え処理部によって実行される処理の一例を説明するフローチャートである。
【図15】本実施形態におけるストリームデータ処理部の構成例を示す説明図である。
【図16】本実施形態のユーザ定義関数の一例を示す説明図である。
【図17】本実施形態のユーザ定義関数に含まれる関数によって抽出された所定の区間のデータの一例を示す説明図である。
【図18A】本実施形態の切り出し処理部によって実行される処理の一例を説明するフローチャートである。
【図18B】本実施形態の切り出し処理の詳細を説明するフローチャートである。
【図19】本実施形態の切り出し処理部によって出力される出力結果の一例を示す説明図である。
【図20】本発明の実施形態のデータ出力部によって実行される処理の一例を説明するフローチャートである。
【図21】本実施形態において、特徴値検索処理を実行する場合のクエリ及びSQLの一例を示す説明図である。
【図22】本実施形態において、特徴値検索用のSQLを生成するためのSQLテンプレートを示す説明図である。
【図23】本実施形態の特徴値検索用SQL生成部によって実行される処理の一例を説明するフローチャートである。
【図24】本実施形態において、データ検索モジュールによって実行される処理を並列に実行する場合を説明するフローチャートである。
【図25】本発明の実施形態の特徴値の種類と生成方法を説明する図である。
【図26】本発明の実施形態の時系列データブロックの時間幅を決定する方法を説明する図である。
【図27】本実施形態のストリームデータ処理部によって実行される処理の一例を説明するフローチャートである。
【図28】本実施形態の入力制御部によって実行される処理の一例を説明するフローチャートである。
【図29】本実施形態の出力制御部によって実行される処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【0011】
図1は、本発明が適用されたセンサネットワークシステムの一実施形態における計算機システムの概要を説明するブロック図である。
【0012】
センサネットワークシステムは、プラント102、データセンタ105及びプラント監視サイト107を備え、ネットワーク103を介して互いに接続される。ネットワーク103としては、例えば、専用線やいわゆるインターネットなどの広域網、又は、LANなどのローカルなネットワークを用いてよい。
【0013】
プラント102は、センサ100及びデータ収集装置101を備える。センサ100とデータ収集装置101とは互いに接続される。なお、接続方法は、直接接続してもよいし、LAN(Local Area Network)又は無線ネットワーク等を介して接続されていてもよい。
【0014】
センサ100は、各種データを検出する。なお、センサ100は目的とするデータを検出するために様々な種類のセンサが含まれる。
【0015】
データ収集装置101は、センサ100によって検出されたデータを収集し、ネットワーク103を介して、センサ100から収集されたデータをデータセンタ105に送信する。データ収集装置101は、CPU(図示省略)と、CPUに接続されるメモリ(図示省略)、CPUに接続されるネットワークインタフェース(図示省略)及び記憶媒体(図示省略)を備える。なお、データ収集装置101は、ディスプレイ又は入力装置等を備えてもよい。
【0016】
データセンタ105は、複数のプラント102のデータ収集装置101から送信されるデータを一元管理するセンタサーバ104を備える。
【0017】
センタサーバ104は、データ収集装置101から送信されたデータを格納する。またセンタサーバ104は、プラント監視サイト107等を介して管理者からの要求に基づいて、格納されたデータから所定のデータを取り出し、又は、取り出されたデータを解析して解析結果を出力する。
【0018】
センタサーバ104の具体的な装置構成については、図2を用いて後述する。
【0019】
プラント監視サイト107は、データセンタ105に各種問い合わせを行うためのデータ表示端末106を備える。
【0020】
データ表示端末106は、ネットワーク103を介して、センタサーバ104に格納されたデータを監視又は閲覧する。データ表示端末106は、CPU(図示省略)と、CPUに接続されるメモリ(図示省略)、CPUに接続されるネットワークインタフェース(図示省略)、記憶媒体(図示省略)、表示装置(図示省略)及び入力装置(図示省略)を備える。
【0021】
図2は、本実施形態におけるセンタサーバ104のハードウェア構成を説明するブロック図である。
【0022】
センタサーバ104は、CPU121、メモリ122、HDD123、ディスプレイ124、ネットワークインタフェース125、マウス126、キーボード127、電源装置128を備える。
【0023】
CPU121は、メモリ122上に展開されたプログラムを実行する。
【0024】
メモリ122は、CPU121によって実行されるプログラム及び当該プログラムを実行するために必要となる情報を格納する。また、メモリ122は、CPUが各種処理を実行するためのワークエリアとして用いられる。本実施形態では、メモリ122上にOS158(図3参照)、データローダモジュール153(図3参照)、データベース154(図3参照)及びデータ検索モジュール157(図3参照)等のプログラムがHDD123よりロードされ実行される。
【0025】
HDD123は、メモリ122に読み出されるプログラム及び各種情報を格納する。図2に示す例では、HDD123は一つのみであるが、複数のHDD123を備えていてもよいし、複数のHDD123から構成されるアレイグループであってもよい。
【0026】
ネットワークインタフェース125は、ネットワーク103と接続するためのインタフェースである。
【0027】
電源装置128は、センタサーバ104に電力を供給するための装置である。
【0028】
ディスプレイ124は、センタサーバ104を操作する操作者に各種情報を表示する装置である。マウス126は、センタサーバ104を操作する操作者が利用するポインティングデバイスである。キーボード127は、センタサーバ104を操作する操作者が利用する入力装置である。
【0029】
図3は、本実施形態におけるセンタネットワークシステムのソフトウェア構成を説明するブロック図である。
【0030】
センタサーバ104上では、OS(Operating System)158がCPU121によって実行される。OS158は、各種処理を実行する。具体的には、OS158は、データローダモジュール153、データベース154及びデータ検索モジュール157を実行する。
【0031】
データベース154は、データ収集装置101から送信され、データローダモジュール153によって所定の形式に変換されたデータを管理する管理ソフトウェアである。データベース154に格納されるデータの詳細については、図4を用いて後述する。
【0032】
データローダモジュール153は、プラント102に含まれるデータ収集装置101からネットワーク103を介してデータを受信し、受信したデータを所定の形式に変換してデータベースに格納するソフトウェアである。
【0033】
図3に示す例では、データ収集装置101からファイル名が「sid.csv」の入力ファイル1(151)、及び、ファイル名が「input.csv」の入力ファイル2(152)を受信し、入力ファイル1(151)及び入力ファイル2(152)を所定の形式に変換してデータベース154に格納する。
【0034】
なお、図3に示すファイル1(151)及びファイル2(152)は、CSV(Comma Separated Value)形式のファイルである。ここで、CSVファイルとは、複数のフィールドが「,(カンマ)」で区切られたファイル形式を表す。図3ではCSV形式を使用する例を記したが、カンマの変わりにTABで区切られたファイル形式(TSV形式)やバイナリ形式であってもよい。
【0035】
データ検索モジュール157は、入力されたクエリに基づいて、目的とするデータをデータベース154から検索し、検索結果を出力するソフトウェアである。
【0036】
図3に示す例では、データ検索モジュール157は、データ表示端末106を操作するユーザ150からクエリ155を受け付け、当該クエリ155に基づいてデータを検索し、当該データ検索の結果を検索結果ファイル156として出力する。データ表示端末106は、検索結果ファイル156を読み込み、画面にデータを数字、又は、グラフィカルな波形等の形式に変換して表示する。
【0037】
図4は、本実施形態におけるデータローダモジュール153及びデータベース154を説明するブロック図である。
【0038】
はじめに、入力ファイル1(151)、入力ファイル2(152)及びデータベース154に格納されるデータの形式について説明する。
【0039】
入力ファイル1(151)は、Nameカラム1511及びIDカラム1512を含む。
【0040】
Nameカラム1511は、プラント102に備わるセンサ100のセンサ名である。IDカラム1512は、プラント102に備わるセンサ100を一意に識別するための識別子である。
【0041】
入力ファイル2(152)は、Datetimeカラム1521及びセンサ名カラム1522を含む。
【0042】
Datetimeカラム1521は、センサ100がデータを取得した時刻を示す時刻情報である。センサ名カラム1522は、各センサ100の名称から構成され、Nameカラム1511と対応するセンサ名が格納される。センサ名カラム1522を構成する各センサ100には、各センサ100が検出した値が格納される。
【0043】
図4に示す例では、入力ファイル2(152)は、各センサ100が1秒ごとに検出したデータを格納する。
【0044】
データベース154は、SIDテーブル207及びDATテーブル208を格納する。
【0045】
SIDテーブル207は、Nameカラム2071及びIDカラム2072を含む。
【0046】
Nameカラム2071は、プラント102に備わるセンサ100のセンサ名である。IDカラム2072は、プラント102に備わるセンサ100を一意に識別するための識別子である。
【0047】
DATテーブル208は、入力ファイル2(152)に含まれるデータを各センサ100について所定の連続する時間単位(時系列データブロック)毎に圧縮したデータを格納する。具体的には、1行毎に、各センサ100について1時間分の圧縮されたデータが格納される。
【0048】
DATテーブル208は、Datetimeカラム2081、IDカラム2082、CDATAカラム2083、MaxValカラム2084及びMinValカラム2085を含む。
【0049】
Datetimeカラム2081は、圧縮された時系列データブロックの先頭時刻を示す時刻情報を格納する。ここで、先頭時刻とは、Datetimeカラム1521のうち、最も過去の時刻、つまり、圧縮される時系列データブロックの起点となる時刻を表す。
【0050】
IDカラム2082は、センサ100を識別するための識別子である。CDATAカラム2083は、圧縮されたデータである。
【0051】
MaxValカラム2084は、圧縮された時系列データブロックに含まれるデータの最大値である。MinValカラム2085は、圧縮された時系列データブロックに含まれる最小値である。
【0052】
図4に示す例では、データ群201について圧縮された時系列データブロックが行209に対応し、データ群202について圧縮された時系列データブロックが行210に対応する。
【0053】
例えば、行209は、センサ名が「S4」のセンサ100について「2009/10/1の0時0分0秒」から1時間分のデータが圧縮されたデータ「DDD」であり、圧縮前のデータに含まれる最大値は「99」、圧縮前のデータに含まれる最小値は「52」であることを示す。
【0054】
本実施形態では、入力ファイル2(152)の3600行(1時間)のデータが1行に圧縮される。なお、本実施形態の以降の説明では、時系列データブロックに格納される時間範囲は1時間固定とするが、時系列データブロックの時間範囲を1時間以外に変更することも可能である。
【0055】
時系列ブロックの時間範囲の決定方法としては、利用者の最も利用する検索期間を用いる。例えば、最も多い期間検索の範囲の1/10の期間を時系列データブロックの時間範囲とする。これによって、検索範囲が1日であれば時系列データブロックの時間範囲は2.4時間、検索範囲が1ヶ月であれば時系列データブロックの時間範囲は3日とする。これは、データ検索モジュール157のクエリ解析部において、図8Aのクエリ例1のwhere_timerange句で指定された検索期間から時間範囲を算出し、時間範囲を頻度表として管理することによって実現することが可能となる。
【0056】
また、時系列ブロックの時間範囲の決定方法としては、時系列の特徴変化が起こる最小期間を用いることもできる。図26を用いて、時系列データブロック2601を分割していき、時系列ブロック2605を最適な時系列ブロックとする方法について説明する。
【0057】
図26は、本発明の実施形態の時系列データブロックの時間幅を決定する方法を説明する図である。
【0058】
時系列ブロック2601において、特徴値a[1][1]を得る。次に時系列データブロックを半分に分割し、特徴値a[2][1]、a[2][2]を得る。ここで特徴値a[i][j]において、iは何回分割したかを示す分割レベル、jは何番目の時系列データブロックの特徴値かを示す番号を表す。前述した処理を再帰的に繰り返す。
【0059】
ここで、分割レベルiにおける特徴値と分割レベルi+1における特徴値との差が閾値以下であるところを時系列データブロックの最適な分割レベルとし、その時系列データブロックの幅を最適な時間範囲とする。特徴値a[i][j]とa[i+1][j]、a[i][j]とa[i+1][j+1]の差の大きい方の値を、すべての時系列データブロックjに対し平均を取り、この値を「特徴値との差」として閾値判定することも可能である。
【0060】
図4に示すように、圧縮データを格納することによって、データベースの使用容量を削減することが可能となる。
【0061】
次に、データローダモジュール153について説明する。
【0062】
データローダモジュール153は、データ集約部203、特徴値抽出部204、特徴値抽出用ストリームデータ処理部2041、データ圧縮部205及びデータ挿入部206を備える。
【0063】
データ集約部203は、各センサ100毎に所定の時間間隔(本実施形態では1時間)のデータを集約する。
【0064】
特徴値抽出部204は、圧縮されているデータの中から特徴値を抽出する。特徴値は、データベース154から圧縮データを検索するときに用いられる。特徴値を用いた検索方法については、図23を用いて後述する。なお、本実施形態では、圧縮されているデータの中から最大値及び最小値が特徴値として抽出されている。なお、抽出されている特徴値は、平均又は分散等圧縮されるデータの特徴を示す値であれば、どのようなものであってもよい。
【0065】
特徴値の例について図25を用いて説明する。
【0066】
i1のケースでは、圧縮されているデータの始点、終点等の特定の値を特徴値として使用する。
【0067】
i2のケースでは、圧縮されているデータの全体ないし任意の区間の時系列に対する最大値、最小値、平均値、分散値、標準偏差値を特徴量として使用する。
【0068】
i3及びi4のケースでは、複数のセンサ観測値i3、i4の平均値を特徴値として使用する。
【0069】
i5のケースでは、圧縮されているデータの全体ないし任意の区間をフレーム化し、FFT(Fast Fourier Transform)変換を実施することによって周波数帯域に変換し、そのあらかじめ指定した周波数A、B、Cでの振幅を特徴値として使用する。
【0070】
特徴値抽出部204は、特徴値抽出用ストリームデータ処理部2041を利用することによって特徴値を生成することができる。すなわち、リアルタイムに到来する時系列データを所定期間メモリ上に蓄積し、最大値、最小値、平均値、分散値等の時系列解析を行うことによって特徴値を生成することができる。
【0071】
データ圧縮部205は、各センサ毎に所定の時間間隔のデータを圧縮する。データ挿入部206は、圧縮データをDATテーブル208に格納する。
【0072】
図5Aは、本実施形態において、データローダモジュール153によって実行される処理を説明するフローチャートである。
【0073】
データローダモジュール153は、データベース154にSIDテーブル207が存在するか否かを判定する(S250)。例えば、データローダモジュール153が、データベース154にSIDテーブル207の存在を問い合わせるSQLを発行する等によって判定できる。
【0074】
データベース154にSIDテーブル207が存在すると判定された場合、データローダモジュール153は、S252に進む。
【0075】
データベース154にSIDテーブル207が存在しないと判定された場合、データローダモジュール153は、入力ファイル1(151)を読み出し、SIDテーブル207を生成する(S251)。
【0076】
データローダモジュール153は、入力ファイル2(152)から1行分の文字列を読み出し、カンマを区切り記号として読み出された文字列からカラムに相当する文字列を抽出し、配列csvに格納する(S252)。例えば、ci個の文字列が抽出された場合、抽出された文字列は、それぞれ、配列csv[0]〜csv[ci−1]に格納される。ここで、ciはカラムの数を表す。本実施形態では、csv[0」にはdatetimeが格納され、csv[1」〜csv[ci−1]にはセンサの値が格納される。
【0077】
データローダモジュール153は、入力ファイル2(152)のセンサ名カラム1522からIDカラム2082が検索できるようにするための配列idを生成する(S253)。
【0078】
データローダモジュール153は、圧縮データを作成するためデータ配列を定義する(S254)。本実施形態では、1つのセンサ100の1時間分のデータを圧縮するため、d[ci][3600]配列が定義される。すなわち、1つのセンサ100について3600個の配列が定義される。
【0079】
データローダモジュール153は、データベース154にDATテーブル208が存在するか否かを判定する(S255)。例えば、データローダモジュール153が、データベース154にDATテーブル208の存在を問い合わせるSQLを発行する等によって判定できる。
【0080】
データベース154にDATテーブル208が存在すると判定された場合、データローダモジュール153は、S257に進む。
【0081】
データベース154にDATテーブル208が存在しないと判定された場合、データローダモジュール153は、DATテーブル208を生成する(S256)。
【0082】
データローダモジュール153は、S254において取得された配列から圧縮データを生成して、DATテーブル208に格納するためのデータロード処理を実行する(S257)。データロード処理の詳細については、図5Bを用いて後述する。
【0083】
データローダモジュール153は、入力ファイル2(152)の全てのデータについて処理を終了したか否かを判定する(S258)。
【0084】
入力ファイル2(152)の全てのデータについて処理を終了していないと判定された場合、データローダモジュール153は、S257に戻り同様の処理を実行する。
【0085】
入力ファイル2(152)の全てのデータについて処理を終了したと判定された場合、データローダモジュール153は、処理を終了する。
【0086】
図5B及び図5Cは、本実施形態において、データローダモジュール153によって実行されるデータロード処理を説明するフローチャートである。
【0087】
データローダモジュール153は、時間(秒)を示す変数iを初期化し、全ての時間(秒)について処理を実行する(S259)。具体的には、データローダモジュール153は、変数iを「0」に設定し、変数iが「3600」より大きくなるまで繰り返し処理を実行する。なお、本実施形態では、0〜3599秒までのデータが処理対象となる。
【0088】
データローダモジュール153は、入力ファイル2(152)から1行分のデータを読み出し、読み出されたデータからci個の文字列を抽出し、配列csv[0]〜csv[ci−1]に格納する(S260)。
【0089】
データローダモジュール153は、変数iが「0」であるか否かを判定する(S261)。
【0090】
変数iが「0」でないと判定された場合、データローダモジュール153は、S263に進む。
【0091】
変数iが「0」であると判定された場合、データローダモジュール153は、DATテーブル208のDatetimeカラム2081にcsv[0]を格納する(S262)。
【0092】
データローダモジュール153は、各センサ100毎にデータを集約する(S263)。具体的には、データ集約部203は、配列csvに格納される値を数値化して配列dに設定する。
【0093】
データローダモジュール153は、繰り返し処理を実行するか、すなわち、全ての時間について処理が終了したか否かを判定する(S264)。
【0094】
全ての変数iについて処理が終了していないと判定された場合、データローダモジュール153は、S259に戻り、変数iを「1」加算して、S260〜S263までの処理を実行する。
【0095】
全ての変数iについて処理が終了したと判定された場合、データローダモジュール153は、センサ100の数を表す変数jを初期化し、全てのセンサ100について処理を実行する(S265)。具体的には、データローダモジュール153は、変数jに「1」を設定し、変数jがcnより大きくなるまで繰り返し処理を実行する。
【0096】
データローダモジュール153は、配列d[j][i]の中から特徴値を抽出する(S266)。具体的には、特徴値抽出部204が、配列d[j][0]〜d[j][3599]の中から最大値、最小値、平均値、分散値若しくは周波数スペクトル上の特定値のいずれか、又はこれらの組み合わせを抽出する。
【0097】
データローダモジュール153は、配列d[j][i]を所定の形式に圧縮する(S267)。具体的には、データ圧縮部205が、配列d[j][0]〜d[j][3599]を所定の形式に圧縮する。なお、圧縮形式としては、zip、lzh、gzip及びbzip2等が考えられる。
【0098】
データローダモジュール153は、圧縮されたデータをDATテーブル208に格納する(S268)。具体的には、データ挿入部206が、S253において生成されたid[i]をIDカラム2082に、S262において設定されたcsv[0]をDatetimeカラム2081に、S266において抽出された最大値をDATテーブル208のMaxValカラム2084に、S266において抽出された最小値をMinValカラム2085に、さらに、S267において圧縮されたデータをCDATA2083に格納する。
【0099】
データローダモジュール153は、全てのセンサ100について処理が終了したか否かを判定する(S269)。
【0100】
全てのセンサ100について処理が終了していないと判定された場合、データローダモジュール153は、S266に戻り同様の処理を実行する。
【0101】
全てのセンサ100について処理が終了したと判定された場合、データローダモジュール153は、処理を終了する。
【0102】
図6は、本実施形態におけるデータ検索モジュール157を説明するブロック図である。
【0103】
データ検索モジュール157は、入力されたクエリ155に基づいて、データベース154にSQLを発行し、発行されたSQLに対する応答に基づいて検索結果を生成し、生成された検索結果を検索結果ファイル156に出力する。
【0104】
データ検索モジュール157は、クエリ解析部300、SQL生成部301、特徴値検索用SQL生成部302、CQL生成部303、DB検索部304、データ解凍/並び替え処理部305、ストリームデータ処理部306、切り出し処理部307及びデータ出力部308を備える。
【0105】
クエリ解析部300は、入力されたクエリ155を解析し、当該クエリ155の内容をグローバル変数309として出力する。なお、グローバル変数309は、メモリ122等の記憶領域に格納され、SQL生成部301、特徴値検索用SQL生成部302、CQL生成部303、DB検索部304、データ解凍/並び替え処理部305、ストリームデータ処理部306、切り出し処理部307及びデータ出力部308の各部が参照することができる。
【0106】
SQL生成部301は、クエリ解析部300の解析結果であるグローバル変数309に基づいて、データベース154を検索するためのSQL310を生成し、生成されたSQL310をDB検索部304に出力する。
【0107】
特徴値検索用SQL生成部302は、クエリ解析部300の解析結果であるグローバル変数309に基づいて、特徴値を用いてデータベース154を検索するためのSQL310を生成し、生成されたSQL310をDB検索部304に出力する。
【0108】
CQL生成部303は、クエリ解析部300の解析結果であるグローバル変数309に基づいて、ストリームデータ処理を実行するためのCQL311を生成し、生成されたCQL311をストリームデータ処理部306に出力する。
【0109】
DB検索部304は、SQL生成部301又は特徴値検索用SQL生成部302によって生成されたSQL310をデータベース154へ発行する。DB検索部304は、SQL310の実行結果、すなわち、データ検索結果をファイルA312に出力する。なお、ファイルA312に出力されるデータは圧縮データである。
【0110】
データ解凍/並び替え処理部305は、ファイルA312を読み出し、圧縮データを解凍し、かつ、解凍されたデータを所定の条件に基づいて並び替える。データ解凍/並び替え処理部305は、処理されたデータをファイルB313に出力する。
【0111】
ストリームデータ処理部306は、CQL生成部303によって生成されたCQL311に基づいて、ファイルB313を入力データとして読み出し、読み出された各データに対してストリームデータ処理を実行する。ストリームデータ処理部306は、ファイルC314に処理されたデータを出力する。
【0112】
切り出し処理部307は、ファイルC314から所定の条件に一致するデータを抽出する。切り出し処理部307は、ファイルD315に抽出されたデータを出力する。
【0113】
データ出力部308は、ファイルD315に格納されるデータを用いて出力結果を生成し、生成された出力結果を検索結果ファイル156として出力する。
【0114】
図7は、本実施形態において、データ検索モジュール157によって出力されるデータの構造の一例を示す説明図である。
【0115】
データ構造1(340)は、ファイルA312に格納されるデータ(パケット)のデータ構造である。ファイルA312は複数のパケットを格納する。
【0116】
データ構造1(340)は、datetime3401、idx3402、zlen3403及びzblk3404から構成される。
【0117】
datetime3401は、日付及び時間等の時刻を表し、DATテーブル208のDatetimeカラム2081に対応する。本実施形態では、datetime3401のデータ長は8byteである。
【0118】
idx3402は、センサ100を識別するためのセンサ識別番号を表す。クエリ例1のinput_item句に記されるセンサの並び順がセンサ識別番号として割り当てられる。本実施形態では、idx3402のデータ長は4byteである。
【0119】
zlen3403は、圧縮されたデータのブロック長を表し、本実施形態ではデータ長は4byteである。
【0120】
zblk3404は、圧縮されたデータを表す、具体的には、圧縮されたデータそのものである。本実施形態では、zblk3404のデータ長はnbyteである。
【0121】
データ構造2(341)は、ファイルB313、ファイルC314及びファイルD315に格納されるデータ(バイナリ)のデータ構造である。
【0122】
datetime3411は、日付及び時間等の時刻を表す。
本実施形態では、datetime3411のデータ長は8byteである。
【0123】
valn3412は、データ3413の数を表し、本実施形態では、データ長は8byteである。
【0124】
データ3413は、データ解凍/並び替え処理部305、ストリームデータ処理部306及び切り出し処理部307によって算出された値を表し、本実施形態では、データ長はそれぞれ、4byteである。
【0125】
例えば、「2009/10/1 00:00:00,4,100,300,12,52」というデータがあった場合、datetime3411には「2009/10/1 00:00:00」が、valn3412には「4」が、valn[0]には「100」が、valn[1]には「300」が、valn[2]には「12」が、valn[3]には「52」が格納される。
【0126】
データ構造3(342)は、検索結果ファイル156に格納されるデータのデータ構造である。
【0127】
データ構造3(342)には、日付及び時間等の時刻、並びに、各センサ100の値が格納される。
【0128】
図8A及び図8Bは、本実施形態におけるクエリ155、SQL310及びCQL311の一例を示す説明図である。
【0129】
クエリ例1(350)及びクエリ例2(351)は、クエリ155の一例である。
【0130】
クエリ例1(350)は、ストリームデータ処理が実行される場合のクエリ155である。クエリ例1(350)は、センサの名称が「Sensor1」及び「Sensor2」のセンサ100のデータに対して、where_timerange句及びwhere_conditon句において指定された条件を満たすデータを抽出し、さらに、抽出されたデータを「result.csv」に格納することを示す。
【0131】
クエリ例2(351)は、ストリームデータ処理が実行されない場合のクエリ155である。クエリ例2(351)は、センサの名称が「Sensor1」、「Sensor2」及び「Sensor3」のセンサ100のデータに対して、where_timerange句において指定された時間間隔のデータを抽出し、抽出されたデータを「result.csv」に格納することを示す。
【0132】
SQL例1(352)は、クエリ例1(350)が入力された場合に、SQL生成部301によって生成されるSQL310の一例である。なお、SQL310の生成方法については、図11A及び図11Bを用いて後述する。
【0133】
CQL例1(353)は、クエリ例1(350)が入力された場合に、CQL生成部303によって生成されるCQL311の一例である。なお、CQL311の生成方法については、図12A及び図12Bを用いて後述する。
【0134】
図9は、本実施形態のデータ検索モジュール157によって実行される処理の概要を説明するフローチャートである。
【0135】
データ検索モジュール157は、データ表示端末106からクエリ155の入力を受け付け、処理を開始する。
【0136】
データ検索モジュール157は、入力されたクエリ155を解析する(S320)。具体的には、クエリ解析部300が入力されたクエリ155を解析する。
【0137】
データ検索モジュール157は、入力されたクエリ155が特徴値検索の実行を要求するクエリであるか否かを判定する(S321)。具体的には、クエリ解析部300が、入力されたクエリ155にmeta_search句が含まれるか否かを判定する。入力されたクエリ155にmeta_search句が含まれる場合、入力されたクエリ155が特徴値検索の実行を要求するクエリであると判定される。なお、meta_search句を含むクエリ155の例については、図22を用いて後述する。
【0138】
入力されたクエリ155が特徴値検索の実行を要求するクエリでないと判定された場合、データ検索モジュール157は、SQL310を生成する(S322)。具体的には、SQL生成部301がSQL310を生成し、S324に進む。
【0139】
入力されたクエリ155が特徴値検索の実行を要求するクエリであると判定された場合、データ検索モジュール157は、特徴値検索用のSQL310を生成する(S323)。具体的には、特徴値検索用SQL生成部302が特徴値検索用のSQL310を生成し、S324に進む。
【0140】
次に、データ検索モジュール157は、ストリームデータ処理を実行するか否かを判定する(S324)。具体的には、クエリ解析部300が、入力されたクエリ155にselect_items句が含まれるか否かを判定する。入力されたクエリ155にselect_items句が含まれる場合には、ストリームデータ処理を実行すると判定される。
【0141】
ストリームデータ処理を実行しないと判定された場合、データ検索モジュール157は、SQL生成部301又は特徴値検索用SQL生成部302によって生成されたSQL310に基づいて、データベース154を検索する(S325)。具体的にはDB検索部304が、SQL生成部301又は特徴値検索用SQL生成部302によって生成されたSQL310に基づいて、データベース154を検索し、検索された圧縮データをファイルA312に出力する。
【0142】
データ検索モジュール157は、ファイルA312に格納される圧縮データを解凍し、解凍されたデータを並び替える(S326)。具体的には、データ解凍/並び替え処理部305が、ファイルAに格納される圧縮データを解凍し、解凍されたデータを並び替えてファイルBに出力し、S332に進む。
【0143】
S324において、ストリームデータ処理を実行すると判定された場合、データ検索モジュール157は、CQL311を生成する(S327)。具体的には、CQL生成部303がCQL311を生成する。
【0144】
データ検索モジュール157は、SQL生成部301又は特徴値検索用SQL生成部302によって生成されたSQL310に基づいて、データベース154を検索する(S328)。
【0145】
データ検索モジュール157は、ファイルA312に格納された圧縮データを解凍し、解凍されたデータを並び替える(S329)当該処理は、S326と同一の処理である。
【0146】
データ検索モジュール157は、CQL生成部303によって生成されたCQL311に基づいて、ストリームデータ処理を実行する(S330)。具体的には、ストリームデータ処理部306が、CQL生成部303によって生成されたCQL311に基づいて、ストリームデータ処理を実行し、実行結果をファイルC314に出力する。
【0147】
データ検索モジュール157は、ファイルC314に格納されるデータから出力対象となるデータを切り出す(S331)。具体的には、切り出し処理部307が、ファイルC314に格納されるデータから出力対象となるデータを切り出し、切り出されたデータをファイルD315に出力して、S332に進む。
【0148】
データ検索モジュール157は、ファイルB又はファイルD315に格納されるデータをデータ表示端末106に表示するための出力データに変換して、検索結果ファイル156に出力し(S332)、処理を終了する。
【0149】
以下、各ステップの処理の詳細を説明する。
【0150】
図10Aは、本実施形態においてクエリ解析部300によって切り出される文字列を示す説明図である。
【0151】
文字切り出し部分360は、入力されたクエリ155から切り出される文字列を表す。クエリ解析部300が、切り出しキーワードを指示するテンプレートである文字切り出し部分360を保持する。
【0152】
図10Aに示す例では、9つのキーワードから変数「$input」、「$range」、「$select」、「$start」、「$end」、「$cond」、「$prev」、「$post」、「$step」、「$file」及び「$meta」が切り出される。ここで、キーワードとは、「input_items:」及び「select_items」等を表す。
【0153】
例えば、キーワード「input_items:」以下の文字列が切り出され、変数「$input」に切り出された文字列が格納される。
【0154】
以下、クエリ解析部300が実行するクエリ解析処理について説明する。
【0155】
図10Bは、本実施形態のクエリ解析部300によって実行されるクエリ解析処理の一例を説明するフローチャートである。
【0156】
クエリ解析部300は、クエリ155の入力を受け付け、処理を開始する。
【0157】
まず、クエリ解析部300は、変数を初期化する(S361)。具体的には、クエリ解析部300は、「$range」、「$cond」及び「$step」に「1」を設定し、「$prev」及び「$post」に「0」を設定する。また、クエリ解析部300は、「$input」、「$select」、「$start」、「$end」、「$file」及び「$meta」についてはNull初期化を実行する。
【0158】
次に、クエリ解析部300は、文字切り出し部分360に基づいて、入力されたクエリ155から文字列を切り出し、切り出された文字列を各変数に格納する(S362)。
【0159】
具体的には、クエリ解析部300は、クエリ155に含まれる9つの句から文字列を切り出し、切り出された文字列を、それぞれ、変数「$input」、「$range」、「$select」、「$start」、「$end」、「$cond」、「$prev」、「$post」、「$step」、「$file」及び「$meta」に格納する。
【0160】
例えば、クエリ例1(350)の場合、変数「$input」には「'Sensor1','Sensor2'」が格納される。
【0161】
なお、クエリ155に含まれないキーワードについては、S361において設定された値がそのまま用いられる。
【0162】
クエリ解析部300は、変数「$input」及び「$select」に含まれる要素の数を算出する(S363)。
【0163】
具体的には、クエリ解析部300は、変数「$input」及び「$select」に含まれる文字列において、「,(カンマ)」で区切られた要素の数をそれぞれカウントすることによって、要素の数を算出する。さらに、クエリ解析部300は、変数「$input」に含まれる要素数を変数「$inum」に代入し、変数「$select」に含まれる要素数を変数「$snum」に格納する。
【0164】
例えば、変数「$input」に「'Sensor1','Sensor2'」が格納されている場合、「$inum」には「2」が格納される。
【0165】
クエリ解析部300は、各変数をグローバル変数309として出力し(S364)、処理を終了する。
【0166】
図11Aは、本実施形態におけるSQL310を生成するためのSQLテンプレートを示す説明図である。
【0167】
SQLテンプレート370は、SQL310を生成するためのテンプレートであり、SQL生成部301が保持する。
【0168】
図11Aに示す例では、SIDテーブル207とDATテーブル208との両テーブルをそれぞれのIDカラム(2072、2082)に示される値で等価結合(joinオペレーション)したテーブルから、時刻(Datetime)、センサ名(SID.Name)及び圧縮データ(DAT.CDATA)を所定の条件に基づいて検索するSQLであることを示す。また、所定の条件は、where句以下に定義されている。すなわち、データを時間順に並び替え、指定されたセンサ名及び指定された時間区間に一致するデータを取得することが定義される。
【0169】
SQL生成部301は、グローバル変数309を用いて、SQLテンプレート370の太文字及び下線部で示された部分に必要なデータを代入することによって、SQL310を生成する。具体的には、SQL生成部301は、「$db_input」、「$db_start」及び「$db_end」を生成して、生成されたデータをSQLテンプレート370に代入する。
【0170】
以下、SQL生成処理について説明する。
【0171】
図11Bは、本実施形態のSQL生成部301によって実行される処理の一例を説明するフローチャートである。
【0172】
SQL生成部301は、グローバル変数309を用いて、「$db_input」、「$db_start」及び「$db_end」を生成する(S371)。
【0173】
具体的には、「$db_input」及び「$db_end」については、「$db_input」=「$input」及び「$db_end=$end」と生成される。また、「$db_start」については、「$db_start=$start−$range」を計算し、さらに、当該計算結果の分及び秒単位の値を「0」に初期化される。これは、本実施形態では1時間単位で圧縮されたデータを検索するためである。
【0174】
次に、SQL生成部301は、SQL310を生成し(S372)、処理を終了する。
【0175】
具体的には、SQL生成部301は、生成された「$db_input」、「$db_start」及び「$db_end」をSQLテンプレートに代入することによってSQL310を生成する。
【0176】
図12Aは、本実施形態におけるCQL311を生成するためのCQLテンプレートを示す説明図である。
【0177】
CQLテンプレート380は、CQL311を生成するためテンプレートであり、CQL生成部303が保持する。
【0178】
CQL生成部303は、グローバル変数309を用いて、CQLテンプレート380の太文字及び下線部で示された部分に必要なデータを代入することによって、CQL311を生成する。
【0179】
具体的には、CQL生成部303は、「$cql_input」、「$cql_select」、「$range」、「$cql_label」及び「$cond」を生成して、生成されたデータをCQLテンプレート380に代入する。
【0180】
以下、CQL生成処理について説明する。
【0181】
図12Bは、本実施形態において、CQL生成部303によって実行される処理を説明するフローチャートである。
【0182】
CQL生成部303は、グローバル変数309を用いて、「$cql_input」を生成する(S381)。具体的には、以下の二つの処理が実行される。
【0183】
まず、CQL生成部303は、グローバル変数309に含まれる「$input」を用いて、$input分解処理385を実行する。すなわち、CQL生成部303は、「$input」を複数の「$input_item」に分解する。これは、複数のセンサ名が含まれる「$input」から、個々のセンサ名を取得するための処理である。
【0184】
次に、CQL生成部303は、「$input_item」を用いて、$cql_input生成処理386を実行する。CQL生成部303は、「$input_item」を用いて、$cql_input生成処理386の右辺に示すようにして「$cql_input」を生成する。
【0185】
CQL生成部303は、グローバル変数309を用いて、「$cql_select」を生成する(S382)。具体的には、以下の二つの処理が実行される。
【0186】
まず、CQL生成部303は、グローバル変数309に含まれる「$select」を用いて、$select分解処理387を実行する。これは、$selectに含まれる要素を分解するための処理である。CQL生成部303は、$select分解処理387を実行することによって、「$func1」又は「$func2」及び「$label」を取得する。
【0187】
次に、CQL生成部303は、「$func1」又は「$func2」及び「$label」を用いて、$cql_select生成処理388を実行し、「$cql_select」を生成する。ここで「$func1」は集約関数であり、移動平均(avg)、分散、最大値、最小値などが記載できる。
【0188】
ここで、CQLでは、avg等の集約関数と、「Sensor1」等の信号名とを混在させて扱うことができない。そのため、「$select」の含まれる要素をlast()関数を用いて集約関数化する必要がある。例えば、文字列「'Sensor1' as LABEL」は「last('Sensor1') as LABEL」と集約関数化される。
【0189】
CQL生成部303は、グローバル変数309を用いて、「$cql_label」を生成する(S383)。具体的には、CQL生成部303は、「$label」を用いて、$cql_label生成処理389を実行することによって、「$cql_label」を生成する。
【0190】
CQL生成部303は、S381〜S383において生成された「$cql_input」、「$cql_select」及び「$cql_label」、並びに、グローバル変数309に含まれる「$range」及び「$cond」をCQLテンプレート380に代入することによって、CQL311を生成する(S384)。
【0191】
以上のように、データ検索モジュール157は、入力されたクエリ155に基づいて、SQL310及びCQL311を同時に生成することができる。
【0192】
以下、生成されたSQL310及びCQL311を用いた処理について説明する。
【0193】
図13は、本実施形態のDB検索部によって実行されるSQL処理の一例を説明するフローチャートである。
【0194】
DB検索部304は、グローバル変数309に含まれる「$input」を用いて、配列KEY[0]〜KEY[$inum−1]を生成する(S400)。
【0195】
具体的には、DB検索部304は、「$input」を用いて、$signal抽出処理407を実行する。これによって、「$inum」個の「$signal」が抽出される。DB検索部304は、抽出された各「$signal」を配列KEY[0]〜KEY[$inum−1]に格納する。以上の処理によって、配列KEY[0]〜KEY[$inum−1]が生成される。
【0196】
DB検索部304は、生成された配列KEY[0]〜KEY[$inum−1]を用いて、ハッシュ配列hashを生成する(S401)。
【0197】
DB検索部304は、データベース154に対してSQL310を発行し、データベース154がSQL310を実行する(S402)。これによって、発行されたSQL310において指定された条件に一致するデータを実行結果として取得することができる。
【0198】
DB検索部304は、取得された実行結果から1行分のデータを取り出し、取り出されたデータから日付及び時間等の時刻(Datetime)、センサ名(Name)並びに圧縮データ(CDATA)を取得する(S403)。なお、取り出される1行分のデータは、1つのセンサの1時間分の圧縮されたデータである。
【0199】
DB検索部304は、実行結果から取り出された1行分のデータが空である否かを判定する(S404)。すなわち、全ての実行結果について処理が終了したか否かが判定される。
【0200】
実行結果から取り出された1行分のデータが空であると判定された場合、DB検索部304は、処理を終了する。
【0201】
実行結果から取り出された1行分のデータが空でないと判定された場合、DB検索部304は、データ構造1(340)に示すパケットを生成する(S405)。
【0202】
具体的には、DB検索部304は、取り出された1行分のデータに含まれる日付及び時間等の時刻(Datetime)をdatetime3401に、センサ名(Name)をキーにハッシュ配列hashから得られた値をidx3402に、圧縮データ(CDATA)をzblk3404に、圧縮データ(CDATA)のサイズをzlen3403へ格納する。
【0203】
DB検索部304は、生成されたパケットをファイルA312に出力し(S406)、S403に戻り、S403〜S406の処理を実行する。
【0204】
例えば、SQL例1(352)が実行された場合、センサ名が「'Sensor1'」及び「'Sensor2'」のセンサ100について「2009−02−01 23:00:00」から「2009−02−20 23:59:59」までの間のデータが複数個のデータ構造1(340)のパケットに変換され、ファイルA312に出力される。
【0205】
図14A及び図14Bは、本実施形態のデータ解凍/並び替え処理部305によって実行される処理の一例を説明するフローチャートである。
【0206】
データ解凍/並び替え処理部305は、data[3600][$inum]配列、バッファ配列及びblk配列を定義する(S450)。本実施形態では、一つの圧縮データには、1つのセンサ100について1時間分のデータ、3600点が格納されているため、data[3600][$inum]配列が定義される。
【0207】
データ解凍/並び替え処理部305は、グローバル変数309に含まれる「$snum」が「0」であるか否かを判定する(S451)。これによって、ストリームデータ処理が実行されるか否かが判定される。すなわち、図8Aのクエリ例2(351)に示すようにクエリ155にselect_items句が含まれない場合、「$snum」は「0」であるため、ストリームデータ処理は実行されないと判定される。
【0208】
「$snum」が「0」でないと判定された場合、データ解凍/並び替え処理部305は、処理結果を出力するファイルをファイルB313に決定し(S452)、S434に進む。
【0209】
「$snum」が「0」であると判定された場合、データ解凍/並び替え処理部305は、処理結果を出力するファイルをファイルD315に決定し(S453)、S434に進む。
【0210】
データ解凍/並び替え処理部305は、data[3600][$inum]配列及び時刻を初期化する(S454)。具体的には、データ解凍/並び替え処理部305は、data[3600][$inum]をNaN(Not a Number)値を用いて初期化し、また、時刻を表す変数lastetを「0」に初期化する。本実施形態では、配列dataの初期化の際、NaN値を用いたが、数値と重複しない値であれば、何でもよい。
【0211】
データ解凍/並び替え処理部305は、データ構造1(340)に示すパケットを一つ取り出す(S455)。具体的には、データ解凍/並び替え処理部305は、バッファからパケットを取り出す。バッファにパケットがない場合には、ファイルA312からパケットを取り出す。初回の処理時には、バッファにはパケットが格納されていないため、ファイルA312からパケットが取り出される。
【0212】
データ解凍/並び替え処理部305は、取り出されたパケットが空であるか否かを判定する(S456)。すなわち、取り出されたパケットに処理対象のデータが含まれているか否かが判定される。
【0213】
取り出されたパケットが空でないと判定された場合、データ解凍/並び替え処理部305は、当該パケットからデータを抽出する(S457)。具体的には、データ解凍/並び替え処理部305は、パケットから、datetime3401、idx3402、zlen3403及びzblk3404を抽出する。
【0214】
データ解凍/並び替え処理部305は、同じ時刻の時系列データブロックを一括して処理するため、取り出されたパケットが処理時間範囲内のデータであるか否かを判定する(S458)。具体的には、lastetには、前回受信したパケットのdatetime3401が保持されているので、今回受信したパケット(340)のdatetime3401とlastetとを比較することによって、当該パケットが処理時間の範囲である1時間以内のパケットであるか否かを判定できる。
【0215】
取り出されたパケットが処理時間範囲内のデータであると判定された場合、データ解凍/並び替え処理部305は、圧縮データを解凍する(S459)。具体的には、データ解凍/並び替え処理部305は、取り出されたパケットに含まれるzblk3404を解凍し、当該結果をblkに格納する。
【0216】
データ解凍/並び替え処理部305は、解凍されたデータを配列dataに格納し(S460)、S455に戻りS455〜S460の処理を実行する。具体的には、データ解凍/並び替え処理部305は、blkを配列dataに格納する。また、データ解凍/並び替え処理部305は、latestにdatetime3401を格納する。
【0217】
S456において取り出されたパケットが空であると判定された場合、又は、S458において取り出されたパケットが処理時間範囲内のデータでないと判定された場合、データ解凍/並び替え処理部305は、取り出されたパケットをバッファに書き戻す(S461)。
【0218】
データ解凍/並び替え処理部305は、ループ回数を示す変数iに「0」に設定し、パケット内の1時間分の各データに対して処理463、処理464を繰り返し実行する(S462)。すなわち、変数iが「3600」より大きくなるまで処理が繰り返し実行される。
【0219】
データ解凍/並び替え処理部305は、出力結果を生成する(S463)。すなわち、データ解凍/並び替え処理部305は、データ構造2(341)に示すようなデータを生成する。
【0220】
具体的には、変数iに対して、latest+iをdatetime3411に、「$inum」をvaln3412に、配列dataをそれぞれデータ3413に格納する。これによって、input_items句に指定されるセンサの1秒(1行)のデータに対応する出力結果が得られる。したがって、全ての変数iについて同様の処理を繰り返し実行することによって、input_items句に指定されたセンサの1時間分のデータが出力結果として得られる。
【0221】
データ解凍/並び替え処理部305は、生成された出力結果をファイルB313又はファイルD315に出力する(S464)。
【0222】
データ解凍/並び替え処理部305は、1時間分のパケットの処理を終了したか否かを判定する(S465)。すなわち、変数iが「3600」より大きいか否かが判定される。変数iが「3600」未満の場合、1時間分のパケットの処理が終了していないと判定される。
【0223】
全ての変数iに対して処理が終了していないと判定された場合、すなわち、変数iが「3600」未満の場合、データ解凍/並び替え処理部305は、S462に戻りS462〜S466の処理を実行する。
【0224】
全ての変数iに対して処理が終了したと判定された場合、すなわち、変数iが「3600」より大きい場合、データ解凍/並び替え処理部305は、ファイルA312に格納される全てのパケットについて処理が終了したが否かを判定する(S466)。
【0225】
ファイルA312に格納される全てのパケットについて処理が終了していないと判定された場合、データ解凍/並び替え処理部305は、S454に戻りS454〜S466の処理を実行する。
【0226】
ファイルA312に格納される全てのパケットについて処理が終了したと判定された場合、データ解凍/並び替え処理部305は、処理を終了する。
【0227】
図15は、本実施形態におけるストリームデータ処理部306の構成例を示す説明図である。
【0228】
ストリームデータ処理部306は、入力制御部500、入力キュー501、ストリームデータ処理エンジン502、ユーザ定義関数503、出力キュー504及び出力制御部505を備える。
【0229】
入力制御部500は、入力制御を実行する。具体的には、入力制御部500は、ファイルB313から入力されるデータを受信し、受信したデータを入力キュー501に出力する。入力キュー501は、入力制御部500に入力されたデータを格納する。
【0230】
ストリームデータ処理エンジン502は、入力キュー501からデータを取り出し、CQL311に基づいて取り出された情報を分析し、分析結果を出力キュー504に出力する。
【0231】
ユーザ定義関数503は、CQL311において使用される関数の演算方法の定義を格納する。なお、ユーザ定義関数503の詳細については、図16を用いて後述する。
【0232】
出力キュー504は、ストリームデータ処理エンジン502から入力された分析結果を格納する。
【0233】
出力制御部505は、出力制御を実行する。具体的には、出力制御部505は、出力キュー504から分析結果を読み出し、ファイルCに分析結果を出力する。
【0234】
本実施形態では、まず、ファイルB313に格納されるvaln3412が「$inum」であるデータ、すなわち、「$inum」個のセンサ100についての値が格納されたデータがファイルB313からストリームデータ処理部306に入力される。ストリームデータ処理部306は、CQL311に基づいて処理を実行した結果をファイルC314に出力する。
【0235】
具体的には、当該ファイルC314に格納されるデータのvaln3412には「$snum+1」が格納され、データ3413のうちval[0]〜val[$snum−1]には、クエリ155のselect_items句で指定された処理結果が格納され、データ3413のうちval[$snum]には、クエリ155のwhere_condition句で指定された条件に対する処理結果が格納される。
【0236】
ここで、where_condition句において指定された条件に一致する場合、val[$snum]には「1」が格納される。また、where_condition句において指定された条件に一致しない場合、val[$snum]には「0」が格納される。val[$snum]に格納される値は、後述する切り出し処理部307が切り出し範囲552(図19参照)を決定するためのフラグとして用いられる。
【0237】
本実施形態では、select_items句で指定された「$snum」個の処理結果に、where_condition句の処理結果が一つ付加されるため、ファイルC314に格納されるデータのデータ3413には、「$snum+1」個の値が含まれる。
【0238】
図16は、本実施形態のユーザ定義関数503の一例を示す説明図である。
【0239】
ユーザ定義関数503は、識別番号5031、関数名5032、動作説明5033及び備考5034を含む。
【0240】
識別番号5031は、ユーザ定義関数503に含まれる関数を一意に識別するための識別子である。関数名5032は、CQL311に含まれる関数の名称である。動作説明5033は、関数名5032に対応する関数の演算内容である。備考5034は、関数名5032に対応する関数についての付加的情報である。
【0241】
図17に示す例では、識別番号5031が「1」〜「7」の関数は、「LABEL」と「num」とが動作説明5033に示す関係を満たすデータを抽出する関数である。識別番号5031が「8」及び「9」は、「LABEL」が動作説明5033に示す所定の区間内のデータを抽出する関数である。識別番号5031が「10」〜「12」は、動作説明5033に示す論理演算を実行する関数である。
【0242】
なお、図8Bに示すCQL例1(353)のGraterThanOrEqualTo関数では、「LABEL」は「L1」であり、「num」は「70」である。CQL例1(353)のPositiveThreshold関数では、「LABEL」は「L3」であり、「num1」及び「num2」は「300」及び「200」である。
【0243】
以下、識別番号5031が「8」及び「9」の関数によって抽出された所定の区間のデータについて説明する。
【0244】
図17は、本実施形態のユーザ定義関数503に含まれる関数によって抽出された所定の区間のデータの一例を示す説明図である。
【0245】
PositiveThresholdの例は、識別番号5031が「8」の関数によって抽出された所定の区間のデータを示す。図17の動作説明5033に示すように、PositiveThresholdでは、「LABEL」の値が「num1」以上になり、「LABEL」の値が「num2」より小さくなるまでの区間のデータが抽出される。
【0246】
NegativeThresholdの例は、識別番号5031が「9」の関数によって抽出された所定の区間のデータを示す。図17の動作説明5033に示すように、NegativeThresholdでは、「LABEL」が「num1」以下になり、「LABEL」が「num2」より大きくなるまでの区間のデータが抽出される。
【0247】
以下、ストリームデータ処理部306が実行する処理について説明する。
【0248】
図27は、本実施形態のストリームデータ処理部306によって実行される処理の一例を説明するフローチャートである。
【0249】
ストリームデータ処理部306は、CQLを読み出し(S900)、更に変数runningを「1」に設定する(S901)。
【0250】
次に、ストリームデータ処理部306は、入力制御スレッド及び出力制御スレッドを起動する(S902、S903)。これによって、入力制御部500及び出力制御部505が、処理を開始する。入力制御部500によって実行される処理については、図28を用いて後述する。また、出力制御部505によって実行される処理については、図29を用いて後述する。
【0251】
ストリームデータ処理部306は、出力キュー504に空きがあるか否かを判定する(S904)。
【0252】
出力キュー504に空きがないと判定された場合、ストリームデータ処理部306は、出力キュー504に空きができるまで待つ続ける(S905)。
【0253】
出力キュー504に空きがあると判定された場合、ストリームデータ処理部306は、入力キュー501にデータが格納されているか否かを判定する(S906)。
【0254】
入力キュー501にデータが格納されていると判定された場合、ストリームデータ処理部306は、入力キュー501からデータを取得する(S907)。
【0255】
ストリームデータ処理部306は、CQLに基づいて取得されたデータを処理する(S908)。具体的には、ストリームデータ処理エンジン502が、CQLを実行する。
【0256】
ストリームデータ処理部306は、CQLの実行結果を出力キュー504に格納し(S909)、S904に戻り同様の処理を実行する。
【0257】
S906において、入力キュー501にデータが格納されていないと判定された場合、ストリームデータ処理部306は、変数runnningが「1」であるか否かを判定する(S911)。
【0258】
変数runnningが「1」であると判定された場合、ストリームデータ処理部306は、処理待ちの待ち状態となって(S910)、S906に戻り同様の処理を実行する。
【0259】
変数runnningが「1」でないと判定された場合、ストリームデータ処理部306は、出力キュー504にデータが格納されているか否かを判定する(S912)。
【0260】
出力キュー504にデータが格納されていないと判定された場合、ストリームデータ処理部306は、出力キュー504にデータが格納されるまで待ち続ける(S913)。
【0261】
出力キュー504にデータが格納されていると判定された場合、ストリームデータ処理部306は、入力制御スレッド及び出力制御スレッドを停止させ(S914、S915)、処理を終了する。これによって、入力制御部500及び出力制御部505の処理が終了する。
【0262】
図28は、本実施形態の入力制御部500によって実行される処理の一例を説明するフローチャートである。
【0263】
入力制御部500は、入力制御の処理を開始すると(S920)、入力キュー501に空きがあるか否かを判定する(S922)。
【0264】
入力キュー501に空きがないと判定された場合、入力制御部500は、入力キュー501に空きができるまで待ち続ける(S921)。
【0265】
入力キュー501に空きがあると判定された場合、入力制御部500は、ファイルB313にデータが存在するか否かを判定する(S923)。
【0266】
ファイルB313にデータが存在しないと判定された場合、入力制御部500は、変数runnningを「0」に設定して(S926)、処理を終了する(S927)。
【0267】
ファイルB313にデータが存在すると判定された場合、入力制御部500は、ファイルB313からデータを取得し(S924)、取得されたデータを入力キュー501に格納し(S925)、S922に戻り同様の処理を実行する。
【0268】
図29は、本実施形態の出力制御部505によって実行される処理の一例を説明するフローチャートである。
【0269】
出力制御部505は、出力制御の処理を開始すると(S930)、出力キュー504にデータが存在するか否かを判定する(S931)。
【0270】
出力キュー504にデータが存在しないと判定された場合、出力制御部505は、出力キュー504にデータが格納するまで待ち続ける(S932)。
【0271】
出力キュー504にデータが存在すると判定された場合、出力制御部505は、出力キュー504からデータを取得し(S933)、取得されたデータをファイルC314に格納する(S934)。
【0272】
出力制御部505は、その後、S931に戻り同様の処理を実行する。
【0273】
図18Aは、本実施形態の切り出し処理部307によって実行される処理の一例を説明するフローチャートである。
【0274】
切り出し処理部307は、ストリームデータ処理部306の処理が終了した後に処理を開始する。
【0275】
切り出し処理部307は、変数prev_cnt、変数post_cnt及び変数latestの初期化と、FIFOバッファの生成及び初期化と、indataバッファの定義及び初期化とを実行する(S570)。
【0276】
具体的には、切り出し処理部307は、変数prev_cnt及び変数post_cntを「0」に初期化する。また、切り出し処理部307は、変数latestを「$start−$prev−1」と初期化する。また、切り出し処理部307は、($prev+1)段のFIFOバッファを生成し、生成されたFIFOバッファを「0」に初期化する。なお、変数prev_cnt及び変数post_cntは、後述する切り出し処理で用いられる変数である。
【0277】
切り出し処理部307は、ファイルC314からデータを一つ読み出し、indataに格納する(S571)。なお、ファイルC314には、select_items句の演算結果、1行に対応するデータ構造2(341)のデータが複数個格納されている。
【0278】
切り出し処理部307は、ファイルC314から読み出されたデータが、ファイルC314に格納される終端のデータであるか否かを判定する(S572)。例えば、読み出されたデータのdatetime3411が、グローバル変数309に含まれる「$end」と同一か否かを判定することによって可能である。
【0279】
ファイルC314から読み出されたデータが、ファイルC314に格納される終端のデータでないと判定された場合、切り出し処理部307は、indataに含まれるdatetime3411及び変数latestを用いて、変数diffを「datetime−latest」と設定し(S573)、S575に進む。
【0280】
ファイルC314から読み出されたデータが、ファイルC314に格納される終端のデータであると判定された場合、切り出し処理部307は、変数diffを「$prev+1」に設定し(S574)、S575に進む。
【0281】
切り出し処理部307は、変数diffに設定された値を変数iに代入し、変数iが「0」より小さくなるまで繰り返し処理を実行する(S575)。
【0282】
切り出し処理部307は、変数iが「1」であるか否かを判定する(S576)。
【0283】
変数iが「1」でないと判定された場合、切り出し処理部307は、FIFOバッファに挿入するダミーデータ(以下、挿入データとも記載する)を生成し(S577)、S580に進む。
【0284】
具体的には、データ構造2(341)に示すような挿入データが生成される。この場合、挿入データのdatetime3411には「latest+1」が設定され、valn3412には「$snum+1」が設定される。また、挿入データのデータ3413のうちval[0]〜[$snum−1]には空データを示す値(NaN)が設定され、val[$snum]には「0」が設定される。
【0285】
変数iが「1」であると判定された場合、切り出し処理部307は、ファイルC314から読み出されたデータ(indate)が、ファイルC314に格納される終端のデータであるか否かを判定する(S578)。当該判定は、S572と同一の方法が用いられる。
【0286】
ファイルC314から読み出されたデータ(indate)が、ファイルC314に格納される終端のデータであると判定された場合、切り出し処理部307は、処理を終了する。
【0287】
ファイルC314から読み出されたデータ(indate)が、ファイルC314に格納される終端のデータでないと判定された場合、切り出し処理部307は、入力データを生成し(S579)、S580に進む。具体的には、切り出し処理部307は、indataに格納された値を入力データに設定に設定する。
【0288】
切り出し処理部307は、入力データを用いて切り出し処理を実行する(S580)。切り出し処理の詳細については、図18Bを用いて後述する。
【0289】
切り出し処理部307は、処理を繰り返し実行するか否かを判定する(S581、S575)。すなわち、切り出し処理部307は、S575のfor文ループの実行を続行するか否かを判定する。具体的には、変数iをデクリメントし、「i>0」であるか否かが判定される。判定結果が真の場合は、処理を繰り返し実行すると判定される。
【0290】
処理を繰り返し実行すると判定された場合には、切り出し処理部307は、S575に戻り同様の処理(S575〜S581)を実行する。
【0291】
処理を繰り返し実行しないと判定された場合には、切り出し処理部307は、S571に戻り同様の処理(S571〜S581)を実行する。
【0292】
図18Bは、本実施形態の切り出し処理の詳細を説明するフローチャートである。
【0293】
切り出し処理部307は、挿入データのdatetimeを、変数latestに設定する(S582)。
【0294】
切り出し処理部307は、FIFOバッファに一つの挿入データを入力し、また、FIFOバッファから一つのデータを出力する(S583)。以下では、FIFOバッファから出力されるデータを出力データとも記載する。
【0295】
切り出し処理部307は、入力された挿入データのval[$snum]が「1」であるか否かを判定する(S584)。
【0296】
入力された挿入データのval[$snum]が「1」でないと判定された場合、切り出し処理部307は、S586に進む。
【0297】
入力された挿入データのval[$snum]が「1」であると判定された場合、切り出し処理部307は、変数prev_cntの値を「1」加算し(S585)、S586に進む。
【0298】
切り出し処理部307は、出力された出力データのval[$snum]が「1」であるか否かを判定する(S586)。
【0299】
出力された出力データのval[$snum]が「1」でないと判定された場合、切り出し処理部307は、S588に進む。
【0300】
出力された出力データのval[$snum]が「1」であると判定された場合、切り出し処理部307は、変数prev_cntの値を「1」減算し(S587)、S588に進む。
【0301】
切り出し処理部307は、変数prev_cnt、変数post_cnt及び入力された挿入データのval[$snum]の値に基づいて、切り出し条件判定処理を実行する(S588)。具体的には以下に示す判定処理が実行される。
【0302】
S588では、切り出し処理部307は、3つの判定処理を実行する。
【0303】
第1に、切り出し処理部307は、変数prev_cntの値が「0」より大きいか否かを判定する。以下、当該判定を切り出し条件(1)と記載する。
【0304】
第2に、切り出し処理部307は、出力された出力データのval[$snum]の値が「1」であるか否かを判定する。以下、当該判定を切り出し条件(2)と記載する。
【0305】
第3に、切り出し処理部307は、変数post_cntの値が「0」より大きいか否かを判定する。以下、当該判定を切り出し条件(3)と記載する。
【0306】
切り出し処理部307は、切り出し条件判定処理の実行結果に基づいて、切り出し条件(1)、(2)又は(3)の少なくともいずれかを満たすか否かを判定する(S589)。
【0307】
切り出し条件(1)、(2)又は(3)のいずれも満たさないと判定された場合、切り出し処理部307は、切り出し処理S580の処理を終え、S581へ進む。
【0308】
切り出し条件(1)、(2)又は(3)の少なくともいずれかを満たすと判定された場合、切り出し処理部307は、切り出し条件判定処理の実行結果に基づいて、切り出し条件(1)又は(2)の少なくともいずれかを満たすか否かを判定する(S590)。
【0309】
切り出し条件(1)又は(2)の少なくともいずれかを満たすと判定された場合、切り出し処理部307は、「$post」の値を変数post_cntに設定し(S591)、S593に進む。
【0310】
切り出し条件(1)又は(2)のいずれも満たさないと判定された場合、切り出し処理部307は、変数post_cntを「1」減算し(S592)、S593に進む。
【0311】
切り出し処理部307は、foutデータをファイルD315に出力し(S593)、切り出し処理S580の処理を終え、S581へ進む。
【0312】
当該処理によって、切り出し条件を満たすもののみがファイルD315に出力される。なお、ファイルD315には、クエリ155のwhere_condition句で指定された条件を満たすデータを含む前後のオフセットが付加された出力結果が格納される。
【0313】
具体的には、切り出し処理部307は、S588、S589において、切り出し条件(1)を満たすこと示すフラグ、切り出し条件(2)を満たすことを示すフラグ、及び切り出し条件(3)を満たすことを満たすフラグを各挿入データに付与する。さらに、切り出し処理部307は、当該フラグに基づいて各切り出し条件の判定を行う。
【0314】
以下、当該切り出し処理部307が実行する処理によって出力される出力結果について説明する。
【0315】
図19は、本実施形態の切り出し処理部307によって出力される出力結果の一例を示す説明図である。
【0316】
クエリ例3(550)が入力された場合に、切り出し処理部307は、出力結果551に示すような結果が出力される。
【0317】
具体的には、where_condition句においてLABELが「L1」であるSensor1の値が「100」以上である条件成立範囲554、前方オフセット553及び後方オフセット555を含む切り出し範囲552、又は、条件成立範囲554、前方オフセット553、後方オフセット555及び結合オフセット556を含む切り出し範囲552が出力される。
【0318】
すなわち、切り出し範囲552に示すような範囲のデータが切り出され、出力結果として出力される。
【0319】
なお、結合オフセット556は、前方オフセット553と後方オフセット555とが重なる部分を一つのオフセットとして結合したものである。
【0320】
当該出力結果は、図18のS589において付与されたフラグに基づいて生成されたものである。すなわち、切り出し条件(1)〜(3)のいずれかのフラグが付与された挿入データが切り出し範囲552と出力される。具体的には以下の通りである。
【0321】
切り出し条件(2)のフラグが付与された挿入データは、切り出し範囲552のうち条件成立範囲554に含まれるデータとして出力される。
【0322】
切り出し条件(1)のフラグが付与された挿入データは、切り出し範囲552のうち前方オフセット553に含まれるデータとして出力される。
【0323】
切り出し条件(3)のフラグが付与された挿入データは、切り出し範囲552のうち後方オフセット555に含まれるデータとして出力される。
【0324】
切り出し処理部307は、それぞれの切り出し条件(1)〜(3)に一致する挿入データを切り出し、切り出されたデータを時間順に並び替えて(ソートして)、出力する。
【0325】
なお、切り出し条件(1)〜(3)のいずれかのフラグが2以上付与された挿入データは、結合オフセット556を含む切り出し範囲552として出力される。
【0326】
図20は、本発明の実施形態のデータ出力部308によって実行される処理の一例を説明するフローチャートである。
【0327】
データ出力部308は、tmpバッファを定義する(S605)。
【0328】
データ出力部308は、ファイルD315からデータを読み出し、読み出されたデータをtmpに格納する(S600)。読み出されるデータは、select_items句の演算結果、1行に対応するデータ構造2(341)に示すようなデータである。
【0329】
データ出力部308は、読み出されたデータのdatetime3411を参照し、検索結果抽出処理を実行する(S601)。具体的には、以下の2つの処理が実行される。
【0330】
第1に、データ出力部308は、datetime3411に格納される値が、クエリ155のwhere_timerange句において指定された時間範囲に含まれるか否かを判定する。すなわち、datetime3411に格納される値が、「$start」以上かつ「$end」以下であるか否かを判定する。以下、当該判定を出力条件(1)と記載する。
【0331】
出力条件(1)を満たすか否かの判定処理が実行される理由は、SQL310によって検索される範囲のデータが、クエリ155において指定された時間範囲より広い範囲のデータが対象となっているためである。すなわち、図11Bにおいて説明したように、SQL310を生成するときに用いられる「$db_start」(図11B参照)は、「$start」より前の時刻のデータについても処理しているためである。
【0332】
第2に、データ出力部308は、間引き処理を実行する。具体的には、datetime3411に格納される値を、クエリ155のstep句において指定された値、すなわち、「$step」で除算した余りが「0」となるか否かを判定する。以下、当該判定を出力条件(2)と記載する。クエリ例1(350)に示す例では、出力条件(2)によって、5秒ごとのデータが出力される。
【0333】
データ出力部308は、S601における検索結果抽出処理の結果に基づいて、出力条件(1)及び出力条件(2)を満たすか否かを判定する(S602)。
【0334】
出力条件(1)及び出力条件(2)の両判定を同時に満たさないと判定された場合、データ出力部308は、S604に進む。すなわち、当該データは出力されない。
【0335】
出力条件(1)及び出力条件(2)を満たすと判定された場合、データ出力部308は、検索結果生成処理を実行する(S603)。具体的には、データ出力部308は、tmpに格納されるデータをデータ構造3(342)に示すようなCSV形式に変換して検索結果ファイル156に出力する。
【0336】
データ出力部308は、D315に格納される全てのデータについて処理が完了したか否かを判定する(S604)。
【0337】
本実施形態では、データベース検索処理では1時間単位に圧縮された圧縮データを検索し、データ解凍/並び替え処理では1時間単位に圧縮された圧縮データを解凍して1秒単位のデータを生成し、以後、ストリームデータ処理、切り出し処理、出力データ生成処理では1秒単位のデータについて処理を実行する。なお、出力データ生成処理では、1秒単位でデータを処理するが、$stepで指定した単位でデータを出力する。
【0338】
これによって、プラント102において異常が発生した場合に、当該異常の検索精度を落とすことなく、高速に検索することができ、また、異常発生の原因を特定するためのデータ範囲を出力することが可能となる。
【0339】
図21は、本実施形態において、特徴値検索処理を実行する場合のクエリ155及びSQL310の一例を示す説明図である。
【0340】
特徴値検索処理を実行する場合、クエリ155にmeta_search句が追加される点が異なる。これによって、DATテーブル208に含まれるMaxValカラム2084及びMinValカラム2085を用いた検索が可能となる。
【0341】
図21に示すようにクエリ例4(700)には、MaxValカラム2084の値が「100」より大きいデータが検索の対象となる。
【0342】
データ検索モジュール157は、meta_search句が含まれるクエリ155を受け付けた場合、特徴値検索用SQL生成部302は、図21に示すようなSQL例4−1(701)を生成し、SQL例4−1(701)が実行された後に、SQL例4−2(702)を生成する。
【0343】
SQL例4−1(701)は、時刻切り出し用SQLであり、特徴値に一致するデータの時刻(Datetime)を抽出するためのSQLである。
【0344】
SQL例4−2(702)は、特徴値検索用SQLであり、SQL例4−1(701)によって抽出されたDatetimeの範囲において、データベース154の検索を実行するためのSQLである。
【0345】
SQL例4−2(702)は、SQL例1(352)と同様のSQL310であるが、SQL例1(352)と比較して、SQL例4−2(702)ではSQL例4−1(701)の実行によって検索範囲が限定されるため、検索処理の時間を大幅に短縮することが可能となる。
【0346】
例えば、異常値があらかじめわかっている場合は、当該異常値を用いて検索処理を実行することによって、全検索する場合に比べて検索するデータの範囲を絞り込むことが可能になるため、処理時間を短縮することができる。
【0347】
また、図21のクエリ例4において、ユーザは必ずしもmeta_serach句を指定する必要はない。一般に閾値判定において、ある閾値を超過した時系列データは、最大値が当該閾値を超過したパケット集合に含まれている。また同様に、ある閾値を下回る時系列データは、最小値が当該閾値を下回るパケット集合に含まれている。このようなクエリ変換規則を管理することにより、meta_search句を自動生成することができる。具体的には、図21のクエリ例4において、where_condition句においてgreaterthan句と閾値が指定されている場合、meta_seatch句において最大値が閾値を超過する句としてMaxVal>閾値を自動付与する。またwhere_condition句においてlessthan句と閾値が指定されている場合、meta_seatch句において最大値が閾値を超過する句としてMinVal<閾値を自動付与する。このようなクエリ変換規則は、システムにおいてあらかじめ登録しておいてもよいし、ユーザが後で登録可能にしておいてもよい。
【0348】
図22は、本実施形態において、特徴値検索用のSQL310を生成するためのSQLテンプレートを示す説明図である。
【0349】
特徴値検索用SQL生成部302は、時刻切り出し用SQLテンプレート710及び特徴値検索用SQLテンプレート711を保持する。
【0350】
時刻切り出し用SQLテンプレート710は、特徴値検索を実行する場合のSQL310を生成するためのテンプレートであり、特徴値に一致するデータが含まれる圧縮データの時刻を抽出するためのSQLである。
【0351】
具体的には、IDカラム2072とIDカラム2082とが同一であるSIDテーブル207とDATテーブル208とを組み合わせたテーブルから、時刻(Datetime)を所定の条件に基づいて検索するSQLであることを示す。
【0352】
所定の条件は、where句以下に定義されている。すなわち、データを時間順に並び替え、指定されたセンサ名、指定された特徴値及び指定された時間区間に一致するデータを抽出することが定義されている。
【0353】
特徴値検索用SQLテンプレート711は、特徴値検索を実行する場合のSQL310を生成するためのテンプレートであり、時刻切り出し用SQLテンプレート710を用いて生成されたSQLによって抽出された時刻範囲において、圧縮データを検索するためのSQLである。
【0354】
図22に示す例では、IDカラム2072とIDカラム2082とが同一であるSIDテーブル207とDATテーブル208とを組み合わせたテーブルから、時刻(Datetime)、センサ名(SID.Name)及び圧縮データ(DAT.CDATA)を所定の条件に基づいて検索するSQLであることを示す。
【0355】
所定の条件は、where句以下に定義される。すなわち、データを時間順に並び替え、指定されたセンサ名及び指定された時間区間に一致するデータを取得することが定義されている。
【0356】
図23は、本実施形態の特徴値検索用SQL生成部302によって実行される処理の一例を説明するフローチャートである。
【0357】
特徴値検索用SQL生成部302は、グローバル変数309を用いて、「$meta_signal」及び「$meta_cond」を生成する(S720)。具体的には、特徴値検索用SQL生成部302は、グローバル変数309に含まれる「$meta」を用いて、$meta分解処理730を実行する。すなわち、特徴値検索用SQL生成部302は、「$meta」を「$meta_signal」及び「$meta_cond」に分解する。
【0358】
特徴値検索用SQL生成部302は、ワーク用の変数$dt_tmpを定義する(S7201)。
【0359】
特徴値検索用SQL生成部302は、時刻切り出し用SQLを生成する(S721)。
【0360】
具体的には、まず、特徴値検索用SQL生成部302は、「$meta_start」=「$start」と設定し、さらに、分及び秒単位の値を「0」に初期化する。また、特徴値検索用SQL生成部302は、「$meta_end」=「$end」と設定する。次に、特徴値検索用SQL生成部302は、「$meta_signal」、「$meta_cond」、「$meta_start」及び「$meta_end」を時刻切り出し用SQLテンプレート710に代入して、時刻切り出し用SQLを生成する。
【0361】
特徴値検索用SQL生成部302は、時刻切り出し用SQLをデータベース154に対して発行する(S722)。
【0362】
特徴値検索用SQL生成部302は、時刻切り出し用SQLを実行したデータベース154から実行結果を取得し、$dt_tmpへ格納する(S723)。具体的には、時刻切り出し用SQLにおいて指定された条件に一致する時刻データが実行結果として取得され、$dt_tmpへ格納される。
【0363】
特徴値検索用SQL生成部302は、$dt_tmpに格納された1行分のデータがNullである否かを判定する(S724)。すなわち、全ての実行結果について処理が終了したか否かが判定される。
【0364】
$dt_tmpに格納された1行分のデータがNullであると判定された場合、特徴値検索用SQL生成部302は、$db_input=$inputとして$db_inputを生成し、さらに、特徴値検索用SQLを生成し(S725)、処理を終了する。具体的には、特徴値検索用SQL生成部302は、特徴値検索用SQLテンプレート711に「$db_input」及び「$db_dtset」を代入することによって特徴値検索用SQLを生成する。
【0365】
$dt_tmpに格納された1行分のデータがNullでないと判定された場合、特徴値検索用SQL生成部302は、時刻$dt_tmpのセンサデータが格納されている、時系列データブロックの開始時刻、及び、終了時刻、すなわち、「$db_start」及び「$db_end」を算出する(S726)。
【0366】
具体的には、「$db_start」については、特徴値検索用SQL生成部302は「$db_start=$dt_tmp−$range」を計算し、さらに、当該計算結果の分及び秒単位の値を「0」に初期化される。また、「$db_end」については、「$db_end=$db_start+3599」を計算した値が格納される。「3599」を加算する理由は、本実施形態では1時間単位でデータを圧縮してデータベースへ格納しているためである。
【0367】
特徴値検索用SQL生成部302は、S726で算出された「$db_start」及び「$db_end」を用いて、「$db_dtset」を生成し(S727)、S723に戻り同様の処理を実行する。具体的には、特徴値検索用SQL生成部302は、「$db_start」及び「$db_end」を用いて、$db_dtset生成処理を実行する。
【0368】
図24は、本実施形態において、データ検索モジュール157によって実行される処理を並列に実行する場合を説明するフローチャートである。
【0369】
CPU121は、複数のコアを備えており、図10に示すように、DB検索3204の実行と同時に、各プロセス1〜4においてそれぞれの処理を実行することも可能である。
【0370】
S3200〜S3202は、図9のS320〜S323及びS327と同一の処理であるため説明を省略する。
【0371】
データ検索モジュール157は、プロセス1〜4を起動し(S3203)、各プロセスでそれぞれの処理を実行する(S3204〜S3208)。
【0372】
具体的には、プロセス1ではデータ解凍/並び替え処理が実行され、プロセス2ではストリームデータ処理が実行され、プロセス3では切り出し処理が実行され、また、プロセス4では出力データ生成処理が実行される。
【0373】
これによって、各処理の結果をファイルA312〜ファイルD315に出力するのではなく、一つのプロセスの出力結果を他のプロセスに受け渡すことによって高速に処理することが可能となる。
【0374】
本実施形態によれば、時系列データを所定の時間単位に圧縮した圧縮データをデータベースに格納することによって、データベースに格納されるデータ量を削減できる。また、一つのクエリを受け付けることによって、圧縮データ検索のためのSQLと、解凍されたデータを処理するCQLとを生成できる。さらに、CQLにおいて指定された条件を満たす範囲と、当該範囲の前後の区間とをあわせた切り出し範囲を出力することによって、異常が発生した箇所だけではなく、異常が発生した前後の時系列データも出力することができ、異常箇所及び異常原因の特定のための追跡が容易になる。
【0375】
これによって、センタサーバ104のディスク容量の増加を抑制するとともに、プラントにおける異常原因を解析することが容易となる。
【0376】
さらに、特徴値とともに圧縮データをデータベース154に格納し、当該特徴値を用いて検索を実行することによって、処理時間を削減することが可能となる。
【符号の説明】
【0377】
100 センサ
101 データ収集装置
102 プラント
103 ネットワーク
104 センタサーバ
105 データセンタ
106 データ表示端末
107 プラント監視サイト
121 CPU
122 メモリ
123 HDD
124 ディスプレイ
125 ネットワークインタフェース
126 マウス
127 キーボード
128 電源装置
150 ユーザ
151 IDカラム
153 データローダモジュール
154 データベース
155 クエリ
156 検索結果ファイル
157 データ検索モジュール
158 OS
203 データ集約部
204 特徴値抽出部
205 データ圧縮部
206 データ挿入部
207 SIDテーブル
208 DATテーブル
300 クエリ解析部
301 SQL生成部
302 特徴値検索用SQL生成部
303 CQL生成部
304 DB検索部
305 データ解凍/並び替え処理部
306 ストリームデータ処理部
307 切り出し処理部
308 データ出力部
309 グローバル変数
310 SQL
311 CQL
312 ファイルA
313 ファイルB
314 ファイルC
315 ファイルD
370 SQLテンプレート
380 CQLテンプレート
500 入力制御部
501 入力キュー
502 ストリームデータ処理エンジン
503 ユーザ定義関数
504 出力キュー
505 出力制御部
551 出力結果
552 切り出し範囲
553 前方オフセット
554 条件成立範囲
555 後方オフセット
556 結合オフセット
710 時刻切り出し用SQLテンプレート
711 特徴値検索用SQLテンプレート

【特許請求の範囲】
【請求項1】
プロセッサと、前記プロセッサに接続されるメモリとを備え、データベースを管理する計算機におけるデータベース管理方法であって、
前記データベースは、所定の条件に基づいて圧縮された複数の圧縮データを格納し、
前記方法は、
前記計算機に接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記計算機が、前記受け付けたクエリを解析する第1のステップと、
前記計算機が、前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第1の問い合わせを生成する第2のステップと、
前記計算機が、前記受け付けたクエリの解析結果に基づいて、前記第1の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の時系列データに対する検索を実行するための第2の問い合わせを生成する第3のステップと、
前記計算機が、前記データベースに前記第1の問い合わせを発行して、前記データベースから前記第1の問い合わせの応答結果として一つ以上の前記圧縮データを取得する第4のステップと、
前記計算機が、前記第1の問い合わせに対する応答結果として取得された一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得する第5のステップと、
前記計算機が、前記取得された複数の時系列データに対して前記第2の問い合わせを実行する第6のステップと、
前記計算機が、前記第2の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する第7のステップと、
前記計算機が、前記第7のステップにおいて抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成する第8のステップと、を含むことを特徴とするデータベース管理方法。
【請求項2】
前記圧縮データは、前記複数の時系列データが所定の時間単位に圧縮された圧縮データであり、
前記第2の問い合わせは、前記複数の時系列データから所定の閾値の条件を満たす第1のデータ範囲を検索するための問い合わせであり、
前記第6のステップは、前記計算機が、前記第1のデータ範囲に含まれる前記時系列データにフラグを付与し、
前記第7のステップは、前記計算機が、前記時系列データに付与されたフラグに基づいて、前記第1のデータ範囲を含む第2のデータ範囲を抽出することを特徴とする請求項1に記載のデータベース管理方法。
【請求項3】
前記第2のデータ範囲は、
前記第1のデータ範囲の時刻が最も過去の前記時系列データから第1の時間さかのぼった範囲に含まれる前記時系列データを抽出する第3のデータ範囲と、
前記第1のデータ範囲の時刻が最新の前記時系列データから第2の時間進んだ範囲に含まれる前記時系列データを抽出する第4のデータ範囲と、を含むことを特徴とする請求項2に記載のデータベース管理方法。
【請求項4】
前記第8のステップは、前記第2のデータ範囲に含まれる時系列データのうち、所定の時間間隔の前記時系列データを抽出するステップを含むことを特徴とする請求項2に記載のデータベース管理方法。
【請求項5】
前記データベースは、検索キーとなる特徴情報を付加した前記圧縮データを格納し、
前記第1の問い合わせは、
前記特徴情報を含み、
当該第1の問い合わせに含まれる特徴情報に一致する前記特徴情報が付加された前記圧縮データを検索するための問い合わせであることを特徴とする請求項1に記載のデータベース管理方法。
【請求項6】
前記特徴情報は、前記圧縮データが圧縮される前の複数の時系列データにおける最大値、最小値、平均値、分散値又は周波数スペクトル上の特定点の少なくともいずれかであることを特徴とする請求項5に記載のデータベース管理方法。
【請求項7】
前記第1の問い合わせは、前記データベースから前記圧縮データを検索するためのSQLであり、
前記第2の問い合わせは、前記時系列データから所定のデータを抽出するためのCQLであることを特徴とする請求項1に記載のデータベース管理方法。
【請求項8】
プロセッサと、前記プロセッサに接続されるメモリとを備え、データベースを管理する計算機であって、
前記データベースは、所定の条件に基づいて圧縮された複数の圧縮データを格納し、
前記計算機は、
前記計算機に接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記受け付けたクエリを解析し、
前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第1の問い合わせを生成し、
前記受け付けたクエリの解析結果に基づいて、前記第1の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の時系列データに対する検索を実行するための第2の問い合わせを生成し、
前記データベースに前記第1の問い合わせを発行して、前記データベースから前記第1の問い合わせの応答結果として一つ以上の前記圧縮データを取得し、
前記第1の問い合わせに対する応答結果として取得された一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得し、
前記取得された複数の時系列データに対して前記第2の問い合わせを実行し、
前記第2の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出し、
前記抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成することを特徴とする計算機。
【請求項9】
前記圧縮データは、前記複数の時系列データが所定の時間単位に圧縮された圧縮データであり、
前記第2の問い合わせは、前記複数の時系列データから所定の閾値の条件を満たす第1のデータ範囲を検索するための問い合わせであり、
前記計算機は、
前記取得された複数の時系列データに対して前記第2の問い合わせを実行する場合に、前記第1のデータ範囲に含まれる前記時系列データにフラグを付与し、
前記第2の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する場合に、前記時系列データに付与されたフラグに基づいて、前記第1のデータ範囲を含む第2のデータ範囲を抽出することを特徴とする請求項8に記載の計算機。
【請求項10】
前記第2のデータ範囲は、
前記第1のデータ範囲の時刻が最も過去の前記時系列データから第1の時間さかのぼった範囲に含まれる前記時系列データを抽出する第3のデータ範囲と、
前記第1のデータ範囲の時刻が最新の前記時系列データから第2の時間進んだ範囲に含まれる前記時系列データを抽出する第4のデータ範囲と、を含むことを特徴とする請求項9に記載の計算機。
【請求項11】
前記データベースは、検索キーとなる特徴情報を付加した前記圧縮データを格納し、
前記第1の問い合わせは、
前記特徴情報を含み、
当該第1の問い合わせに含まれる特徴情報に一致する前記特徴情報が付加された前記圧縮データを検索するための問い合わせであることを特徴とする請求項8に記載の計算機。
【請求項12】
前記特徴情報は、前記圧縮データが圧縮される前の複数の時系列データにおける最大値、最小値、平均値、又は分散値の少なくともいずれかであることを特徴とする請求項11に記載の計算機。
【請求項13】
前記第1の問い合わせは、前記データベースから前記圧縮データを検索するためのSQLであり、
前記第2の問い合わせは、前記時系列データから所定のデータを抽出するためのCQLであることを特徴とする請求項8に記載の計算機。
【請求項14】
観測対象の物理量を測定するセンサと、前記センサが測定した前記物理量を時系列データとして収集する計算機と、前記第1の計算機から前記時系列データをデータベースに格納する管理サーバと、を備えるセンサノードシステムにおいて、
前記計算機は、第1のプロセッサと、前記第1のプロセッサに接続される第1のメモリとを備え、
前記管理サーバは、第2のプロセッサと、前記第2のプロセッサに接続される第2のメモリとを備え、
前記計算機と前記管理サーバとはネットワークを介して接続され、
前記データベースは、所定の条件に基づいて前記時系列データが圧縮された複数の圧縮データを格納し、
前記管理サーバは、
前記管理サーバに前記ネットワークを介して接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記受け付けたクエリを解析し、
前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第1の問い合わせを生成し、
前記受け付けたクエリの解析結果に基づいて、前記第1の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の前記時系列データに対する検索を実行するための第2の問い合わせを生成し、
前記データベースに前記第1の問い合わせを発行して、前記データベースから前記第1の問い合わせの応答結果として一つ以上の前記圧縮データを取得し、
前記第1の問い合わせに対する応答結果として取得された一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得し、
前記取得された複数の時系列データに対して前記第2の問い合わせを実行し、
前記第2の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出し、
前記抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成することを特徴とするセンサネットワークシステム。
【請求項15】
前記圧縮データは、前記複数の時系列データが所定の時間単位に圧縮された圧縮データであり、
前記第2の問い合わせは、前記複数の時系列データから所定の閾値の条件を満たす第1のデータ範囲を検索するための問い合わせであり、
前記管理サーバは、
前記取得された複数の時系列データに対して前記第2の問い合わせを実行する場合に、前記第1のデータ範囲に含まれる前記時系列データにフラグを付与し、
前記第2の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する場合に、前記時系列データに付与されたフラグに基づいて、前記第1のデータ範囲を含む第2のデータ範囲を抽出することを特徴とする請求項14に記載のセンサネットワークシステム。
【請求項16】
前記第2のデータ範囲は、
前記第1のデータ範囲の時刻が最も過去の前記時系列データから第1の時間さかのぼった範囲に含まれる前記時系列データを抽出する第3のデータ範囲と、
前記第1のデータ範囲の時刻が最新の前記時系列データから第2の時間進んだ範囲に含まれる前記時系列データを抽出する第4のデータ範囲と、を含むことを特徴とする請求項15に記載のセンサネットワークシステム。
【請求項17】
前記データベースは、検索キーとなる特徴情報を付加した前記圧縮データを格納し、
前記第1の問い合わせは、
前記特徴情報を含み、
当該第1の問い合わせに含まれる特徴情報に一致する前記特徴情報が付加された前記圧縮データを検索するための問い合わせであることを特徴とする請求項14に記載のセンサネットワークシステム。
【請求項18】
前記特徴情報は、前記圧縮データが圧縮される前の複数の時系列データにおける最大値、最小値、平均値、又は分散値の少なくともいずれかであることを特徴とする請求項17に記載のセンサネットワークシステム。
【請求項19】
前記第1の問い合わせは、前記データベースから前記圧縮データを検索するためのSQLであり、
前記第2の問い合わせは、前記時系列データから所定のデータを抽出するためのCQLであることを特徴とする請求項14に記載のセンサネットワークシステム。
【請求項20】
プロセッサと、前記プロセッサに接続されるメモリとを備え、データベースを管理する計算機におけるデータベース検索プログラムであって、
前記データベースは、所定の条件に基づいて圧縮された複数の圧縮データを格納し、
前記プログラムは、
前記計算機に接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記受け付けたクエリを解析する手順と、
前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第1の問い合わせを生成する手順と、
前記受け付けたクエリの解析結果に基づいて、前記第1の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の時系列データに対する検索を実行するための第2の問い合わせを生成する手順と、
前記データベースに前記第1の問い合わせを発行して、前記データベースから前記第1の問い合わせの応答結果として一つ以上の前記圧縮データを取得する手順と、
前記第1の問い合わせに対する応答結果として取得された前記一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得する手順と、
前記取得された複数の時系列データに対して前記第2の問い合わせを実行する手順と、
前記第2の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する手順と、
前記抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成する手順と、を前記計算機に実行させることを特徴とするデータベース検索プログラム。
【請求項21】
時系列データに対して時系列処理を行うことで特徴量を生成し、時系列を時系列ブロックに分割し、該特徴量を検索キーとなるメタ情報として時系列ブロックとともに時系列蓄積装置に格納する時系列データ格納手段と、
ユーザからの問い合わせに応じて該特徴量を検索キーに時系列ブロックを検索する第一の問合せと、時系列ブロック内の時系列を検索する第二の問い合わせを生成する手段と、
第一の問い合わせにより該時系列ブロックを検索する第一の検索手段と、
得られた時系列ブロックを逐次第二の問い合わせに基づき時系列処理を行って時系列を検索し、問合せ結果を出力する第二の検索手段と、を有することを特徴とする時系列データ管理方法。
【請求項22】
利用者の最も利用する検索期間を統計処理により生成することにより前記時系列ブロックの分割範囲を得る請求項21に記載の時系列データ管理方法。
【請求項23】
時系列の特徴変化が起こる最小期間を統計処理により生成することにより前記時系列ブロックの分割範囲を得る請求項21に記載の時系列データ管理方法。
【請求項24】
前記時系列データ格納手段では時系列ブロックを圧縮する手段を、前記第二の検索手段では圧縮された時系列ブロックを展開する手段を備えることを特徴とする請求項21に記載の時系列データ管理方法。
【請求項25】
前記ユーザからの問い合わせが閾値超過ないし未満判定の場合、前記第一の検索手段で最大値ないし最小値との超過判定ないし未満判定で時系列ブロックを絞り込むことを特徴とする請求項21に記載の時系列データ管理方法。
【請求項26】
時系列データに対して時系列処理を行うことで特徴量を生成し、時系列を時系列ブロックに分割し、該特徴量を検索キーとなるメタ情報として時系列ブロックとともに時系列蓄積装置に格納する時系列データ格納手段と、
ユーザからの問い合わせに応じて該特徴量を検索キーに時系列ブロックを検索する第一の問合せと、時系列ブロック内の時系列を検索する第二の問い合わせを生成する手段と、
第一の問い合わせにより該時系列ブロックを検索する第一の検索手段と、
得られた時系列ブロックを逐次第二の問い合わせに基づき時系列処理を行って時系列を検索し、問合せ結果を出力する第二の検索手段と、を有することを特徴とする計算機。
【請求項27】
リアルタイムに到来する時系列データを所定期間メモリ上に蓄積し、時系列解析を行うことで前記特徴量を生成するストリームデータ処理エンジンを備えることを特徴とする請求項26に記載の計算機。
【請求項28】
前記第二の検索手段において、移動平均、区間抽出、間引き処理の少なくともいずれかを行うストリームデータ処理エンジンを備えることを特徴とする請求項26に記載の計算機。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5A】
image rotate

【図5B】
image rotate

【図5C】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8A】
image rotate

【図8B】
image rotate

【図9】
image rotate

【図10A】
image rotate

【図10B】
image rotate

【図11A】
image rotate

【図11B】
image rotate

【図12A】
image rotate

【図12B】
image rotate

【図13】
image rotate

【図14A】
image rotate

【図14B】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18A】
image rotate

【図18B】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate