(57)【特許請求の範囲】
【請求項１】
プロセッサと、前記プロセッサに接続されるメモリとを備え、データベースを管理する計算機におけるデータベース管理方法であって、
前記データベースは、所定の条件に基づいて圧縮された複数の圧縮データを格納し、
前記方法は、
前記計算機に接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記計算機が、前記受け付けたクエリを解析する第１のステップと、
前記計算機が、前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第１の問い合わせを生成する第２のステップと、
前記計算機が、前記受け付けたクエリの解析結果に基づいて、前記第１の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の時系列データに対する検索を実行するための第２の問い合わせを生成する第３のステップと、
前記計算機が、前記データベースに前記第１の問い合わせを発行して、前記データベースから前記第１の問い合わせの応答結果として一つ以上の前記圧縮データを取得する第４のステップと、
前記計算機が、前記第１の問い合わせに対する応答結果として取得された一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得する第５のステップと、
前記計算機が、前記取得された複数の時系列データに対して前記第２の問い合わせを実行する第６のステップと、
前記計算機が、前記第２の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する第７のステップと、
前記計算機が、前記第７のステップにおいて抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成する第８のステップと、を含むことを特徴とするデータベース管理方法。
【請求項２】
前記圧縮データは、前記複数の時系列データが所定の時間単位に圧縮された圧縮データであり、
前記第２の問い合わせは、前記複数の時系列データから所定の閾値の条件を満たす第１のデータ範囲を検索するための問い合わせであり、
前記第６のステップは、前記計算機が、前記第１のデータ範囲に含まれる前記時系列データにフラグを付与し、
前記第７のステップは、前記計算機が、前記時系列データに付与されたフラグに基づいて、前記第１のデータ範囲を含む第２のデータ範囲を抽出することを特徴とする請求項１に記載のデータベース管理方法。
【請求項３】
前記第２のデータ範囲は、
前記第１のデータ範囲の時刻が最も過去の前記時系列データから第１の時間さかのぼった範囲に含まれる前記時系列データを抽出する第３のデータ範囲と、
前記第１のデータ範囲の時刻が最新の前記時系列データから第２の時間進んだ範囲に含まれる前記時系列データを抽出する第４のデータ範囲と、を含むことを特徴とする請求項２に記載のデータベース管理方法。
【請求項４】
前記第８のステップは、前記第２のデータ範囲に含まれる時系列データのうち、所定の時間間隔の前記時系列データを抽出するステップを含むことを特徴とする請求項２に記載のデータベース管理方法。
【請求項５】
前記データベースは、検索キーとなる特徴情報を付加した前記圧縮データを格納し、
前記第１の問い合わせは、
前記特徴情報を含み、
当該第１の問い合わせに含まれる特徴情報に一致する前記特徴情報が付加された前記圧縮データを検索するための問い合わせであることを特徴とする請求項１に記載のデータベース管理方法。
【請求項６】
前記特徴情報は、前記圧縮データが圧縮される前の複数の時系列データにおける最大値、最小値、平均値、分散値又は周波数スペクトル上の特定点の少なくともいずれかであることを特徴とする請求項５に記載のデータベース管理方法。
【請求項７】
前記第１の問い合わせは、前記データベースから前記圧縮データを検索するためのＳＱＬであり、
前記第２の問い合わせは、前記時系列データから所定のデータを抽出するためのＣＱＬであることを特徴とする請求項１に記載のデータベース管理方法。
【請求項８】
プロセッサと、前記プロセッサに接続されるメモリとを備え、データベースを管理する計算機であって、
前記データベースは、所定の条件に基づいて圧縮された複数の圧縮データを格納し、
前記計算機は、
前記計算機に接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記受け付けたクエリを解析し、
前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第１の問い合わせを生成し、
前記受け付けたクエリの解析結果に基づいて、前記第１の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の時系列データに対する検索を実行するための第２の問い合わせを生成し、
前記データベースに前記第１の問い合わせを発行して、前記データベースから前記第１の問い合わせの応答結果として一つ以上の前記圧縮データを取得し、
前記第１の問い合わせに対する応答結果として取得された一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得し、
前記取得された複数の時系列データに対して前記第２の問い合わせを実行し、
前記第２の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出し、
前記抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成することを特徴とする計算機。
【請求項９】
前記圧縮データは、前記複数の時系列データが所定の時間単位に圧縮された圧縮データであり、
前記第２の問い合わせは、前記複数の時系列データから所定の閾値の条件を満たす第１のデータ範囲を検索するための問い合わせであり、
前記計算機は、
前記取得された複数の時系列データに対して前記第２の問い合わせを実行する場合に、前記第１のデータ範囲に含まれる前記時系列データにフラグを付与し、
前記第２の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する場合に、前記時系列データに付与されたフラグに基づいて、前記第１のデータ範囲を含む第２のデータ範囲を抽出することを特徴とする請求項８に記載の計算機。
【請求項１０】
前記第２のデータ範囲は、
前記第１のデータ範囲の時刻が最も過去の前記時系列データから第１の時間さかのぼった範囲に含まれる前記時系列データを抽出する第３のデータ範囲と、
前記第１のデータ範囲の時刻が最新の前記時系列データから第２の時間進んだ範囲に含まれる前記時系列データを抽出する第４のデータ範囲と、を含むことを特徴とする請求項９に記載の計算機。
【請求項１１】
前記データベースは、検索キーとなる特徴情報を付加した前記圧縮データを格納し、
前記第１の問い合わせは、
前記特徴情報を含み、
当該第１の問い合わせに含まれる特徴情報に一致する前記特徴情報が付加された前記圧縮データを検索するための問い合わせであることを特徴とする請求項８に記載の計算機。
【請求項１２】
前記特徴情報は、前記圧縮データが圧縮される前の複数の時系列データにおける最大値、最小値、平均値、又は分散値の少なくともいずれかであることを特徴とする請求項１１に記載の計算機。
【請求項１３】
前記第１の問い合わせは、前記データベースから前記圧縮データを検索するためのＳＱＬであり、
前記第２の問い合わせは、前記時系列データから所定のデータを抽出するためのＣＱＬであることを特徴とする請求項８に記載の計算機。
【請求項１４】
観測対象の物理量を測定するセンサと、前記センサが測定した前記物理量を時系列データとして収集する計算機と、前記計算機から前記時系列データをデータベースに格納する管理サーバと、を備えるセンサノードシステムにおいて、
前記計算機は、第１のプロセッサと、前記第１のプロセッサに接続される第１のメモリとを備え、
前記管理サーバは、第２のプロセッサと、前記第２のプロセッサに接続される第２のメモリとを備え、
前記計算機と前記管理サーバとはネットワークを介して接続され、
前記データベースは、所定の条件に基づいて前記時系列データが圧縮された複数の圧縮データを格納し、
前記管理サーバは、
前記管理サーバに前記ネットワークを介して接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記受け付けたクエリを解析し、
前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第１の問い合わせを生成し、
前記受け付けたクエリの解析結果に基づいて、前記第１の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の前記時系列データに対する検索を実行するための第２の問い合わせを生成し、
前記データベースに前記第１の問い合わせを発行して、前記データベースから前記第１の問い合わせの応答結果として一つ以上の前記圧縮データを取得し、
前記第１の問い合わせに対する応答結果として取得された一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得し、
前記取得された複数の時系列データに対して前記第２の問い合わせを実行し、
前記第２の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出し、
前記抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成することを特徴とするセンサネットワークシステム。
【請求項１５】
前記圧縮データは、前記複数の時系列データが所定の時間単位に圧縮された圧縮データであり、
前記第２の問い合わせは、前記複数の時系列データから所定の閾値の条件を満たす第１のデータ範囲を検索するための問い合わせであり、
前記管理サーバは、
前記取得された複数の時系列データに対して前記第２の問い合わせを実行する場合に、前記第１のデータ範囲に含まれる前記時系列データにフラグを付与し、
前記第２の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する場合に、前記時系列データに付与されたフラグに基づいて、前記第１のデータ範囲を含む第２のデータ範囲を抽出することを特徴とする請求項１４に記載のセンサネットワークシステム。
【請求項１６】
前記第２のデータ範囲は、
前記第１のデータ範囲の時刻が最も過去の前記時系列データから第１の時間さかのぼった範囲に含まれる前記時系列データを抽出する第３のデータ範囲と、
前記第１のデータ範囲の時刻が最新の前記時系列データから第２の時間進んだ範囲に含まれる前記時系列データを抽出する第４のデータ範囲と、を含むことを特徴とする請求項１５に記載のセンサネットワークシステム。
【請求項１７】
前記データベースは、検索キーとなる特徴情報を付加した前記圧縮データを格納し、
前記第１の問い合わせは、
前記特徴情報を含み、
当該第１の問い合わせに含まれる特徴情報に一致する前記特徴情報が付加された前記圧縮データを検索するための問い合わせであることを特徴とする請求項１４に記載のセンサネットワークシステム。
【請求項１８】
前記特徴情報は、前記圧縮データが圧縮される前の複数の時系列データにおける最大値、最小値、平均値、又は分散値の少なくともいずれかであることを特徴とする請求項１７に記載のセンサネットワークシステム。
【請求項１９】
前記第１の問い合わせは、前記データベースから前記圧縮データを検索するためのＳＱＬであり、
前記第２の問い合わせは、前記時系列データから所定のデータを抽出するためのＣＱＬであることを特徴とする請求項１４に記載のセンサネットワークシステム。
【請求項２０】
プロセッサと、前記プロセッサに接続されるメモリとを備え、データベースを管理する計算機におけるデータベース検索プログラムであって、
前記データベースは、所定の条件に基づいて圧縮された複数の圧縮データを格納し、
前記プログラムは、
前記計算機に接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記受け付けたクエリを解析する手順と、
前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第１の問い合わせを生成する手順と、
前記受け付けたクエリの解析結果に基づいて、前記第１の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の時系列データに対する検索を実行するための第２の問い合わせを生成する手順と、
前記データベースに前記第１の問い合わせを発行して、前記データベースから前記第１の問い合わせの応答結果として一つ以上の前記圧縮データを取得する手順と、
前記第１の問い合わせに対する応答結果として取得された前記一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得する手順と、
前記取得された複数の時系列データに対して前記第２の問い合わせを実行する手順と、
前記第２の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する手順と、
前記抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成する手順と、を前記計算機に実行させることを特徴とするデータベース検索プログラム。
【請求項２１】
時系列データに対して時系列処理を行うことで特徴量を生成し、時系列を時系列ブロックに分割し、該特徴量を検索キーとなるメタ情報として時系列ブロックとともに時系列蓄積装置に格納する第１のステップと、
ユーザからの問い合わせに応じて該特徴量を検索キーに時系列ブロックを検索する第一の問合せと、時系列ブロック内の時系列を検索する第二の問い合わせを生成する第２のステップと、
第一の問い合わせにより該時系列ブロックを検索する第３のステップと、
得られた時系列ブロックを逐次第二の問い合わせに基づき時系列処理を行って時系列を検索し、問合せ結果を出力する第４のステップと、を有することを特徴とする時系列データ管理方法。
【請求項２２】
利用者の最も利用する検索期間を統計処理により生成することにより前記時系列ブロックの分割範囲を得る請求項２１に記載の時系列データ管理方法。
【請求項２３】
時系列の特徴変化が起こる最小期間を統計処理により生成することにより前記時系列ブロックの分割範囲を得る請求項２１に記載の時系列データ管理方法。
【請求項２４】
前記第１のステップは、時系列ブロックを圧縮するステップを含み、
前記第４のステップは、圧縮された時系列ブロックを展開するステップを含むことを特徴とする請求項２１に記載の時系列データ管理方法。
【請求項２５】
前記ユーザからの問い合わせが閾値超過ないし未満判定の場合、前記第３のステップにおいて最大値ないし最小値との超過判定ないし未満判定で時系列ブロックを絞り込むことを特徴とする請求項２１に記載の時系列データ管理方法。
【請求項２６】
時系列データに対して時系列処理を行うことで特徴量を生成し、時系列を時系列ブロックに分割し、該特徴量を検索キーとなるメタ情報として時系列ブロックとともに時系列蓄積装置に格納する時系列データ格納手段と、
ユーザからの問い合わせに応じて該特徴量を検索キーに時系列ブロックを検索する第一の問合せと、時系列ブロック内の時系列を検索する第二の問い合わせを生成する手段と、
第一の問い合わせにより該時系列ブロックを検索する第一の検索手段と、
得られた時系列ブロックを逐次第二の問い合わせに基づき時系列処理を行って時系列を検索し、問合せ結果を出力する第二の検索手段と、を有することを特徴とする計算機。
【請求項２７】
リアルタイムに到来する時系列データを所定期間メモリ上に蓄積し、時系列解析を行うことで前記特徴量を生成するストリームデータ処理エンジンを備えることを特徴とする請求項２６に記載の計算機。
【請求項２８】
前記第二の検索手段において、移動平均、区間抽出、間引き処理の少なくともいずれかを行うストリームデータ処理エンジンを備えることを特徴とする請求項２６に記載の計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理を行うための計算機システム及びそのデータ処理方法に係り、特に、工場やプラントにおける設備等の予防保全を目的にして収集される大量のデータを処理するに適した計算機システム及びそのデータ処理方法に関する。
【背景技術】
【０００２】
火力発電プラントでは、数千にも及ぶセンサが施設の様々な部位に取りつけられている。それらセンサは、秒単位、又は、ミリ秒単位で計測結果を常時発信し続けており、プラント生涯に渡って発信されるデータ量は数百〜数十テラバイトと膨大なデータ量になると試算される。これら多年度にわたって日々刻々と送られてくるデータを管理するシステムでは、データベースに格納されるデータ量が膨大となるため、データベースのディスク容量の増加が課題となる。
【０００３】
一方、プラントにおいて異常が発生した場合に、プラントの管理者は、当該データベースに格納されたセンサ情報を解析して異常が発生した原因を早急に特定する必要がある。まず、異常な値を示すセンサデータ（信号）をビューア等に表示しながら、問題発生の原因を絞り込むべく、データベース上の膨大なデータに対して何度も検索クエリを発行することになるため、異常原因の特定まで時間がかかる。
【０００４】
これを解決する方法としては、例えば、特許文献１に記載されるように、センサ情報を圧縮してデータベースに格納することによって、ディスク容量の増加を解消することが可能である。また、異常原因の特定では、データベースに発行するクエリ数を削減することで異常原因の特定が短時間で行える。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−３５８１１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、前述した方法では、圧縮データを検索する場合、データを一旦何処かへ展開したのち、展開後のデータに対して検索を行う必要が生じるため検索速度が犠牲になるという問題があった。また、異常の原因を特定する場合に、センサ情報から異常箇所の検索のための検索クエリ、及び異常が発生した原因を特定するために異常箇所の追跡を行うための検索クエリを複数回にわけて発行する必要があった。したがって、発行されるクエリ数の増大と異常箇所の検索時間の増大という問題があった。
【０００７】
本発明は、前述した問題点に鑑みてなされた発明である。すなわち、データベースに格納されるデータ量を削減し、大量のデータの中から所望とするデータを効率よく検索することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の代表的な一例を示せば以下の通りである。すなわち、プロセッサと、前記プロセッサに接続されるメモリとを備え、データベースを管理する計算機におけるデータベース管理方法であって、前記データベースは、所定の条件に基づいて圧縮された複数の圧縮データを格納し、前記データベース管理方法は、前記計算機に接続されるクライアント計算機から前記データベースへのクエリを受け付けた場合に、前記計算機が、前記受け付けたクエリを解析する第１のステップと、前記計算機が、前記受け付けたクエリの解析結果に基づいて、前記データベースから一つ以上の前記圧縮データを検索するための第１の問い合わせを生成する第２のステップと、前記計算機が、前記受け付けたクエリの解析結果に基づいて、前記第１の問い合わせの応答結果である前記一つ以上の圧縮データから取得される複数の時系列データに対する検索を実行するための第２の問い合わせを生成する第３のステップと、前記計算機が、前記データベースに前記第１の問い合わせを発行して、前記データベースから前記第１の問い合わせの応答結果として一つ以上の前記圧縮データを取得する第４のステップと、前記計算機が、前記第１の問い合わせに対する応答結果として取得された一つ以上の圧縮データを解凍することによって前記複数の時系列データを取得する第５のステップと、前記計算機が、前記取得された複数の時系列データに対して前記第２の問い合わせを実行する第６のステップと、前記計算機が、前記第２の問い合わせに対する応答結果に基づいて、前記取得された複数の時系列データから所定のデータを抽出する第７のステップと、前記計算機が、前記第７のステップにおいて抽出された所定のデータから前記クライアント計算機に出力するためのデータを抽出し、出力結果を生成する第８のステップと、を含むことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、実質的なデータを維持しつつデータベースに格納されるデータ量を削減し、また、大量なデータから所望とするデータを効率よく検索することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明が適用されたセンサネットワークシステムの一実施形態における計算機システムの概要を説明するブロック図である。
【図２】本実施形態におけるセンタサーバのハードウェア構成を説明するブロック図である。
【図３】本実施形態におけるセンタネットワークシステムのソフトウェア構成を説明するブロック図である。
【図４】本実施形態におけるデータローダモジュール及びデータベースを説明するブロック図である。
【図５Ａ】本実施形態において、データローダモジュールによって実行される処理を説明するフローチャートである。
【図５Ｂ】本実施形態において、データローダモジュールによって実行されるデータロード処理を説明するフローチャートである。
【図５Ｃ】本実施形態において、データローダモジュールによって実行されるデータロード処理を説明するフローチャートである。
【図６】本実施形態におけるデータ検索モジュールを説明するブロック図である。
【図７】本実施形態において、データ検索モジュールによって出力されるデータの構造の一例を示す説明図である。
【図８Ａ】本実施形態におけるクエリ、ＳＱＬ及びＣＱＬの一例を示す説明図である
【図８Ｂ】本実施形態におけるクエリ、ＳＱＬ及びＣＱＬの一例を示す説明図である。
【図９】データ検索モジュールによって実行される処理の概要を説明するフローチャートである。
【図１０Ａ】本実施形態においてクエリ解析部によって切り出される文字列を示す説明図である。
【図１０Ｂ】本実施形態のクエリ解析部によって実行されるクエリ解析処理の一例を説明するフローチャートである。
【図１１Ａ】本実施形態におけるＳＱＬを生成するためのＳＱＬテンプレートを示す説明図である。
【図１１Ｂ】本実施形態のＳＱＬ生成部によって実行される処理の一例を説明するフローチャートである。
【図１２Ａ】本実施形態におけるＣＱＬを生成するためのＣＱＬテンプレートを示す説明図である。
【図１２Ｂ】本実施形態において、ＣＱＬ生成部によって実行される処理を説明するフローチャートである。
【図１３】本実施形態のＤＢ検索部によって実行されるＳＱＬ処理の一例を説明するフローチャートである。
【図１４Ａ】本実施形態のデータ解凍／並び替え処理部によって実行される処理の一例を説明するフローチャートである。
【図１４Ｂ】本実施形態のデータ解凍／並び替え処理部によって実行される処理の一例を説明するフローチャートである。
【図１５】本実施形態におけるストリームデータ処理部の構成例を示す説明図である。
【図１６】本実施形態のユーザ定義関数の一例を示す説明図である。
【図１７】本実施形態のユーザ定義関数に含まれる関数によって抽出された所定の区間のデータの一例を示す説明図である。
【図１８Ａ】本実施形態の切り出し処理部によって実行される処理の一例を説明するフローチャートである。
【図１８Ｂ】本実施形態の切り出し処理の詳細を説明するフローチャートである。
【図１９】本実施形態の切り出し処理部によって出力される出力結果の一例を示す説明図である。
【図２０】本発明の実施形態のデータ出力部によって実行される処理の一例を説明するフローチャートである。
【図２１】本実施形態において、特徴値検索処理を実行する場合のクエリ及びＳＱＬの一例を示す説明図である。
【図２２】本実施形態において、特徴値検索用のＳＱＬを生成するためのＳＱＬテンプレートを示す説明図である。
【図２３】本実施形態の特徴値検索用ＳＱＬ生成部によって実行される処理の一例を説明するフローチャートである。
【図２４】本実施形態において、データ検索モジュールによって実行される処理を並列に実行する場合を説明するフローチャートである。
【図２５】本発明の実施形態の特徴値の種類と生成方法を説明する図である。
【図２６】本発明の実施形態の時系列データブロックの時間幅を決定する方法を説明する図である。
【図２７】本実施形態のストリームデータ処理部によって実行される処理の一例を説明するフローチャートである。
【図２８】本実施形態の入力制御部によって実行される処理の一例を説明するフローチャートである。
【図２９】本実施形態の出力制御部によって実行される処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
図１は、本発明が適用されたセンサネットワークシステムの一実施形態における計算機システムの概要を説明するブロック図である。
【００１２】
センサネットワークシステムは、プラント１０２、データセンタ１０５及びプラント監視サイト１０７を備え、ネットワーク１０３を介して互いに接続される。ネットワーク１０３としては、例えば、専用線やいわゆるインターネットなどの広域網、又は、ＬＡＮなどのローカルなネットワークを用いてよい。
【００１３】
プラント１０２は、センサ１００及びデータ収集装置１０１を備える。センサ１００とデータ収集装置１０１とは互いに接続される。なお、接続方法は、直接接続してもよいし、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）又は無線ネットワーク等を介して接続されていてもよい。
【００１４】
センサ１００は、各種データを検出する。なお、センサ１００は目的とするデータを検出するために様々な種類のセンサが含まれる。
【００１５】
データ収集装置１０１は、センサ１００によって検出されたデータを収集し、ネットワーク１０３を介して、センサ１００から収集されたデータをデータセンタ１０５に送信する。データ収集装置１０１は、ＣＰＵ（図示省略）と、ＣＰＵに接続されるメモリ（図示省略）、ＣＰＵに接続されるネットワークインタフェース（図示省略）及び記憶媒体（図示省略）を備える。なお、データ収集装置１０１は、ディスプレイ又は入力装置等を備えてもよい。
【００１６】
データセンタ１０５は、複数のプラント１０２のデータ収集装置１０１から送信されるデータを一元管理するセンタサーバ１０４を備える。
【００１７】
センタサーバ１０４は、データ収集装置１０１から送信されたデータを格納する。またセンタサーバ１０４は、プラント監視サイト１０７等を介して管理者からの要求に基づいて、格納されたデータから所定のデータを取り出し、又は、取り出されたデータを解析して解析結果を出力する。
【００１８】
センタサーバ１０４の具体的な装置構成については、図２を用いて後述する。
【００１９】
プラント監視サイト１０７は、データセンタ１０５に各種問い合わせを行うためのデータ表示端末１０６を備える。
【００２０】
データ表示端末１０６は、ネットワーク１０３を介して、センタサーバ１０４に格納されたデータを監視又は閲覧する。データ表示端末１０６は、ＣＰＵ（図示省略）と、ＣＰＵに接続されるメモリ（図示省略）、ＣＰＵに接続されるネットワークインタフェース（図示省略）、記憶媒体（図示省略）、表示装置（図示省略）及び入力装置（図示省略）を備える。
【００２１】
図２は、本実施形態におけるセンタサーバ１０４のハードウェア構成を説明するブロック図である。
【００２２】
センタサーバ１０４は、ＣＰＵ１２１、メモリ１２２、ＨＤＤ１２３、ディスプレイ１２４、ネットワークインタフェース１２５、マウス１２６、キーボード１２７、電源装置１２８を備える。
【００２３】
ＣＰＵ１２１は、メモリ１２２上に展開されたプログラムを実行する。
【００２４】
メモリ１２２は、ＣＰＵ１２１によって実行されるプログラム及び当該プログラムを実行するために必要となる情報を格納する。また、メモリ１２２は、ＣＰＵが各種処理を実行するためのワークエリアとして用いられる。本実施形態では、メモリ１２２上にＯＳ１５８（図３参照）、データローダモジュール１５３（図３参照）、データベース１５４（図３参照）及びデータ検索モジュール１５７（図３参照）等のプログラムがＨＤＤ１２３よりロードされ実行される。
【００２５】
ＨＤＤ１２３は、メモリ１２２に読み出されるプログラム及び各種情報を格納する。図２に示す例では、ＨＤＤ１２３は一つのみであるが、複数のＨＤＤ１２３を備えていてもよいし、複数のＨＤＤ１２３から構成されるアレイグループであってもよい。
【００２６】
ネットワークインタフェース１２５は、ネットワーク１０３と接続するためのインタフェースである。
【００２７】
電源装置１２８は、センタサーバ１０４に電力を供給するための装置である。
【００２８】
ディスプレイ１２４は、センタサーバ１０４を操作する操作者に各種情報を表示する装置である。マウス１２６は、センタサーバ１０４を操作する操作者が利用するポインティングデバイスである。キーボード１２７は、センタサーバ１０４を操作する操作者が利用する入力装置である。
【００２９】
図３は、本実施形態におけるセンタネットワークシステムのソフトウェア構成を説明するブロック図である。
【００３０】
センタサーバ１０４上では、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１５８がＣＰＵ１２１によって実行される。ＯＳ１５８は、各種処理を実行する。具体的には、ＯＳ１５８は、データローダモジュール１５３、データベース１５４及びデータ検索モジュール１５７を実行する。
【００３１】
データベース１５４は、データ収集装置１０１から送信され、データローダモジュール１５３によって所定の形式に変換されたデータを管理する管理ソフトウェアである。データベース１５４に格納されるデータの詳細については、図４を用いて後述する。
【００３２】
データローダモジュール１５３は、プラント１０２に含まれるデータ収集装置１０１からネットワーク１０３を介してデータを受信し、受信したデータを所定の形式に変換してデータベースに格納するソフトウェアである。
【００３３】
図３に示す例では、データ収集装置１０１からファイル名が「ｓｉｄ．ｃｓｖ」の入力ファイル１（１５１）、及び、ファイル名が「ｉｎｐｕｔ．ｃｓｖ」の入力ファイル２（１５２）を受信し、入力ファイル１（１５１）及び入力ファイル２（１５２）を所定の形式に変換してデータベース１５４に格納する。
【００３４】
なお、図３に示すファイル１（１５１）及びファイル２（１５２）は、ＣＳＶ（Ｃｏｍｍａ  Ｓｅｐａｒａｔｅｄ  Ｖａｌｕｅ）形式のファイルである。ここで、ＣＳＶファイルとは、複数のフィールドが「，（カンマ）」で区切られたファイル形式を表す。図３ではＣＳＶ形式を使用する例を記したが、カンマの変わりにＴＡＢで区切られたファイル形式（ＴＳＶ形式）やバイナリ形式であってもよい。
【００３５】
データ検索モジュール１５７は、入力されたクエリに基づいて、目的とするデータをデータベース１５４から検索し、検索結果を出力するソフトウェアである。
【００３６】
図３に示す例では、データ検索モジュール１５７は、データ表示端末１０６を操作するユーザ１５０からクエリ１５５を受け付け、当該クエリ１５５に基づいてデータを検索し、当該データ検索の結果を検索結果ファイル１５６として出力する。データ表示端末１０６は、検索結果ファイル１５６を読み込み、画面にデータを数字、又は、グラフィカルな波形等の形式に変換して表示する。
【００３７】
図４は、本実施形態におけるデータローダモジュール１５３及びデータベース１５４を説明するブロック図である。
【００３８】
はじめに、入力ファイル１（１５１）、入力ファイル２（１５２）及びデータベース１５４に格納されるデータの形式について説明する。
【００３９】
入力ファイル１（１５１）は、Ｎａｍｅカラム１５１１及びＩＤカラム１５１２を含む。
【００４０】
Ｎａｍｅカラム１５１１は、プラント１０２に備わるセンサ１００のセンサ名である。ＩＤカラム１５１２は、プラント１０２に備わるセンサ１００を一意に識別するための識別子である。
【００４１】
入力ファイル２（１５２）は、Ｄａｔｅｔｉｍｅカラム１５２１及びセンサ名カラム１５２２を含む。
【００４２】
Ｄａｔｅｔｉｍｅカラム１５２１は、センサ１００がデータを取得した時刻を示す時刻情報である。センサ名カラム１５２２は、各センサ１００の名称から構成され、Ｎａｍｅカラム１５１１と対応するセンサ名が格納される。センサ名カラム１５２２を構成する各センサ１００には、各センサ１００が検出した値が格納される。
【００４３】
図４に示す例では、入力ファイル２（１５２）は、各センサ１００が１秒ごとに検出したデータを格納する。
【００４４】
データベース１５４は、ＳＩＤテーブル２０７及びＤＡＴテーブル２０８を格納する。
【００４５】
ＳＩＤテーブル２０７は、Ｎａｍｅカラム２０７１及びＩＤカラム２０７２を含む。
【００４６】
Ｎａｍｅカラム２０７１は、プラント１０２に備わるセンサ１００のセンサ名である。ＩＤカラム２０７２は、プラント１０２に備わるセンサ１００を一意に識別するための識別子である。
【００４７】
ＤＡＴテーブル２０８は、入力ファイル２（１５２）に含まれるデータを各センサ１００について所定の連続する時間単位（時系列データブロック）毎に圧縮したデータを格納する。具体的には、１行毎に、各センサ１００について１時間分の圧縮されたデータが格納される。
【００４８】
ＤＡＴテーブル２０８は、Ｄａｔｅｔｉｍｅカラム２０８１、ＩＤカラム２０８２、ＣＤＡＴＡカラム２０８３、ＭａｘＶａｌカラム２０８４及びＭｉｎＶａｌカラム２０８５を含む。
【００４９】
Ｄａｔｅｔｉｍｅカラム２０８１は、圧縮された時系列データブロックの先頭時刻を示す時刻情報を格納する。ここで、先頭時刻とは、Ｄａｔｅｔｉｍｅカラム１５２１のうち、最も過去の時刻、つまり、圧縮される時系列データブロックの起点となる時刻を表す。
【００５０】
ＩＤカラム２０８２は、センサ１００を識別するための識別子である。ＣＤＡＴＡカラム２０８３は、圧縮されたデータである。
【００５１】
ＭａｘＶａｌカラム２０８４は、圧縮された時系列データブロックに含まれるデータの最大値である。ＭｉｎＶａｌカラム２０８５は、圧縮された時系列データブロックに含まれる最小値である。
【００５２】
図４に示す例では、データ群２０１について圧縮された時系列データブロックが行２０９に対応し、データ群２０２について圧縮された時系列データブロックが行２１０に対応する。
【００５３】
例えば、行２０９は、センサ名が「Ｓ４」のセンサ１００について「２００９／１０／１の０時０分０秒」から１時間分のデータが圧縮されたデータ「ＤＤＤ」であり、圧縮前のデータに含まれる最大値は「９９」、圧縮前のデータに含まれる最小値は「５２」であることを示す。
【００５４】
本実施形態では、入力ファイル２（１５２）の３６００行（１時間）のデータが１行に圧縮される。なお、本実施形態の以降の説明では、時系列データブロックに格納される時間範囲は１時間固定とするが、時系列データブロックの時間範囲を１時間以外に変更することも可能である。
【００５５】
時系列ブロックの時間範囲の決定方法としては、利用者の最も利用する検索期間を用いる。例えば、最も多い期間検索の範囲の１／１０の期間を時系列データブロックの時間範囲とする。これによって、検索範囲が１日であれば時系列データブロックの時間範囲は２．４時間、検索範囲が１ヶ月であれば時系列データブロックの時間範囲は３日とする。これは、データ検索モジュール１５７のクエリ解析部において、図８Ａのクエリ例１のｗｈｅｒｅ＿ｔｉｍｅｒａｎｇｅ句で指定された検索期間から時間範囲を算出し、時間範囲を頻度表として管理することによって実現することが可能となる。
【００５６】
また、時系列ブロックの時間範囲の決定方法としては、時系列の特徴変化が起こる最小期間を用いることもできる。図２６を用いて、時系列データブロック２６０１を分割していき、時系列ブロック２６０５を最適な時系列ブロックとする方法について説明する。
【００５７】
図２６は、本発明の実施形態の時系列データブロックの時間幅を決定する方法を説明する図である。
【００５８】
時系列ブロック２６０１において、特徴値ａ［１］［１］を得る。次に時系列データブロックを半分に分割し、特徴値ａ［２］［１］、ａ［２］［２］を得る。ここで特徴値ａ［ｉ］［ｊ］において、ｉは何回分割したかを示す分割レベル、ｊは何番目の時系列データブロックの特徴値かを示す番号を表す。前述した処理を再帰的に繰り返す。
【００５９】
ここで、分割レベルｉにおける特徴値と分割レベルｉ＋１における特徴値との差が閾値以下であるところを時系列データブロックの最適な分割レベルとし、その時系列データブロックの幅を最適な時間範囲とする。特徴値ａ［ｉ］［ｊ］とａ［ｉ＋１］［ｊ］、ａ［ｉ］［ｊ］とａ［ｉ＋１］［ｊ＋１］の差の大きい方の値を、すべての時系列データブロックｊに対し平均を取り、この値を「特徴値との差」として閾値判定することも可能である。
【００６０】
図４に示すように、圧縮データを格納することによって、データベースの使用容量を削減することが可能となる。
【００６１】
次に、データローダモジュール１５３について説明する。
【００６２】
データローダモジュール１５３は、データ集約部２０３、特徴値抽出部２０４、特徴値抽出用ストリームデータ処理部２０４１、データ圧縮部２０５及びデータ挿入部２０６を備える。
【００６３】
データ集約部２０３は、各センサ１００毎に所定の時間間隔（本実施形態では１時間）のデータを集約する。
【００６４】
特徴値抽出部２０４は、圧縮されているデータの中から特徴値を抽出する。特徴値は、データベース１５４から圧縮データを検索するときに用いられる。特徴値を用いた検索方法については、図２３を用いて後述する。なお、本実施形態では、圧縮されているデータの中から最大値及び最小値が特徴値として抽出されている。なお、抽出されている特徴値は、平均又は分散等圧縮されるデータの特徴を示す値であれば、どのようなものであってもよい。
【００６５】
特徴値の例について図２５を用いて説明する。
【００６６】
ｉ１のケースでは、圧縮されているデータの始点、終点等の特定の値を特徴値として使用する。
【００６７】
ｉ２のケースでは、圧縮されているデータの全体ないし任意の区間の時系列に対する最大値、最小値、平均値、分散値、標準偏差値を特徴量として使用する。
【００６８】
ｉ３及びｉ４のケースでは、複数のセンサ観測値ｉ３、ｉ４の平均値を特徴値として使用する。
【００６９】
ｉ５のケースでは、圧縮されているデータの全体ないし任意の区間をフレーム化し、ＦＦＴ（Ｆａｓｔ  Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｆｏｒｍ）変換を実施することによって周波数帯域に変換し、そのあらかじめ指定した周波数Ａ、Ｂ、Ｃでの振幅を特徴値として使用する。
【００７０】
特徴値抽出部２０４は、特徴値抽出用ストリームデータ処理部２０４１を利用することによって特徴値を生成することができる。すなわち、リアルタイムに到来する時系列データを所定期間メモリ上に蓄積し、最大値、最小値、平均値、分散値等の時系列解析を行うことによって特徴値を生成することができる。
【００７１】
データ圧縮部２０５は、各センサ毎に所定の時間間隔のデータを圧縮する。データ挿入部２０６は、圧縮データをＤＡＴテーブル２０８に格納する。
【００７２】
図５Ａは、本実施形態において、データローダモジュール１５３によって実行される処理を説明するフローチャートである。
【００７３】
データローダモジュール１５３は、データベース１５４にＳＩＤテーブル２０７が存在するか否かを判定する（Ｓ２５０）。例えば、データローダモジュール１５３が、データベース１５４にＳＩＤテーブル２０７の存在を問い合わせるＳＱＬを発行する等によって判定できる。
【００７４】
データベース１５４にＳＩＤテーブル２０７が存在すると判定された場合、データローダモジュール１５３は、Ｓ２５２に進む。
【００７５】
データベース１５４にＳＩＤテーブル２０７が存在しないと判定された場合、データローダモジュール１５３は、入力ファイル１（１５１）を読み出し、ＳＩＤテーブル２０７を生成する（Ｓ２５１）。
【００７６】
データローダモジュール１５３は、入力ファイル２（１５２）から１行分の文字列を読み出し、カンマを区切り記号として読み出された文字列からカラムに相当する文字列を抽出し、配列ｃｓｖに格納する（Ｓ２５２）。例えば、ｃｉ個の文字列が抽出された場合、抽出された文字列は、それぞれ、配列ｃｓｖ［０］〜ｃｓｖ［ｃｉ−１］に格納される。ここで、ｃｉはカラムの数を表す。本実施形態では、ｃｓｖ[０」にはｄａｔｅｔｉｍｅが格納され、ｃｓｖ[１」〜ｃｓｖ［ｃｉ−１］にはセンサの値が格納される。
【００７７】
データローダモジュール１５３は、入力ファイル２（１５２）のセンサ名カラム１５２２からＩＤカラム２０８２が検索できるようにするための配列ｉｄを生成する（Ｓ２５３）。
【００７８】
データローダモジュール１５３は、圧縮データを作成するためデータ配列を定義する（Ｓ２５４）。本実施形態では、１つのセンサ１００の１時間分のデータを圧縮するため、ｄ［ｃｉ］［３６００］配列が定義される。すなわち、１つのセンサ１００について３６００個の配列が定義される。
【００７９】
データローダモジュール１５３は、データベース１５４にＤＡＴテーブル２０８が存在するか否かを判定する（Ｓ２５５）。例えば、データローダモジュール１５３が、データベース１５４にＤＡＴテーブル２０８の存在を問い合わせるＳＱＬを発行する等によって判定できる。
【００８０】
データベース１５４にＤＡＴテーブル２０８が存在すると判定された場合、データローダモジュール１５３は、Ｓ２５７に進む。
【００８１】
データベース１５４にＤＡＴテーブル２０８が存在しないと判定された場合、データローダモジュール１５３は、ＤＡＴテーブル２０８を生成する（Ｓ２５６）。
【００８２】
データローダモジュール１５３は、Ｓ２５４において取得された配列から圧縮データを生成して、ＤＡＴテーブル２０８に格納するためのデータロード処理を実行する（Ｓ２５７）。データロード処理の詳細については、図５Ｂを用いて後述する。
【００８３】
データローダモジュール１５３は、入力ファイル２（１５２）の全てのデータについて処理を終了したか否かを判定する（Ｓ２５８）。
【００８４】
入力ファイル２（１５２）の全てのデータについて処理を終了していないと判定された場合、データローダモジュール１５３は、Ｓ２５７に戻り同様の処理を実行する。
【００８５】
入力ファイル２（１５２）の全てのデータについて処理を終了したと判定された場合、データローダモジュール１５３は、処理を終了する。
【００８６】
図５Ｂ及び図５Ｃは、本実施形態において、データローダモジュール１５３によって実行されるデータロード処理を説明するフローチャートである。
【００８７】
データローダモジュール１５３は、時間（秒）を示す変数ｉを初期化し、全ての時間（秒）について処理を実行する（Ｓ２５９）。具体的には、データローダモジュール１５３は、変数ｉを「０」に設定し、変数ｉが「３６００」より大きくなるまで繰り返し処理を実行する。なお、本実施形態では、０〜３５９９秒までのデータが処理対象となる。
【００８８】
データローダモジュール１５３は、入力ファイル２（１５２）から１行分のデータを読み出し、読み出されたデータからｃｉ個の文字列を抽出し、配列ｃｓｖ［０］〜ｃｓｖ［ｃｉ−１］に格納する（Ｓ２６０）。
【００８９】
データローダモジュール１５３は、変数ｉが「０」であるか否かを判定する（Ｓ２６１）。
【００９０】
変数ｉが「０」でないと判定された場合、データローダモジュール１５３は、Ｓ２６３に進む。
【００９１】
変数ｉが「０」であると判定された場合、データローダモジュール１５３は、ＤＡＴテーブル２０８のＤａｔｅｔｉｍｅカラム２０８１にｃｓｖ［０］を格納する（Ｓ２６２）。
【００９２】
データローダモジュール１５３は、各センサ１００毎にデータを集約する（Ｓ２６３）。具体的には、データ集約部２０３は、配列ｃｓｖに格納される値を数値化して配列ｄに設定する。
【００９３】
データローダモジュール１５３は、繰り返し処理を実行するか、すなわち、全ての時間について処理が終了したか否かを判定する（Ｓ２６４）。
【００９４】
全ての変数ｉについて処理が終了していないと判定された場合、データローダモジュール１５３は、Ｓ２５９に戻り、変数ｉを「１」加算して、Ｓ２６０〜Ｓ２６３までの処理を実行する。
【００９５】
全ての変数ｉについて処理が終了したと判定された場合、データローダモジュール１５３は、センサ１００の数を表す変数ｊを初期化し、全てのセンサ１００について処理を実行する（Ｓ２６５）。具体的には、データローダモジュール１５３は、変数ｊに「１」を設定し、変数ｊがｃｎより大きくなるまで繰り返し処理を実行する。
【００９６】
データローダモジュール１５３は、配列ｄ［ｊ］［ｉ］の中から特徴値を抽出する（Ｓ２６６）。具体的には、特徴値抽出部２０４が、配列ｄ［ｊ］［０］〜ｄ［ｊ］［３５９９］の中から最大値、最小値、平均値、分散値若しくは周波数スペクトル上の特定値のいずれか、又はこれらの組み合わせを抽出する。
【００９７】
データローダモジュール１５３は、配列ｄ［ｊ］［ｉ］を所定の形式に圧縮する（Ｓ２６７）。具体的には、データ圧縮部２０５が、配列ｄ［ｊ］［０］〜ｄ［ｊ］［３５９９］を所定の形式に圧縮する。なお、圧縮形式としては、ｚｉｐ、ｌｚｈ、ｇｚｉｐ及びｂｚｉｐ２等が考えられる。
【００９８】
データローダモジュール１５３は、圧縮されたデータをＤＡＴテーブル２０８に格納する（Ｓ２６８）。具体的には、データ挿入部２０６が、Ｓ２５３において生成されたｉｄ［ｉ］をＩＤカラム２０８２に、Ｓ２６２において設定されたｃｓｖ［０］をＤａｔｅｔｉｍｅカラム２０８１に、Ｓ２６６において抽出された最大値をＤＡＴテーブル２０８のＭａｘＶａｌカラム２０８４に、Ｓ２６６において抽出された最小値をＭｉｎＶａｌカラム２０８５に、さらに、Ｓ２６７において圧縮されたデータをＣＤＡＴＡ２０８３に格納する。
【００９９】
データローダモジュール１５３は、全てのセンサ１００について処理が終了したか否かを判定する（Ｓ２６９）。
【０１００】
全てのセンサ１００について処理が終了していないと判定された場合、データローダモジュール１５３は、Ｓ２６６に戻り同様の処理を実行する。
【０１０１】
全てのセンサ１００について処理が終了したと判定された場合、データローダモジュール１５３は、処理を終了する。
【０１０２】
図６は、本実施形態におけるデータ検索モジュール１５７を説明するブロック図である。
【０１０３】
データ検索モジュール１５７は、入力されたクエリ１５５に基づいて、データベース１５４にＳＱＬを発行し、発行されたＳＱＬに対する応答に基づいて検索結果を生成し、生成された検索結果を検索結果ファイル１５６に出力する。
【０１０４】
データ検索モジュール１５７は、クエリ解析部３００、ＳＱＬ生成部３０１、特徴値検索用ＳＱＬ生成部３０２、ＣＱＬ生成部３０３、ＤＢ検索部３０４、データ解凍／並び替え処理部３０５、ストリームデータ処理部３０６、切り出し処理部３０７及びデータ出力部３０８を備える。
【０１０５】
クエリ解析部３００は、入力されたクエリ１５５を解析し、当該クエリ１５５の内容をグローバル変数３０９として出力する。なお、グローバル変数３０９は、メモリ１２２等の記憶領域に格納され、ＳＱＬ生成部３０１、特徴値検索用ＳＱＬ生成部３０２、ＣＱＬ生成部３０３、ＤＢ検索部３０４、データ解凍／並び替え処理部３０５、ストリームデータ処理部３０６、切り出し処理部３０７及びデータ出力部３０８の各部が参照することができる。
【０１０６】
ＳＱＬ生成部３０１は、クエリ解析部３００の解析結果であるグローバル変数３０９に基づいて、データベース１５４を検索するためのＳＱＬ３１０を生成し、生成されたＳＱＬ３１０をＤＢ検索部３０４に出力する。
【０１０７】
特徴値検索用ＳＱＬ生成部３０２は、クエリ解析部３００の解析結果であるグローバル変数３０９に基づいて、特徴値を用いてデータベース１５４を検索するためのＳＱＬ３１０を生成し、生成されたＳＱＬ３１０をＤＢ検索部３０４に出力する。
【０１０８】
ＣＱＬ生成部３０３は、クエリ解析部３００の解析結果であるグローバル変数３０９に基づいて、ストリームデータ処理を実行するためのＣＱＬ３１１を生成し、生成されたＣＱＬ３１１をストリームデータ処理部３０６に出力する。
【０１０９】
ＤＢ検索部３０４は、ＳＱＬ生成部３０１又は特徴値検索用ＳＱＬ生成部３０２によって生成されたＳＱＬ３１０をデータベース１５４へ発行する。ＤＢ検索部３０４は、ＳＱＬ３１０の実行結果、すなわち、データ検索結果をファイルＡ３１２に出力する。なお、ファイルＡ３１２に出力されるデータは圧縮データである。
【０１１０】
データ解凍／並び替え処理部３０５は、ファイルＡ３１２を読み出し、圧縮データを解凍し、かつ、解凍されたデータを所定の条件に基づいて並び替える。データ解凍／並び替え処理部３０５は、処理されたデータをファイルＢ３１３に出力する。
【０１１１】
ストリームデータ処理部３０６は、ＣＱＬ生成部３０３によって生成されたＣＱＬ３１１に基づいて、ファイルＢ３１３を入力データとして読み出し、読み出された各データに対してストリームデータ処理を実行する。ストリームデータ処理部３０６は、ファイルＣ３１４に処理されたデータを出力する。
【０１１２】
切り出し処理部３０７は、ファイルＣ３１４から所定の条件に一致するデータを抽出する。切り出し処理部３０７は、ファイルＤ３１５に抽出されたデータを出力する。
【０１１３】
データ出力部３０８は、ファイルＤ３１５に格納されるデータを用いて出力結果を生成し、生成された出力結果を検索結果ファイル１５６として出力する。
【０１１４】
図７は、本実施形態において、データ検索モジュール１５７によって出力されるデータの構造の一例を示す説明図である。
【０１１５】
データ構造１（３４０）は、ファイルＡ３１２に格納されるデータ（パケット）のデータ構造である。ファイルＡ３１２は複数のパケットを格納する。
【０１１６】
データ構造１（３４０）は、ｄａｔｅｔｉｍｅ３４０１、ｉｄｘ３４０２、ｚｌｅｎ３４０３及びｚｂｌｋ３４０４から構成される。
【０１１７】
ｄａｔｅｔｉｍｅ３４０１は、日付及び時間等の時刻を表し、ＤＡＴテーブル２０８のＤａｔｅｔｉｍｅカラム２０８１に対応する。本実施形態では、ｄａｔｅｔｉｍｅ３４０１のデータ長は８ｂｙｔｅである。
【０１１８】
ｉｄｘ３４０２は、センサ１００を識別するためのセンサ識別番号を表す。クエリ例１のｉｎｐｕｔ＿ｉｔｅｍ句に記されるセンサの並び順がセンサ識別番号として割り当てられる。本実施形態では、ｉｄｘ３４０２のデータ長は４ｂｙｔｅである。
【０１１９】
ｚｌｅｎ３４０３は、圧縮されたデータのブロック長を表し、本実施形態ではデータ長は４ｂｙｔｅである。
【０１２０】
ｚｂｌｋ３４０４は、圧縮されたデータを表す、具体的には、圧縮されたデータそのものである。本実施形態では、ｚｂｌｋ３４０４のデータ長はｎｂｙｔｅである。
【０１２１】
データ構造２（３４１）は、ファイルＢ３１３、ファイルＣ３１４及びファイルＤ３１５に格納されるデータ（バイナリ）のデータ構造である。
【０１２２】
ｄａｔｅｔｉｍｅ３４１１は、日付及び時間等の時刻を表す。
本実施形態では、ｄａｔｅｔｉｍｅ３４１１のデータ長は８ｂｙｔｅである。
【０１２３】
ｖａｌｎ３４１２は、データ３４１３の数を表し、本実施形態では、データ長は８ｂｙｔｅである。
【０１２４】
データ３４１３は、データ解凍／並び替え処理部３０５、ストリームデータ処理部３０６及び切り出し処理部３０７によって算出された値を表し、本実施形態では、データ長はそれぞれ、４ｂｙｔｅである。
【０１２５】
例えば、「２００９／１０／１  ００：００：００，４，１００，３００，１２，５２」というデータがあった場合、ｄａｔｅｔｉｍｅ３４１１には「２００９／１０／１  ００：００：００」が、ｖａｌｎ３４１２には「４」が、ｖａｌｎ［０］には「１００」が、ｖａｌｎ［１］には「３００」が、ｖａｌｎ［２］には「１２」が、ｖａｌｎ［３］には「５２」が格納される。
【０１２６】
データ構造３（３４２）は、検索結果ファイル１５６に格納されるデータのデータ構造である。
【０１２７】
データ構造３（３４２）には、日付及び時間等の時刻、並びに、各センサ１００の値が格納される。
【０１２８】
図８Ａ及び図８Ｂは、本実施形態におけるクエリ１５５、ＳＱＬ３１０及びＣＱＬ３１１の一例を示す説明図である。
【０１２９】
クエリ例１（３５０）及びクエリ例２（３５１）は、クエリ１５５の一例である。
【０１３０】
クエリ例１（３５０）は、ストリームデータ処理が実行される場合のクエリ１５５である。クエリ例１（３５０）は、センサの名称が「Ｓｅｎｓｏｒ１」及び「Ｓｅｎｓｏｒ２」のセンサ１００のデータに対して、ｗｈｅｒｅ＿ｔｉｍｅｒａｎｇｅ句及びｗｈｅｒｅ＿ｃｏｎｄｉｔｏｎ句において指定された条件を満たすデータを抽出し、さらに、抽出されたデータを「ｒｅｓｕｌｔ．ｃｓｖ」に格納することを示す。
【０１３１】
クエリ例２（３５１）は、ストリームデータ処理が実行されない場合のクエリ１５５である。クエリ例２（３５１）は、センサの名称が「Ｓｅｎｓｏｒ１」、「Ｓｅｎｓｏｒ２」及び「Ｓｅｎｓｏｒ３」のセンサ１００のデータに対して、ｗｈｅｒｅ＿ｔｉｍｅｒａｎｇｅ句において指定された時間間隔のデータを抽出し、抽出されたデータを「ｒｅｓｕｌｔ．ｃｓｖ」に格納することを示す。
【０１３２】
ＳＱＬ例１（３５２）は、クエリ例１（３５０）が入力された場合に、ＳＱＬ生成部３０１によって生成されるＳＱＬ３１０の一例である。なお、ＳＱＬ３１０の生成方法については、図１１Ａ及び図１１Ｂを用いて後述する。
【０１３３】
ＣＱＬ例１（３５３）は、クエリ例１（３５０）が入力された場合に、ＣＱＬ生成部３０３によって生成されるＣＱＬ３１１の一例である。なお、ＣＱＬ３１１の生成方法については、図１２Ａ及び図１２Ｂを用いて後述する。
【０１３４】
図９は、本実施形態のデータ検索モジュール１５７によって実行される処理の概要を説明するフローチャートである。
【０１３５】
データ検索モジュール１５７は、データ表示端末１０６からクエリ１５５の入力を受け付け、処理を開始する。
【０１３６】
データ検索モジュール１５７は、入力されたクエリ１５５を解析する（Ｓ３２０）。具体的には、クエリ解析部３００が入力されたクエリ１５５を解析する。
【０１３７】
データ検索モジュール１５７は、入力されたクエリ１５５が特徴値検索の実行を要求するクエリであるか否かを判定する（Ｓ３２１）。具体的には、クエリ解析部３００が、入力されたクエリ１５５にｍｅｔａ＿ｓｅａｒｃｈ句が含まれるか否かを判定する。入力されたクエリ１５５にｍｅｔａ＿ｓｅａｒｃｈ句が含まれる場合、入力されたクエリ１５５が特徴値検索の実行を要求するクエリであると判定される。なお、ｍｅｔａ＿ｓｅａｒｃｈ句を含むクエリ１５５の例については、図２２を用いて後述する。
【０１３８】
入力されたクエリ１５５が特徴値検索の実行を要求するクエリでないと判定された場合、データ検索モジュール１５７は、ＳＱＬ３１０を生成する（Ｓ３２２）。具体的には、ＳＱＬ生成部３０１がＳＱＬ３１０を生成し、Ｓ３２４に進む。
【０１３９】
入力されたクエリ１５５が特徴値検索の実行を要求するクエリであると判定された場合、データ検索モジュール１５７は、特徴値検索用のＳＱＬ３１０を生成する（Ｓ３２３）。具体的には、特徴値検索用ＳＱＬ生成部３０２が特徴値検索用のＳＱＬ３１０を生成し、Ｓ３２４に進む。
【０１４０】
次に、データ検索モジュール１５７は、ストリームデータ処理を実行するか否かを判定する（Ｓ３２４）。具体的には、クエリ解析部３００が、入力されたクエリ１５５にｓｅｌｅｃｔ＿ｉｔｅｍｓ句が含まれるか否かを判定する。入力されたクエリ１５５にｓｅｌｅｃｔ＿ｉｔｅｍｓ句が含まれる場合には、ストリームデータ処理を実行すると判定される。
【０１４１】
ストリームデータ処理を実行しないと判定された場合、データ検索モジュール１５７は、ＳＱＬ生成部３０１又は特徴値検索用ＳＱＬ生成部３０２によって生成されたＳＱＬ３１０に基づいて、データベース１５４を検索する（Ｓ３２５）。具体的にはＤＢ検索部３０４が、ＳＱＬ生成部３０１又は特徴値検索用ＳＱＬ生成部３０２によって生成されたＳＱＬ３１０に基づいて、データベース１５４を検索し、検索された圧縮データをファイルＡ３１２に出力する。
【０１４２】
データ検索モジュール１５７は、ファイルＡ３１２に格納される圧縮データを解凍し、解凍されたデータを並び替える（Ｓ３２６）。具体的には、データ解凍／並び替え処理部３０５が、ファイルＡに格納される圧縮データを解凍し、解凍されたデータを並び替えてファイルＢに出力し、Ｓ３３２に進む。
【０１４３】
Ｓ３２４において、ストリームデータ処理を実行すると判定された場合、データ検索モジュール１５７は、ＣＱＬ３１１を生成する（Ｓ３２７）。具体的には、ＣＱＬ生成部３０３がＣＱＬ３１１を生成する。
【０１４４】
データ検索モジュール１５７は、ＳＱＬ生成部３０１又は特徴値検索用ＳＱＬ生成部３０２によって生成されたＳＱＬ３１０に基づいて、データベース１５４を検索する（Ｓ３２８）。
【０１４５】
データ検索モジュール１５７は、ファイルＡ３１２に格納された圧縮データを解凍し、解凍されたデータを並び替える（Ｓ３２９）当該処理は、Ｓ３２６と同一の処理である。
【０１４６】
データ検索モジュール１５７は、ＣＱＬ生成部３０３によって生成されたＣＱＬ３１１に基づいて、ストリームデータ処理を実行する（Ｓ３３０）。具体的には、ストリームデータ処理部３０６が、ＣＱＬ生成部３０３によって生成されたＣＱＬ３１１に基づいて、ストリームデータ処理を実行し、実行結果をファイルＣ３１４に出力する。
【０１４７】
データ検索モジュール１５７は、ファイルＣ３１４に格納されるデータから出力対象となるデータを切り出す（Ｓ３３１）。具体的には、切り出し処理部３０７が、ファイルＣ３１４に格納されるデータから出力対象となるデータを切り出し、切り出されたデータをファイルＤ３１５に出力して、Ｓ３３２に進む。
【０１４８】
データ検索モジュール１５７は、ファイルＢ又はファイルＤ３１５に格納されるデータをデータ表示端末１０６に表示するための出力データに変換して、検索結果ファイル１５６に出力し（Ｓ３３２）、処理を終了する。
【０１４９】
以下、各ステップの処理の詳細を説明する。
【０１５０】
図１０Ａは、本実施形態においてクエリ解析部３００によって切り出される文字列を示す説明図である。
【０１５１】
文字切り出し部分３６０は、入力されたクエリ１５５から切り出される文字列を表す。クエリ解析部３００が、切り出しキーワードを指示するテンプレートである文字切り出し部分３６０を保持する。
【０１５２】
図１０Ａに示す例では、９つのキーワードから変数「＄ｉｎｐｕｔ」、「＄ｒａｎｇｅ」、「＄ｓｅｌｅｃｔ」、「＄ｓｔａｒｔ」、「＄ｅｎｄ」、「＄ｃｏｎｄ」、「＄ｐｒｅｖ」、「＄ｐｏｓｔ」、「＄ｓｔｅｐ」、「＄ｆｉｌｅ」及び「＄ｍｅｔａ」が切り出される。ここで、キーワードとは、「ｉｎｐｕｔ＿ｉｔｅｍｓ：」及び「ｓｅｌｅｃｔ＿ｉｔｅｍｓ」等を表す。
【０１５３】
例えば、キーワード「ｉｎｐｕｔ＿ｉｔｅｍｓ：」以下の文字列が切り出され、変数「＄ｉｎｐｕｔ」に切り出された文字列が格納される。
【０１５４】
以下、クエリ解析部３００が実行するクエリ解析処理について説明する。
【０１５５】
図１０Ｂは、本実施形態のクエリ解析部３００によって実行されるクエリ解析処理の一例を説明するフローチャートである。
【０１５６】
クエリ解析部３００は、クエリ１５５の入力を受け付け、処理を開始する。
【０１５７】
まず、クエリ解析部３００は、変数を初期化する（Ｓ３６１）。具体的には、クエリ解析部３００は、「＄ｒａｎｇｅ」、「＄ｃｏｎｄ」及び「＄ｓｔｅｐ」に「１」を設定し、「＄ｐｒｅｖ」及び「＄ｐｏｓｔ」に「０」を設定する。また、クエリ解析部３００は、「＄ｉｎｐｕｔ」、「＄ｓｅｌｅｃｔ」、「＄ｓｔａｒｔ」、「＄ｅｎｄ」、「＄ｆｉｌｅ」及び「＄ｍｅｔａ」についてはＮｕｌｌ初期化を実行する。
【０１５８】
次に、クエリ解析部３００は、文字切り出し部分３６０に基づいて、入力されたクエリ１５５から文字列を切り出し、切り出された文字列を各変数に格納する（Ｓ３６２）。
【０１５９】
具体的には、クエリ解析部３００は、クエリ１５５に含まれる９つの句から文字列を切り出し、切り出された文字列を、それぞれ、変数「＄ｉｎｐｕｔ」、「＄ｒａｎｇｅ」、「＄ｓｅｌｅｃｔ」、「＄ｓｔａｒｔ」、「＄ｅｎｄ」、「＄ｃｏｎｄ」、「＄ｐｒｅｖ」、「＄ｐｏｓｔ」、「＄ｓｔｅｐ」、「＄ｆｉｌｅ」及び「＄ｍｅｔａ」に格納する。
【０１６０】
例えば、クエリ例１（３５０）の場合、変数「＄ｉｎｐｕｔ」には「'Ｓｅｎｓｏｒ１'，'Ｓｅｎｓｏｒ２'」が格納される。
【０１６１】
なお、クエリ１５５に含まれないキーワードについては、Ｓ３６１において設定された値がそのまま用いられる。
【０１６２】
クエリ解析部３００は、変数「＄ｉｎｐｕｔ」及び「＄ｓｅｌｅｃｔ」に含まれる要素の数を算出する（Ｓ３６３）。
【０１６３】
具体的には、クエリ解析部３００は、変数「＄ｉｎｐｕｔ」及び「＄ｓｅｌｅｃｔ」に含まれる文字列において、「，（カンマ）」で区切られた要素の数をそれぞれカウントすることによって、要素の数を算出する。さらに、クエリ解析部３００は、変数「＄ｉｎｐｕｔ」に含まれる要素数を変数「＄ｉｎｕｍ」に代入し、変数「＄ｓｅｌｅｃｔ」に含まれる要素数を変数「＄ｓｎｕｍ」に格納する。
【０１６４】
例えば、変数「＄ｉｎｐｕｔ」に「'Ｓｅｎｓｏｒ１'，'Ｓｅｎｓｏｒ２'」が格納されている場合、「＄ｉｎｕｍ」には「２」が格納される。
【０１６５】
クエリ解析部３００は、各変数をグローバル変数３０９として出力し（Ｓ３６４）、処理を終了する。
【０１６６】
図１１Ａは、本実施形態におけるＳＱＬ３１０を生成するためのＳＱＬテンプレートを示す説明図である。
【０１６７】
ＳＱＬテンプレート３７０は、ＳＱＬ３１０を生成するためのテンプレートであり、ＳＱＬ生成部３０１が保持する。
【０１６８】
図１１Ａに示す例では、ＳＩＤテーブル２０７とＤＡＴテーブル２０８との両テーブルをそれぞれのＩＤカラム（２０７２、２０８２）に示される値で等価結合（ｊｏｉｎオペレーション）したテーブルから、時刻（Ｄａｔｅｔｉｍｅ）、センサ名（ＳＩＤ．Ｎａｍｅ）及び圧縮データ（ＤＡＴ．ＣＤＡＴＡ）を所定の条件に基づいて検索するＳＱＬであることを示す。また、所定の条件は、ｗｈｅｒｅ句以下に定義されている。すなわち、データを時間順に並び替え、指定されたセンサ名及び指定された時間区間に一致するデータを取得することが定義される。
【０１６９】
ＳＱＬ生成部３０１は、グローバル変数３０９を用いて、ＳＱＬテンプレート３７０の太文字及び下線部で示された部分に必要なデータを代入することによって、ＳＱＬ３１０を生成する。具体的には、ＳＱＬ生成部３０１は、「＄ｄｂ＿ｉｎｐｕｔ」、「＄ｄｂ＿ｓｔａｒｔ」及び「＄ｄｂ＿ｅｎｄ」を生成して、生成されたデータをＳＱＬテンプレート３７０に代入する。
【０１７０】
以下、ＳＱＬ生成処理について説明する。
【０１７１】
図１１Ｂは、本実施形態のＳＱＬ生成部３０１によって実行される処理の一例を説明するフローチャートである。
【０１７２】
ＳＱＬ生成部３０１は、グローバル変数３０９を用いて、「＄ｄｂ＿ｉｎｐｕｔ」、「＄ｄｂ＿ｓｔａｒｔ」及び「＄ｄｂ＿ｅｎｄ」を生成する（Ｓ３７１）。
【０１７３】
具体的には、「＄ｄｂ＿ｉｎｐｕｔ」及び「＄ｄｂ＿ｅｎｄ」については、「＄ｄｂ＿ｉｎｐｕｔ」＝「＄ｉｎｐｕｔ」及び「＄ｄｂ＿ｅｎｄ＝＄ｅｎｄ」と生成される。また、「＄ｄｂ＿ｓｔａｒｔ」については、「＄ｄｂ＿ｓｔａｒｔ＝＄ｓｔａｒｔ−＄ｒａｎｇｅ」を計算し、さらに、当該計算結果の分及び秒単位の値を「０」に初期化される。これは、本実施形態では１時間単位で圧縮されたデータを検索するためである。
【０１７４】
次に、ＳＱＬ生成部３０１は、ＳＱＬ３１０を生成し（Ｓ３７２）、処理を終了する。
【０１７５】
具体的には、ＳＱＬ生成部３０１は、生成された「＄ｄｂ＿ｉｎｐｕｔ」、「＄ｄｂ＿ｓｔａｒｔ」及び「＄ｄｂ＿ｅｎｄ」をＳＱＬテンプレートに代入することによってＳＱＬ３１０を生成する。
【０１７６】
図１２Ａは、本実施形態におけるＣＱＬ３１１を生成するためのＣＱＬテンプレートを示す説明図である。
【０１７７】
ＣＱＬテンプレート３８０は、ＣＱＬ３１１を生成するためテンプレートであり、ＣＱＬ生成部３０３が保持する。
【０１７８】
ＣＱＬ生成部３０３は、グローバル変数３０９を用いて、ＣＱＬテンプレート３８０の太文字及び下線部で示された部分に必要なデータを代入することによって、ＣＱＬ３１１を生成する。
【０１７９】
具体的には、ＣＱＬ生成部３０３は、「＄ｃｑｌ＿ｉｎｐｕｔ」、「＄ｃｑｌ＿ｓｅｌｅｃｔ」、「＄ｒａｎｇｅ」、「＄ｃｑｌ＿ｌａｂｅｌ」及び「＄ｃｏｎｄ」を生成して、生成されたデータをＣＱＬテンプレート３８０に代入する。
【０１８０】
以下、ＣＱＬ生成処理について説明する。
【０１８１】
図１２Ｂは、本実施形態において、ＣＱＬ生成部３０３によって実行される処理を説明するフローチャートである。
【０１８２】
ＣＱＬ生成部３０３は、グローバル変数３０９を用いて、「＄ｃｑｌ＿ｉｎｐｕｔ」を生成する（Ｓ３８１）。具体的には、以下の二つの処理が実行される。
【０１８３】
まず、ＣＱＬ生成部３０３は、グローバル変数３０９に含まれる「＄ｉｎｐｕｔ」を用いて、＄ｉｎｐｕｔ分解処理３８５を実行する。すなわち、ＣＱＬ生成部３０３は、「＄ｉｎｐｕｔ」を複数の「＄ｉｎｐｕｔ＿ｉｔｅｍ」に分解する。これは、複数のセンサ名が含まれる「＄ｉｎｐｕｔ」から、個々のセンサ名を取得するための処理である。
【０１８４】
次に、ＣＱＬ生成部３０３は、「＄ｉｎｐｕｔ＿ｉｔｅｍ」を用いて、＄ｃｑｌ＿ｉｎｐｕｔ生成処理３８６を実行する。ＣＱＬ生成部３０３は、「＄ｉｎｐｕｔ＿ｉｔｅｍ」を用いて、＄ｃｑｌ＿ｉｎｐｕｔ生成処理３８６の右辺に示すようにして「＄ｃｑｌ＿ｉｎｐｕｔ」を生成する。
【０１８５】
ＣＱＬ生成部３０３は、グローバル変数３０９を用いて、「＄ｃｑｌ＿ｓｅｌｅｃｔ」を生成する（Ｓ３８２）。具体的には、以下の二つの処理が実行される。
【０１８６】
まず、ＣＱＬ生成部３０３は、グローバル変数３０９に含まれる「＄ｓｅｌｅｃｔ」を用いて、＄ｓｅｌｅｃｔ分解処理３８７を実行する。これは、＄ｓｅｌｅｃｔに含まれる要素を分解するための処理である。ＣＱＬ生成部３０３は、＄ｓｅｌｅｃｔ分解処理３８７を実行することによって、「＄ｆｕｎｃ１」又は「＄ｆｕｎｃ２」及び「＄ｌａｂｅｌ」を取得する。
【０１８７】
次に、ＣＱＬ生成部３０３は、「＄ｆｕｎｃ１」又は「＄ｆｕｎｃ２」及び「＄ｌａｂｅｌ」を用いて、＄ｃｑｌ＿ｓｅｌｅｃｔ生成処理３８８を実行し、「＄ｃｑｌ＿ｓｅｌｅｃｔ」を生成する。ここで「＄ｆｕｎｃ１」は集約関数であり、移動平均（ａｖｇ）、分散、最大値、最小値などが記載できる。
【０１８８】
ここで、ＣＱＬでは、ａｖｇ等の集約関数と、「Ｓｅｎｓｏｒ１」等の信号名とを混在させて扱うことができない。そのため、「＄ｓｅｌｅｃｔ」の含まれる要素をｌａｓｔ（）関数を用いて集約関数化する必要がある。例えば、文字列「'Ｓｅｎｓｏｒ１'  ａｓ  ＬＡＢＥＬ」は「ｌａｓｔ（'Ｓｅｎｓｏｒ１')  ａｓ  ＬＡＢＥＬ」と集約関数化される。
【０１８９】
ＣＱＬ生成部３０３は、グローバル変数３０９を用いて、「＄ｃｑｌ＿ｌａｂｅｌ」を生成する（Ｓ３８３）。具体的には、ＣＱＬ生成部３０３は、「＄ｌａｂｅｌ」を用いて、＄ｃｑｌ＿ｌａｂｅｌ生成処理３８９を実行することによって、「＄ｃｑｌ＿ｌａｂｅｌ」を生成する。
【０１９０】
ＣＱＬ生成部３０３は、Ｓ３８１〜Ｓ３８３において生成された「＄ｃｑｌ＿ｉｎｐｕｔ」、「＄ｃｑｌ＿ｓｅｌｅｃｔ」及び「＄ｃｑｌ＿ｌａｂｅｌ」、並びに、グローバル変数３０９に含まれる「＄ｒａｎｇｅ」及び「＄ｃｏｎｄ」をＣＱＬテンプレート３８０に代入することによって、ＣＱＬ３１１を生成する（Ｓ３８４）。
【０１９１】
以上のように、データ検索モジュール１５７は、入力されたクエリ１５５に基づいて、ＳＱＬ３１０及びＣＱＬ３１１を同時に生成することができる。
【０１９２】
以下、生成されたＳＱＬ３１０及びＣＱＬ３１１を用いた処理について説明する。
【０１９３】
図１３は、本実施形態のＤＢ検索部によって実行されるＳＱＬ処理の一例を説明するフローチャートである。
【０１９４】
ＤＢ検索部３０４は、グローバル変数３０９に含まれる「＄ｉｎｐｕｔ」を用いて、配列ＫＥＹ［０］〜ＫＥＹ［＄ｉｎｕｍ−１］を生成する（Ｓ４００）。
【０１９５】
具体的には、ＤＢ検索部３０４は、「＄ｉｎｐｕｔ」を用いて、＄ｓｉｇｎａｌ抽出処理４０７を実行する。これによって、「＄ｉｎｕｍ」個の「＄ｓｉｇｎａｌ」が抽出される。ＤＢ検索部３０４は、抽出された各「＄ｓｉｇｎａｌ」を配列ＫＥＹ［０］〜ＫＥＹ［＄ｉｎｕｍ−１］に格納する。以上の処理によって、配列ＫＥＹ［０］〜ＫＥＹ［＄ｉｎｕｍ−１］が生成される。
【０１９６】
ＤＢ検索部３０４は、生成された配列ＫＥＹ［０］〜ＫＥＹ［＄ｉｎｕｍ−１］を用いて、ハッシュ配列ｈａｓｈを生成する（Ｓ４０１）。
【０１９７】
ＤＢ検索部３０４は、データベース１５４に対してＳＱＬ３１０を発行し、データベース１５４がＳＱＬ３１０を実行する（Ｓ４０２）。これによって、発行されたＳＱＬ３１０において指定された条件に一致するデータを実行結果として取得することができる。
【０１９８】
ＤＢ検索部３０４は、取得された実行結果から１行分のデータを取り出し、取り出されたデータから日付及び時間等の時刻（Ｄａｔｅｔｉｍｅ）、センサ名（Ｎａｍｅ）並びに圧縮データ（ＣＤＡＴＡ）を取得する（Ｓ４０３）。なお、取り出される１行分のデータは、１つのセンサの１時間分の圧縮されたデータである。
【０１９９】
ＤＢ検索部３０４は、実行結果から取り出された１行分のデータが空である否かを判定する（Ｓ４０４）。すなわち、全ての実行結果について処理が終了したか否かが判定される。
【０２００】
実行結果から取り出された１行分のデータが空であると判定された場合、ＤＢ検索部３０４は、処理を終了する。
【０２０１】
実行結果から取り出された１行分のデータが空でないと判定された場合、ＤＢ検索部３０４は、データ構造１（３４０）に示すパケットを生成する（Ｓ４０５）。
【０２０２】
具体的には、ＤＢ検索部３０４は、取り出された１行分のデータに含まれる日付及び時間等の時刻（Ｄａｔｅｔｉｍｅ）をｄａｔｅｔｉｍｅ３４０１に、センサ名（Ｎａｍｅ）をキーにハッシュ配列ｈａｓｈから得られた値をｉｄｘ３４０２に、圧縮データ（ＣＤＡＴＡ）をｚｂｌｋ３４０４に、圧縮データ（ＣＤＡＴＡ）のサイズをｚｌｅｎ３４０３へ格納する。
【０２０３】
ＤＢ検索部３０４は、生成されたパケットをファイルＡ３１２に出力し（Ｓ４０６）、Ｓ４０３に戻り、Ｓ４０３〜Ｓ４０６の処理を実行する。
【０２０４】
例えば、ＳＱＬ例１（３５２）が実行された場合、センサ名が「'Ｓｅｎｓｏｒ１'」及び「'Ｓｅｎｓｏｒ２'」のセンサ１００について「２００９−０２−０１  ２３：００：００」から「２００９−０２−２０  ２３：５９：５９」までの間のデータが複数個のデータ構造１（３４０）のパケットに変換され、ファイルＡ３１２に出力される。
【０２０５】
図１４Ａ及び図１４Ｂは、本実施形態のデータ解凍／並び替え処理部３０５によって実行される処理の一例を説明するフローチャートである。
【０２０６】
データ解凍／並び替え処理部３０５は、ｄａｔａ［３６００］［＄ｉｎｕｍ］配列、バッファ配列及びｂｌｋ配列を定義する（Ｓ４５０）。本実施形態では、一つの圧縮データには、１つのセンサ１００について１時間分のデータ、３６００点が格納されているため、ｄａｔａ［３６００］［＄ｉｎｕｍ］配列が定義される。
【０２０７】
データ解凍／並び替え処理部３０５は、グローバル変数３０９に含まれる「＄ｓｎｕｍ」が「０」であるか否かを判定する（Ｓ４５１）。これによって、ストリームデータ処理が実行されるか否かが判定される。すなわち、図８Ａのクエリ例２（３５１）に示すようにクエリ１５５にｓｅｌｅｃｔ＿ｉｔｅｍｓ句が含まれない場合、「＄ｓｎｕｍ」は「０」であるため、ストリームデータ処理は実行されないと判定される。
【０２０８】
「＄ｓｎｕｍ」が「０」でないと判定された場合、データ解凍／並び替え処理部３０５は、処理結果を出力するファイルをファイルＢ３１３に決定し（Ｓ４５２）、Ｓ４３４に進む。
【０２０９】
「＄ｓｎｕｍ」が「０」であると判定された場合、データ解凍／並び替え処理部３０５は、処理結果を出力するファイルをファイルＤ３１５に決定し（Ｓ４５３）、Ｓ４３４に進む。
【０２１０】
データ解凍／並び替え処理部３０５は、ｄａｔａ［３６００］［＄ｉｎｕｍ］配列及び時刻を初期化する（Ｓ４５４）。具体的には、データ解凍／並び替え処理部３０５は、ｄａｔａ［３６００］［＄ｉｎｕｍ］をＮａＮ（Ｎｏｔ  ａ  Ｎｕｍｂｅｒ）値を用いて初期化し、また、時刻を表す変数ｌａｓｔｅｔを「０」に初期化する。本実施形態では、配列ｄａｔａの初期化の際、ＮａＮ値を用いたが、数値と重複しない値であれば、何でもよい。
【０２１１】
データ解凍／並び替え処理部３０５は、データ構造１（３４０）に示すパケットを一つ取り出す（Ｓ４５５）。具体的には、データ解凍／並び替え処理部３０５は、バッファからパケットを取り出す。バッファにパケットがない場合には、ファイルＡ３１２からパケットを取り出す。初回の処理時には、バッファにはパケットが格納されていないため、ファイルＡ３１２からパケットが取り出される。
【０２１２】
データ解凍／並び替え処理部３０５は、取り出されたパケットが空であるか否かを判定する（Ｓ４５６）。すなわち、取り出されたパケットに処理対象のデータが含まれているか否かが判定される。
【０２１３】
取り出されたパケットが空でないと判定された場合、データ解凍／並び替え処理部３０５は、当該パケットからデータを抽出する（Ｓ４５７）。具体的には、データ解凍／並び替え処理部３０５は、パケットから、ｄａｔｅｔｉｍｅ３４０１、ｉｄｘ３４０２、ｚｌｅｎ３４０３及びｚｂｌｋ３４０４を抽出する。
【０２１４】
データ解凍／並び替え処理部３０５は、同じ時刻の時系列データブロックを一括して処理するため、取り出されたパケットが処理時間範囲内のデータであるか否かを判定する（Ｓ４５８）。具体的には、ｌａｓｔｅｔには、前回受信したパケットのｄａｔｅｔｉｍｅ３４０１が保持されているので、今回受信したパケット（３４０）のｄａｔｅｔｉｍｅ３４０１とｌａｓｔｅｔとを比較することによって、当該パケットが処理時間の範囲である１時間以内のパケットであるか否かを判定できる。
【０２１５】
取り出されたパケットが処理時間範囲内のデータであると判定された場合、データ解凍／並び替え処理部３０５は、圧縮データを解凍する（Ｓ４５９）。具体的には、データ解凍／並び替え処理部３０５は、取り出されたパケットに含まれるｚｂｌｋ３４０４を解凍し、当該結果をｂｌｋに格納する。
【０２１６】
データ解凍／並び替え処理部３０５は、解凍されたデータを配列ｄａｔａに格納し（Ｓ４６０）、Ｓ４５５に戻りＳ４５５〜Ｓ４６０の処理を実行する。具体的には、データ解凍／並び替え処理部３０５は、ｂｌｋを配列ｄａｔａに格納する。また、データ解凍／並び替え処理部３０５は、ｌａｔｅｓｔにｄａｔｅｔｉｍｅ３４０１を格納する。
【０２１７】
Ｓ４５６において取り出されたパケットが空であると判定された場合、又は、Ｓ４５８において取り出されたパケットが処理時間範囲内のデータでないと判定された場合、データ解凍／並び替え処理部３０５は、取り出されたパケットをバッファに書き戻す（Ｓ４６１）。
【０２１８】
データ解凍／並び替え処理部３０５は、ループ回数を示す変数ｉに「０」に設定し、パケット内の１時間分の各データに対して処理４６３、処理４６４を繰り返し実行する（Ｓ４６２）。すなわち、変数ｉが「３６００」より大きくなるまで処理が繰り返し実行される。
【０２１９】
データ解凍／並び替え処理部３０５は、出力結果を生成する（Ｓ４６３）。すなわち、データ解凍／並び替え処理部３０５は、データ構造２（３４１）に示すようなデータを生成する。
【０２２０】
具体的には、変数ｉに対して、ｌａｔｅｓｔ＋ｉをｄａｔｅｔｉｍｅ３４１１に、「＄ｉｎｕｍ」をｖａｌｎ３４１２に、配列ｄａｔａをそれぞれデータ３４１３に格納する。これによって、ｉｎｐｕｔ＿ｉｔｅｍｓ句に指定されるセンサの１秒（１行）のデータに対応する出力結果が得られる。したがって、全ての変数ｉについて同様の処理を繰り返し実行することによって、ｉｎｐｕｔ＿ｉｔｅｍｓ句に指定されたセンサの１時間分のデータが出力結果として得られる。
【０２２１】
データ解凍／並び替え処理部３０５は、生成された出力結果をファイルＢ３１３又はファイルＤ３１５に出力する（Ｓ４６４）。
【０２２２】
データ解凍／並び替え処理部３０５は、１時間分のパケットの処理を終了したか否かを判定する（Ｓ４６５）。すなわち、変数ｉが「３６００」より大きいか否かが判定される。変数ｉが「３６００」未満の場合、１時間分のパケットの処理が終了していないと判定される。
【０２２３】
全ての変数ｉに対して処理が終了していないと判定された場合、すなわち、変数ｉが「３６００」未満の場合、データ解凍／並び替え処理部３０５は、Ｓ４６２に戻りＳ４６２〜Ｓ４６６の処理を実行する。
【０２２４】
全ての変数ｉに対して処理が終了したと判定された場合、すなわち、変数ｉが「３６００」より大きい場合、データ解凍／並び替え処理部３０５は、ファイルＡ３１２に格納される全てのパケットについて処理が終了したが否かを判定する（Ｓ４６６）。
【０２２５】
ファイルＡ３１２に格納される全てのパケットについて処理が終了していないと判定された場合、データ解凍／並び替え処理部３０５は、Ｓ４５４に戻りＳ４５４〜Ｓ４６６の処理を実行する。
【０２２６】
ファイルＡ３１２に格納される全てのパケットについて処理が終了したと判定された場合、データ解凍／並び替え処理部３０５は、処理を終了する。
【０２２７】
図１５は、本実施形態におけるストリームデータ処理部３０６の構成例を示す説明図である。
【０２２８】
ストリームデータ処理部３０６は、入力制御部５００、入力キュー５０１、ストリームデータ処理エンジン５０２、ユーザ定義関数５０３、出力キュー５０４及び出力制御部５０５を備える。
【０２２９】
入力制御部５００は、入力制御を実行する。具体的には、入力制御部５００は、ファイルＢ３１３から入力されるデータを受信し、受信したデータを入力キュー５０１に出力する。入力キュー５０１は、入力制御部５００に入力されたデータを格納する。
【０２３０】
ストリームデータ処理エンジン５０２は、入力キュー５０１からデータを取り出し、ＣＱＬ３１１に基づいて取り出された情報を分析し、分析結果を出力キュー５０４に出力する。
【０２３１】
ユーザ定義関数５０３は、ＣＱＬ３１１において使用される関数の演算方法の定義を格納する。なお、ユーザ定義関数５０３の詳細については、図１６を用いて後述する。
【０２３２】
出力キュー５０４は、ストリームデータ処理エンジン５０２から入力された分析結果を格納する。
【０２３３】
出力制御部５０５は、出力制御を実行する。具体的には、出力制御部５０５は、出力キュー５０４から分析結果を読み出し、ファイルＣに分析結果を出力する。
【０２３４】
本実施形態では、まず、ファイルＢ３１３に格納されるｖａｌｎ３４１２が「＄ｉｎｕｍ」であるデータ、すなわち、「＄ｉｎｕｍ」個のセンサ１００についての値が格納されたデータがファイルＢ３１３からストリームデータ処理部３０６に入力される。ストリームデータ処理部３０６は、ＣＱＬ３１１に基づいて処理を実行した結果をファイルＣ３１４に出力する。
【０２３５】
具体的には、当該ファイルＣ３１４に格納されるデータのｖａｌｎ３４１２には「＄ｓｎｕｍ＋１」が格納され、データ３４１３のうちｖａｌ［０］〜ｖａｌ［＄ｓｎｕｍ−１］には、クエリ１５５のｓｅｌｅｃｔ＿ｉｔｅｍｓ句で指定された処理結果が格納され、データ３４１３のうちｖａｌ［＄ｓｎｕｍ］には、クエリ１５５のｗｈｅｒｅ＿ｃｏｎｄｉｔｉｏｎ句で指定された条件に対する処理結果が格納される。
【０２３６】
ここで、ｗｈｅｒｅ＿ｃｏｎｄｉｔｉｏｎ句において指定された条件に一致する場合、ｖａｌ［＄ｓｎｕｍ］には「１」が格納される。また、ｗｈｅｒｅ＿ｃｏｎｄｉｔｉｏｎ句において指定された条件に一致しない場合、ｖａｌ［＄ｓｎｕｍ］には「０」が格納される。ｖａｌ［＄ｓｎｕｍ］に格納される値は、後述する切り出し処理部３０７が切り出し範囲５５２（図１９参照）を決定するためのフラグとして用いられる。
【０２３７】
本実施形態では、ｓｅｌｅｃｔ＿ｉｔｅｍｓ句で指定された「＄ｓｎｕｍ」個の処理結果に、ｗｈｅｒｅ＿ｃｏｎｄｉｔｉｏｎ句の処理結果が一つ付加されるため、ファイルＣ３１４に格納されるデータのデータ３４１３には、「＄ｓｎｕｍ＋１」個の値が含まれる。
【０２３８】
図１６は、本実施形態のユーザ定義関数５０３の一例を示す説明図である。
【０２３９】
ユーザ定義関数５０３は、識別番号５０３１、関数名５０３２、動作説明５０３３及び備考５０３４を含む。
【０２４０】
識別番号５０３１は、ユーザ定義関数５０３に含まれる関数を一意に識別するための識別子である。関数名５０３２は、ＣＱＬ３１１に含まれる関数の名称である。動作説明５０３３は、関数名５０３２に対応する関数の演算内容である。備考５０３４は、関数名５０３２に対応する関数についての付加的情報である。
【０２４１】
図１７に示す例では、識別番号５０３１が「１」〜「７」の関数は、「ＬＡＢＥＬ」と「ｎｕｍ」とが動作説明５０３３に示す関係を満たすデータを抽出する関数である。識別番号５０３１が「８」及び「９」は、「ＬＡＢＥＬ」が動作説明５０３３に示す所定の区間内のデータを抽出する関数である。識別番号５０３１が「１０」〜「１２」は、動作説明５０３３に示す論理演算を実行する関数である。
【０２４２】
なお、図８Ｂに示すＣＱＬ例１（３５３）のＧｒａｔｅｒＴｈａｎＯｒＥｑｕａｌＴｏ関数では、「ＬＡＢＥＬ」は「Ｌ１」であり、「ｎｕｍ」は「７０」である。ＣＱＬ例１（３５３）のＰｏｓｉｔｉｖｅＴｈｒｅｓｈｏｌｄ関数では、「ＬＡＢＥＬ」は「Ｌ３」であり、「ｎｕｍ１」及び「ｎｕｍ２」は「３００」及び「２００」である。
【０２４３】
以下、識別番号５０３１が「８」及び「９」の関数によって抽出された所定の区間のデータについて説明する。
【０２４４】
図１７は、本実施形態のユーザ定義関数５０３に含まれる関数によって抽出された所定の区間のデータの一例を示す説明図である。
【０２４５】
ＰｏｓｉｔｉｖｅＴｈｒｅｓｈｏｌｄの例は、識別番号５０３１が「８」の関数によって抽出された所定の区間のデータを示す。図１７の動作説明５０３３に示すように、ＰｏｓｉｔｉｖｅＴｈｒｅｓｈｏｌｄでは、「ＬＡＢＥＬ」の値が「ｎｕｍ１」以上になり、「ＬＡＢＥＬ」の値が「ｎｕｍ２」より小さくなるまでの区間のデータが抽出される。
【０２４６】
ＮｅｇａｔｉｖｅＴｈｒｅｓｈｏｌｄの例は、識別番号５０３１が「９」の関数によって抽出された所定の区間のデータを示す。図１７の動作説明５０３３に示すように、ＮｅｇａｔｉｖｅＴｈｒｅｓｈｏｌｄでは、「ＬＡＢＥＬ」が「ｎｕｍ１」以下になり、「ＬＡＢＥＬ」が「ｎｕｍ２」より大きくなるまでの区間のデータが抽出される。
【０２４７】
以下、ストリームデータ処理部３０６が実行する処理について説明する。
【０２４８】
図２７は、本実施形態のストリームデータ処理部３０６によって実行される処理の一例を説明するフローチャートである。
【０２４９】
ストリームデータ処理部３０６は、ＣＱＬを読み出し（Ｓ９００）、更に変数ｒｕｎｎｉｎｇを「１」に設定する（Ｓ９０１）。
【０２５０】
次に、ストリームデータ処理部３０６は、入力制御スレッド及び出力制御スレッドを起動する（Ｓ９０２、Ｓ９０３）。これによって、入力制御部５００及び出力制御部５０５が、処理を開始する。入力制御部５００によって実行される処理については、図２８を用いて後述する。また、出力制御部５０５によって実行される処理については、図２９を用いて後述する。
【０２５１】
ストリームデータ処理部３０６は、出力キュー５０４に空きがあるか否かを判定する（Ｓ９０４）。
【０２５２】
出力キュー５０４に空きがないと判定された場合、ストリームデータ処理部３０６は、出力キュー５０４に空きができるまで待つ続ける（Ｓ９０５）。
【０２５３】
出力キュー５０４に空きがあると判定された場合、ストリームデータ処理部３０６は、入力キュー５０１にデータが格納されているか否かを判定する（Ｓ９０６）。
【０２５４】
入力キュー５０１にデータが格納されていると判定された場合、ストリームデータ処理部３０６は、入力キュー５０１からデータを取得する（Ｓ９０７）。
【０２５５】
ストリームデータ処理部３０６は、ＣＱＬに基づいて取得されたデータを処理する（Ｓ９０８）。具体的には、ストリームデータ処理エンジン５０２が、ＣＱＬを実行する。
【０２５６】
ストリームデータ処理部３０６は、ＣＱＬの実行結果を出力キュー５０４に格納し（Ｓ９０９）、Ｓ９０４に戻り同様の処理を実行する。
【０２５７】
Ｓ９０６において、入力キュー５０１にデータが格納されていないと判定された場合、ストリームデータ処理部３０６は、変数ｒｕｎｎｎｉｎｇが「１」であるか否かを判定する（Ｓ９１１）。
【０２５８】
変数ｒｕｎｎｎｉｎｇが「１」であると判定された場合、ストリームデータ処理部３０６は、処理待ちの待ち状態となって（Ｓ９１０）、Ｓ９０６に戻り同様の処理を実行する。
【０２５９】
変数ｒｕｎｎｎｉｎｇが「１」でないと判定された場合、ストリームデータ処理部３０６は、出力キュー５０４にデータが格納されているか否かを判定する（Ｓ９１２）。
【０２６０】
出力キュー５０４にデータが格納されていないと判定された場合、ストリームデータ処理部３０６は、出力キュー５０４にデータが格納されるまで待ち続ける（Ｓ９１３）。
【０２６１】
出力キュー５０４にデータが格納されていると判定された場合、ストリームデータ処理部３０６は、入力制御スレッド及び出力制御スレッドを停止させ（Ｓ９１４、Ｓ９１５）、処理を終了する。これによって、入力制御部５００及び出力制御部５０５の処理が終了する。
【０２６２】
図２８は、本実施形態の入力制御部５００によって実行される処理の一例を説明するフローチャートである。
【０２６３】
入力制御部５００は、入力制御の処理を開始すると（Ｓ９２０）、入力キュー５０１に空きがあるか否かを判定する（Ｓ９２２）。
【０２６４】
入力キュー５０１に空きがないと判定された場合、入力制御部５００は、入力キュー５０１に空きができるまで待ち続ける（Ｓ９２１）。
【０２６５】
入力キュー５０１に空きがあると判定された場合、入力制御部５００は、ファイルＢ３１３にデータが存在するか否かを判定する（Ｓ９２３）。
【０２６６】
ファイルＢ３１３にデータが存在しないと判定された場合、入力制御部５００は、変数ｒｕｎｎｎｉｎｇを「０」に設定して（Ｓ９２６）、処理を終了する（Ｓ９２７）。
【０２６７】
ファイルＢ３１３にデータが存在すると判定された場合、入力制御部５００は、ファイルＢ３１３からデータを取得し（Ｓ９２４）、取得されたデータを入力キュー５０１に格納し（Ｓ９２５）、Ｓ９２２に戻り同様の処理を実行する。
【０２６８】
図２９は、本実施形態の出力制御部５０５によって実行される処理の一例を説明するフローチャートである。
【０２６９】
出力制御部５０５は、出力制御の処理を開始すると（Ｓ９３０）、出力キュー５０４にデータが存在するか否かを判定する（Ｓ９３１）。
【０２７０】
出力キュー５０４にデータが存在しないと判定された場合、出力制御部５０５は、出力キュー５０４にデータが格納するまで待ち続ける（Ｓ９３２）。
【０２７１】
出力キュー５０４にデータが存在すると判定された場合、出力制御部５０５は、出力キュー５０４からデータを取得し（Ｓ９３３）、取得されたデータをファイルＣ３１４に格納する（Ｓ９３４）。
【０２７２】
出力制御部５０５は、その後、Ｓ９３１に戻り同様の処理を実行する。
【０２７３】
図１８Ａは、本実施形態の切り出し処理部３０７によって実行される処理の一例を説明するフローチャートである。
【０２７４】
切り出し処理部３０７は、ストリームデータ処理部３０６の処理が終了した後に処理を開始する。
【０２７５】
切り出し処理部３０７は、変数ｐｒｅｖ＿ｃｎｔ、変数ｐｏｓｔ＿ｃｎｔ及び変数ｌａｔｅｓｔの初期化と、ＦＩＦＯバッファの生成及び初期化と、ｉｎｄａｔａバッファの定義及び初期化とを実行する（Ｓ５７０）。
【０２７６】
具体的には、切り出し処理部３０７は、変数ｐｒｅｖ＿ｃｎｔ及び変数ｐｏｓｔ＿ｃｎｔを「０」に初期化する。また、切り出し処理部３０７は、変数ｌａｔｅｓｔを「＄ｓｔａｒｔ−＄ｐｒｅｖ−１」と初期化する。また、切り出し処理部３０７は、（＄ｐｒｅｖ＋１）段のＦＩＦＯバッファを生成し、生成されたＦＩＦＯバッファを「０」に初期化する。なお、変数ｐｒｅｖ＿ｃｎｔ及び変数ｐｏｓｔ＿ｃｎｔは、後述する切り出し処理で用いられる変数である。
【０２７７】
切り出し処理部３０７は、ファイルＣ３１４からデータを一つ読み出し、ｉｎｄａｔａに格納する（Ｓ５７１）。なお、ファイルＣ３１４には、ｓｅｌｅｃｔ＿ｉｔｅｍｓ句の演算結果、１行に対応するデータ構造２（３４１）のデータが複数個格納されている。
【０２７８】
切り出し処理部３０７は、ファイルＣ３１４から読み出されたデータが、ファイルＣ３１４に格納される終端のデータであるか否かを判定する（Ｓ５７２）。例えば、読み出されたデータのｄａｔｅｔｉｍｅ３４１１が、グローバル変数３０９に含まれる「＄ｅｎｄ」と同一か否かを判定することによって可能である。
【０２７９】
ファイルＣ３１４から読み出されたデータが、ファイルＣ３１４に格納される終端のデータでないと判定された場合、切り出し処理部３０７は、ｉｎｄａｔａに含まれるｄａｔｅｔｉｍｅ３４１１及び変数ｌａｔｅｓｔを用いて、変数ｄｉｆｆを「ｄａｔｅｔｉｍｅ−ｌａｔｅｓｔ」と設定し（Ｓ５７３）、Ｓ５７５に進む。
【０２８０】
ファイルＣ３１４から読み出されたデータが、ファイルＣ３１４に格納される終端のデータであると判定された場合、切り出し処理部３０７は、変数ｄｉｆｆを「＄ｐｒｅｖ＋１」に設定し（Ｓ５７４）、Ｓ５７５に進む。
【０２８１】
切り出し処理部３０７は、変数ｄｉｆｆに設定された値を変数ｉに代入し、変数ｉが「０」より小さくなるまで繰り返し処理を実行する（Ｓ５７５）。
【０２８２】
切り出し処理部３０７は、変数ｉが「１」であるか否かを判定する（Ｓ５７６）。
【０２８３】
変数ｉが「１」でないと判定された場合、切り出し処理部３０７は、ＦＩＦＯバッファに挿入するダミーデータ（以下、挿入データとも記載する）を生成し（Ｓ５７７）、Ｓ５８０に進む。
【０２８４】
具体的には、データ構造２（３４１）に示すような挿入データが生成される。この場合、挿入データのｄａｔｅｔｉｍｅ３４１１には「ｌａｔｅｓｔ＋１」が設定され、ｖａｌｎ３４１２には「＄ｓｎｕｍ＋１」が設定される。また、挿入データのデータ３４１３のうちｖａｌ［０］〜［＄ｓｎｕｍ−１］には空データを示す値（ＮａＮ）が設定され、ｖａｌ［＄ｓｎｕｍ］には「０」が設定される。
【０２８５】
変数ｉが「１」であると判定された場合、切り出し処理部３０７は、ファイルＣ３１４から読み出されたデータ（ｉｎｄａｔｅ）が、ファイルＣ３１４に格納される終端のデータであるか否かを判定する（Ｓ５７８）。当該判定は、Ｓ５７２と同一の方法が用いられる。
【０２８６】
ファイルＣ３１４から読み出されたデータ（ｉｎｄａｔｅ）が、ファイルＣ３１４に格納される終端のデータであると判定された場合、切り出し処理部３０７は、処理を終了する。
【０２８７】
ファイルＣ３１４から読み出されたデータ（ｉｎｄａｔｅ）が、ファイルＣ３１４に格納される終端のデータでないと判定された場合、切り出し処理部３０７は、入力データを生成し（Ｓ５７９）、Ｓ５８０に進む。具体的には、切り出し処理部３０７は、ｉｎｄａｔａに格納された値を入力データに設定に設定する。
【０２８８】
切り出し処理部３０７は、入力データを用いて切り出し処理を実行する（Ｓ５８０）。切り出し処理の詳細については、図１８Ｂを用いて後述する。
【０２８９】
切り出し処理部３０７は、処理を繰り返し実行するか否かを判定する（Ｓ５８１、Ｓ５７５）。すなわち、切り出し処理部３０７は、Ｓ５７５のｆｏｒ文ループの実行を続行するか否かを判定する。具体的には、変数ｉをデクリメントし、「ｉ＞０」であるか否かが判定される。判定結果が真の場合は、処理を繰り返し実行すると判定される。
【０２９０】
処理を繰り返し実行すると判定された場合には、切り出し処理部３０７は、Ｓ５７５に戻り同様の処理（Ｓ５７５〜Ｓ５８１）を実行する。
【０２９１】
処理を繰り返し実行しないと判定された場合には、切り出し処理部３０７は、Ｓ５７１に戻り同様の処理（Ｓ５７１〜Ｓ５８１）を実行する。
【０２９２】
図１８Ｂは、本実施形態の切り出し処理の詳細を説明するフローチャートである。
【０２９３】
切り出し処理部３０７は、挿入データのｄａｔｅｔｉｍｅを、変数ｌａｔｅｓｔに設定する（Ｓ５８２）。
【０２９４】
切り出し処理部３０７は、ＦＩＦＯバッファに一つの挿入データを入力し、また、ＦＩＦＯバッファから一つのデータを出力する（Ｓ５８３）。以下では、ＦＩＦＯバッファから出力されるデータを出力データとも記載する。
【０２９５】
切り出し処理部３０７は、入力された挿入データのｖａｌ［＄ｓｎｕｍ］が「１」であるか否かを判定する（Ｓ５８４）。
【０２９６】
入力された挿入データのｖａｌ［＄ｓｎｕｍ］が「１」でないと判定された場合、切り出し処理部３０７は、Ｓ５８６に進む。
【０２９７】
入力された挿入データのｖａｌ［＄ｓｎｕｍ］が「１」であると判定された場合、切り出し処理部３０７は、変数ｐｒｅｖ＿ｃｎｔの値を「１」加算し（Ｓ５８５）、Ｓ５８６に進む。
【０２９８】
切り出し処理部３０７は、出力された出力データのｖａｌ［＄ｓｎｕｍ］が「１」であるか否かを判定する（Ｓ５８６）。
【０２９９】
出力された出力データのｖａｌ［＄ｓｎｕｍ］が「１」でないと判定された場合、切り出し処理部３０７は、Ｓ５８８に進む。
【０３００】
出力された出力データのｖａｌ［＄ｓｎｕｍ］が「１」であると判定された場合、切り出し処理部３０７は、変数ｐｒｅｖ＿ｃｎｔの値を「１」減算し（Ｓ５８７）、Ｓ５８８に進む。
【０３０１】
切り出し処理部３０７は、変数ｐｒｅｖ＿ｃｎｔ、変数ｐｏｓｔ＿ｃｎｔ及び入力された挿入データのｖａｌ［＄ｓｎｕｍ］の値に基づいて、切り出し条件判定処理を実行する（Ｓ５８８）。具体的には以下に示す判定処理が実行される。
【０３０２】
Ｓ５８８では、切り出し処理部３０７は、３つの判定処理を実行する。
【０３０３】
第１に、切り出し処理部３０７は、変数ｐｒｅｖ＿ｃｎｔの値が「０」より大きいか否かを判定する。以下、当該判定を切り出し条件（１）と記載する。
【０３０４】
第２に、切り出し処理部３０７は、出力された出力データのｖａｌ［＄ｓｎｕｍ］の値が「１」であるか否かを判定する。以下、当該判定を切り出し条件（２）と記載する。
【０３０５】
第３に、切り出し処理部３０７は、変数ｐｏｓｔ＿ｃｎｔの値が「０」より大きいか否かを判定する。以下、当該判定を切り出し条件（３）と記載する。
【０３０６】
切り出し処理部３０７は、切り出し条件判定処理の実行結果に基づいて、切り出し条件（１）、（２）又は（３）の少なくともいずれかを満たすか否かを判定する（Ｓ５８９）。
【０３０７】
切り出し条件（１）、（２）又は（３）のいずれも満たさないと判定された場合、切り出し処理部３０７は、切り出し処理Ｓ５８０の処理を終え、Ｓ５８１へ進む。
【０３０８】
切り出し条件（１）、（２）又は（３）の少なくともいずれかを満たすと判定された場合、切り出し処理部３０７は、切り出し条件判定処理の実行結果に基づいて、切り出し条件（１）又は（２）の少なくともいずれかを満たすか否かを判定する（Ｓ５９０）。
【０３０９】
切り出し条件（１）又は（２）の少なくともいずれかを満たすと判定された場合、切り出し処理部３０７は、「＄ｐｏｓｔ」の値を変数ｐｏｓｔ＿ｃｎｔに設定し（Ｓ５９１）、Ｓ５９３に進む。
【０３１０】
切り出し条件（１）又は（２）のいずれも満たさないと判定された場合、切り出し処理部３０７は、変数ｐｏｓｔ＿ｃｎｔを「１」減算し（Ｓ５９２）、Ｓ５９３に進む。
【０３１１】
切り出し処理部３０７は、fｏｕｔデータをファイルＤ３１５に出力し（Ｓ５９３）、切り出し処理Ｓ５８０の処理を終え、Ｓ５８１へ進む。
【０３１２】
当該処理によって、切り出し条件を満たすもののみがファイルＤ３１５に出力される。なお、ファイルＤ３１５には、クエリ１５５のｗｈｅｒｅ＿ｃｏｎｄｉｔｉｏｎ句で指定された条件を満たすデータを含む前後のオフセットが付加された出力結果が格納される。
【０３１３】
具体的には、切り出し処理部３０７は、Ｓ５８８、Ｓ５８９において、切り出し条件（１）を満たすこと示すフラグ、切り出し条件（２）を満たすことを示すフラグ、及び切り出し条件（３）を満たすことを満たすフラグを各挿入データに付与する。さらに、切り出し処理部３０７は、当該フラグに基づいて各切り出し条件の判定を行う。
【０３１４】
以下、当該切り出し処理部３０７が実行する処理によって出力される出力結果について説明する。
【０３１５】
図１９は、本実施形態の切り出し処理部３０７によって出力される出力結果の一例を示す説明図である。
【０３１６】
クエリ例３（５５０）が入力された場合に、切り出し処理部３０７は、出力結果５５１に示すような結果が出力される。
【０３１７】
具体的には、ｗｈｅｒｅ＿ｃｏｎｄｉｔｉｏｎ句においてＬＡＢＥＬが「Ｌ１」であるＳｅｎｓｏｒ１の値が「１００」以上である条件成立範囲５５４、前方オフセット５５３及び後方オフセット５５５を含む切り出し範囲５５２、又は、条件成立範囲５５４、前方オフセット５５３、後方オフセット５５５及び結合オフセット５５６を含む切り出し範囲５５２が出力される。
【０３１８】
すなわち、切り出し範囲５５２に示すような範囲のデータが切り出され、出力結果として出力される。
【０３１９】
なお、結合オフセット５５６は、前方オフセット５５３と後方オフセット５５５とが重なる部分を一つのオフセットとして結合したものである。
【０３２０】
当該出力結果は、図１８のＳ５８９において付与されたフラグに基づいて生成されたものである。すなわち、切り出し条件（１）〜（３）のいずれかのフラグが付与された挿入データが切り出し範囲５５２と出力される。具体的には以下の通りである。
【０３２１】
切り出し条件（２）のフラグが付与された挿入データは、切り出し範囲５５２のうち条件成立範囲５５４に含まれるデータとして出力される。
【０３２２】
切り出し条件（１）のフラグが付与された挿入データは、切り出し範囲５５２のうち前方オフセット５５３に含まれるデータとして出力される。
【０３２３】
切り出し条件（３）のフラグが付与された挿入データは、切り出し範囲５５２のうち後方オフセット５５５に含まれるデータとして出力される。
【０３２４】
切り出し処理部３０７は、それぞれの切り出し条件（１）〜（３）に一致する挿入データを切り出し、切り出されたデータを時間順に並び替えて（ソートして）、出力する。
【０３２５】
なお、切り出し条件（１）〜（３）のいずれかのフラグが２以上付与された挿入データは、結合オフセット５５６を含む切り出し範囲５５２として出力される。
【０３２６】
図２０は、本発明の実施形態のデータ出力部３０８によって実行される処理の一例を説明するフローチャートである。
【０３２７】
データ出力部３０８は、ｔｍｐバッファを定義する（Ｓ６０５）。
【０３２８】
データ出力部３０８は、ファイルＤ３１５からデータを読み出し、読み出されたデータをｔｍｐに格納する（Ｓ６００）。読み出されるデータは、ｓｅｌｅｃｔ＿ｉｔｅｍｓ句の演算結果、１行に対応するデータ構造２（３４１）に示すようなデータである。
【０３２９】
データ出力部３０８は、読み出されたデータのｄａｔｅｔｉｍｅ３４１１を参照し、検索結果抽出処理を実行する（Ｓ６０１）。具体的には、以下の２つの処理が実行される。
【０３３０】
第１に、データ出力部３０８は、ｄａｔｅｔｉｍｅ３４１１に格納される値が、クエリ１５５のｗｈｅｒｅ＿ｔｉｍｅｒａｎｇｅ句において指定された時間範囲に含まれるか否かを判定する。すなわち、ｄａｔｅｔｉｍｅ３４１１に格納される値が、「＄ｓｔａｒｔ」以上かつ「＄ｅｎｄ」以下であるか否かを判定する。以下、当該判定を出力条件（１）と記載する。
【０３３１】
出力条件（１）を満たすか否かの判定処理が実行される理由は、ＳＱＬ３１０によって検索される範囲のデータが、クエリ１５５において指定された時間範囲より広い範囲のデータが対象となっているためである。すなわち、図１１Ｂにおいて説明したように、ＳＱＬ３１０を生成するときに用いられる「＄ｄｂ＿ｓｔａｒｔ」（図１１Ｂ参照）は、「＄ｓｔａｒｔ」より前の時刻のデータについても処理しているためである。
【０３３２】
第２に、データ出力部３０８は、間引き処理を実行する。具体的には、ｄａｔｅｔｉｍｅ３４１１に格納される値を、クエリ１５５のｓｔｅｐ句において指定された値、すなわち、「＄ｓｔｅｐ」で除算した余りが「０」となるか否かを判定する。以下、当該判定を出力条件（２）と記載する。クエリ例１（３５０）に示す例では、出力条件（２）によって、５秒ごとのデータが出力される。
【０３３３】
データ出力部３０８は、Ｓ６０１における検索結果抽出処理の結果に基づいて、出力条件（１）及び出力条件（２）を満たすか否かを判定する（Ｓ６０２）。
【０３３４】
出力条件（１）及び出力条件（２）の両判定を同時に満たさないと判定された場合、データ出力部３０８は、Ｓ６０４に進む。すなわち、当該データは出力されない。
【０３３５】
出力条件（１）及び出力条件（２）を満たすと判定された場合、データ出力部３０８は、検索結果生成処理を実行する（Ｓ６０３）。具体的には、データ出力部３０８は、ｔｍｐに格納されるデータをデータ構造３（３４２）に示すようなＣＳＶ形式に変換して検索結果ファイル１５６に出力する。
【０３３６】
データ出力部３０８は、Ｄ３１５に格納される全てのデータについて処理が完了したか否かを判定する（Ｓ６０４）。
【０３３７】
本実施形態では、データベース検索処理では１時間単位に圧縮された圧縮データを検索し、データ解凍／並び替え処理では１時間単位に圧縮された圧縮データを解凍して１秒単位のデータを生成し、以後、ストリームデータ処理、切り出し処理、出力データ生成処理では１秒単位のデータについて処理を実行する。なお、出力データ生成処理では、１秒単位でデータを処理するが、＄ｓｔｅｐで指定した単位でデータを出力する。
【０３３８】
これによって、プラント１０２において異常が発生した場合に、当該異常の検索精度を落とすことなく、高速に検索することができ、また、異常発生の原因を特定するためのデータ範囲を出力することが可能となる。
【０３３９】
図２１は、本実施形態において、特徴値検索処理を実行する場合のクエリ１５５及びＳＱＬ３１０の一例を示す説明図である。
【０３４０】
特徴値検索処理を実行する場合、クエリ１５５にｍｅｔａ＿ｓｅａｒｃｈ句が追加される点が異なる。これによって、ＤＡＴテーブル２０８に含まれるＭａｘＶａｌカラム２０８４及びＭｉｎＶａｌカラム２０８５を用いた検索が可能となる。
【０３４１】
図２１に示すようにクエリ例４（７００）には、ＭａｘＶａｌカラム２０８４の値が「１００」より大きいデータが検索の対象となる。
【０３４２】
データ検索モジュール１５７は、ｍｅｔａ＿ｓｅａｒｃｈ句が含まれるクエリ１５５を受け付けた場合、特徴値検索用ＳＱＬ生成部３０２は、図２１に示すようなＳＱＬ例４−１（７０１）を生成し、ＳＱＬ例４−１（７０１）が実行された後に、ＳＱＬ例４−２（７０２）を生成する。
【０３４３】
ＳＱＬ例４−１（７０１）は、時刻切り出し用ＳＱＬであり、特徴値に一致するデータの時刻（Ｄａｔｅｔｉｍｅ）を抽出するためのＳＱＬである。
【０３４４】
ＳＱＬ例４−２（７０２）は、特徴値検索用ＳＱＬであり、ＳＱＬ例４−１（７０１）によって抽出されたＤａｔｅｔｉｍｅの範囲において、データベース１５４の検索を実行するためのＳＱＬである。
【０３４５】
ＳＱＬ例４−２（７０２）は、ＳＱＬ例１（３５２）と同様のＳＱＬ３１０であるが、ＳＱＬ例１（３５２）と比較して、ＳＱＬ例４−２（７０２）ではＳＱＬ例４−１（７０１）の実行によって検索範囲が限定されるため、検索処理の時間を大幅に短縮することが可能となる。
【０３４６】
例えば、異常値があらかじめわかっている場合は、当該異常値を用いて検索処理を実行することによって、全検索する場合に比べて検索するデータの範囲を絞り込むことが可能になるため、処理時間を短縮することができる。
【０３４７】
また、図２１のクエリ例４において、ユーザは必ずしもｍｅｔａ＿ｓｅｒａｃｈ句を指定する必要はない。一般に閾値判定において、ある閾値を超過した時系列データは、最大値が当該閾値を超過したパケット集合に含まれている。また同様に、ある閾値を下回る時系列データは、最小値が当該閾値を下回るパケット集合に含まれている。このようなクエリ変換規則を管理することにより、ｍｅｔａ＿ｓｅａｒｃｈ句を自動生成することができる。具体的には、図２１のクエリ例４において、ｗｈｅｒｅ＿ｃｏｎｄｉｔｉｏｎ句においてｇｒｅａｔｅｒｔｈａｎ句と閾値が指定されている場合、ｍｅｔａ＿ｓｅａｔｃｈ句において最大値が閾値を超過する句としてＭａｘＶａｌ＞閾値を自動付与する。またｗｈｅｒｅ＿ｃｏｎｄｉｔｉｏｎ句においてｌｅｓｓｔｈａｎ句と閾値が指定されている場合、ｍｅｔａ＿ｓｅａｔｃｈ句において最大値が閾値を超過する句としてＭｉｎＶａｌ＜閾値を自動付与する。このようなクエリ変換規則は、システムにおいてあらかじめ登録しておいてもよいし、ユーザが後で登録可能にしておいてもよい。
【０３４８】
図２２は、本実施形態において、特徴値検索用のＳＱＬ３１０を生成するためのＳＱＬテンプレートを示す説明図である。
【０３４９】
特徴値検索用ＳＱＬ生成部３０２は、時刻切り出し用ＳＱＬテンプレート７１０及び特徴値検索用ＳＱＬテンプレート７１１を保持する。
【０３５０】
時刻切り出し用ＳＱＬテンプレート７１０は、特徴値検索を実行する場合のＳＱＬ３１０を生成するためのテンプレートであり、特徴値に一致するデータが含まれる圧縮データの時刻を抽出するためのＳＱＬである。
【０３５１】
具体的には、ＩＤカラム２０７２とＩＤカラム２０８２とが同一であるＳＩＤテーブル２０７とＤＡＴテーブル２０８とを組み合わせたテーブルから、時刻（Ｄａｔｅｔｉｍｅ）を所定の条件に基づいて検索するＳＱＬであることを示す。
【０３５２】
所定の条件は、ｗｈｅｒｅ句以下に定義されている。すなわち、データを時間順に並び替え、指定されたセンサ名、指定された特徴値及び指定された時間区間に一致するデータを抽出することが定義されている。
【０３５３】
特徴値検索用ＳＱＬテンプレート７１１は、特徴値検索を実行する場合のＳＱＬ３１０を生成するためのテンプレートであり、時刻切り出し用ＳＱＬテンプレート７１０を用いて生成されたＳＱＬによって抽出された時刻範囲において、圧縮データを検索するためのＳＱＬである。
【０３５４】
図２２に示す例では、ＩＤカラム２０７２とＩＤカラム２０８２とが同一であるＳＩＤテーブル２０７とＤＡＴテーブル２０８とを組み合わせたテーブルから、時刻（Ｄａｔｅｔｉｍｅ）、センサ名（ＳＩＤ．Ｎａｍｅ）及び圧縮データ（ＤＡＴ．ＣＤＡＴＡ）を所定の条件に基づいて検索するＳＱＬであることを示す。
【０３５５】
所定の条件は、ｗｈｅｒｅ句以下に定義される。すなわち、データを時間順に並び替え、指定されたセンサ名及び指定された時間区間に一致するデータを取得することが定義されている。
【０３５６】
図２３は、本実施形態の特徴値検索用ＳＱＬ生成部３０２によって実行される処理の一例を説明するフローチャートである。
【０３５７】
特徴値検索用ＳＱＬ生成部３０２は、グローバル変数３０９を用いて、「＄ｍｅｔａ＿ｓｉｇｎａｌ」及び「＄ｍｅｔａ＿ｃｏｎｄ」を生成する（Ｓ７２０）。具体的には、特徴値検索用ＳＱＬ生成部３０２は、グローバル変数３０９に含まれる「＄ｍｅｔａ」を用いて、＄ｍｅｔａ分解処理７３０を実行する。すなわち、特徴値検索用ＳＱＬ生成部３０２は、「＄ｍｅｔａ」を「＄ｍｅｔａ＿ｓｉｇｎａｌ」及び「＄ｍｅｔａ＿ｃｏｎｄ」に分解する。
【０３５８】
特徴値検索用ＳＱＬ生成部３０２は、ワーク用の変数＄ｄｔ＿ｔｍｐを定義する（Ｓ７２０１）。
【０３５９】
特徴値検索用ＳＱＬ生成部３０２は、時刻切り出し用ＳＱＬを生成する（Ｓ７２１）。
【０３６０】
具体的には、まず、特徴値検索用ＳＱＬ生成部３０２は、「＄ｍｅｔａ＿ｓｔａｒｔ」＝「＄ｓｔａｒｔ」と設定し、さらに、分及び秒単位の値を「０」に初期化する。また、特徴値検索用ＳＱＬ生成部３０２は、「＄ｍｅｔａ＿ｅｎｄ」＝「＄ｅｎｄ」と設定する。次に、特徴値検索用ＳＱＬ生成部３０２は、「＄ｍｅｔａ＿ｓｉｇｎａｌ」、「＄ｍｅｔａ＿ｃｏｎｄ」、「＄ｍｅｔａ＿ｓｔａｒｔ」及び「＄ｍｅｔａ＿ｅｎｄ」を時刻切り出し用ＳＱＬテンプレート７１０に代入して、時刻切り出し用ＳＱＬを生成する。
【０３６１】
特徴値検索用ＳＱＬ生成部３０２は、時刻切り出し用ＳＱＬをデータベース１５４に対して発行する（Ｓ７２２）。
【０３６２】
特徴値検索用ＳＱＬ生成部３０２は、時刻切り出し用ＳＱＬを実行したデータベース１５４から実行結果を取得し、＄ｄｔ＿ｔｍｐへ格納する（Ｓ７２３）。具体的には、時刻切り出し用ＳＱＬにおいて指定された条件に一致する時刻データが実行結果として取得され、＄ｄｔ＿ｔｍｐへ格納される。
【０３６３】
特徴値検索用ＳＱＬ生成部３０２は、＄ｄｔ＿ｔｍｐに格納された１行分のデータがＮｕｌｌである否かを判定する（Ｓ７２４）。すなわち、全ての実行結果について処理が終了したか否かが判定される。
【０３６４】
＄ｄｔ＿ｔｍｐに格納された１行分のデータがＮｕｌｌであると判定された場合、特徴値検索用ＳＱＬ生成部３０２は、＄ｄｂ＿ｉｎｐｕｔ＝＄ｉｎｐｕｔとして＄ｄｂ＿ｉｎｐｕｔを生成し、さらに、特徴値検索用ＳＱＬを生成し（Ｓ７２５）、処理を終了する。具体的には、特徴値検索用ＳＱＬ生成部３０２は、特徴値検索用ＳＱＬテンプレート７１１に「＄ｄｂ＿ｉｎｐｕｔ」及び「＄ｄｂ＿ｄｔｓｅｔ」を代入することによって特徴値検索用ＳＱＬを生成する。
【０３６５】
＄ｄｔ＿ｔｍｐに格納された１行分のデータがＮｕｌｌでないと判定された場合、特徴値検索用ＳＱＬ生成部３０２は、時刻＄ｄｔ＿ｔｍｐのセンサデータが格納されている、時系列データブロックの開始時刻、及び、終了時刻、すなわち、「＄ｄｂ＿ｓｔａｒｔ」及び「＄ｄｂ＿ｅｎｄ」を算出する（Ｓ７２６）。
【０３６６】
具体的には、「＄ｄｂ＿ｓｔａｒｔ」については、特徴値検索用ＳＱＬ生成部３０２は「＄ｄｂ＿ｓｔａｒｔ＝＄ｄｔ＿ｔｍｐ−＄ｒａｎｇｅ」を計算し、さらに、当該計算結果の分及び秒単位の値を「０」に初期化される。また、「＄ｄｂ＿ｅｎｄ」については、「＄ｄｂ＿ｅｎｄ＝＄ｄｂ＿ｓｔａｒｔ＋３５９９」を計算した値が格納される。「３５９９」を加算する理由は、本実施形態では１時間単位でデータを圧縮してデータベースへ格納しているためである。
【０３６７】
特徴値検索用ＳＱＬ生成部３０２は、Ｓ７２６で算出された「＄ｄｂ＿ｓｔａｒｔ」及び「＄ｄｂ＿ｅｎｄ」を用いて、「＄ｄｂ＿ｄｔｓｅｔ」を生成し（Ｓ７２７）、Ｓ７２３に戻り同様の処理を実行する。具体的には、特徴値検索用ＳＱＬ生成部３０２は、「＄ｄｂ＿ｓｔａｒｔ」及び「＄ｄｂ＿ｅｎｄ」を用いて、＄ｄｂ＿ｄｔｓｅｔ生成処理を実行する。
【０３６８】
図２４は、本実施形態において、データ検索モジュール１５７によって実行される処理を並列に実行する場合を説明するフローチャートである。
【０３６９】
ＣＰＵ１２１は、複数のコアを備えており、図１０に示すように、ＤＢ検索３２０４の実行と同時に、各プロセス１〜４においてそれぞれの処理を実行することも可能である。
【０３７０】
Ｓ３２００〜Ｓ３２０２は、図９のＳ３２０〜Ｓ３２３及びＳ３２７と同一の処理であるため説明を省略する。
【０３７１】
データ検索モジュール１５７は、プロセス１〜４を起動し（Ｓ３２０３）、各プロセスでそれぞれの処理を実行する（Ｓ３２０４〜Ｓ３２０８）。
【０３７２】
具体的には、プロセス１ではデータ解凍／並び替え処理が実行され、プロセス２ではストリームデータ処理が実行され、プロセス３では切り出し処理が実行され、また、プロセス４では出力データ生成処理が実行される。
【０３７３】
これによって、各処理の結果をファイルＡ３１２〜ファイルＤ３１５に出力するのではなく、一つのプロセスの出力結果を他のプロセスに受け渡すことによって高速に処理することが可能となる。
【０３７４】
本実施形態によれば、時系列データを所定の時間単位に圧縮した圧縮データをデータベースに格納することによって、データベースに格納されるデータ量を削減できる。また、一つのクエリを受け付けることによって、圧縮データ検索のためのＳＱＬと、解凍されたデータを処理するＣＱＬとを生成できる。さらに、ＣＱＬにおいて指定された条件を満たす範囲と、当該範囲の前後の区間とをあわせた切り出し範囲を出力することによって、異常が発生した箇所だけではなく、異常が発生した前後の時系列データも出力することができ、異常箇所及び異常原因の特定のための追跡が容易になる。
【０３７５】
これによって、センタサーバ１０４のディスク容量の増加を抑制するとともに、プラントにおける異常原因を解析することが容易となる。
【０３７６】
さらに、特徴値とともに圧縮データをデータベース１５４に格納し、当該特徴値を用いて検索を実行することによって、処理時間を削減することが可能となる。
【符号の説明】
【０３７７】
１００  センサ
１０１  データ収集装置
１０２  プラント
１０３  ネットワーク
１０４  センタサーバ
１０５  データセンタ
１０６  データ表示端末
１０７  プラント監視サイト
１２１  ＣＰＵ
１２２  メモリ
１２３  ＨＤＤ
１２４  ディスプレイ
１２５  ネットワークインタフェース
１２６  マウス
１２７  キーボード
１２８  電源装置
１５０  ユーザ
１５１  ＩＤカラム
１５３  データローダモジュール
１５４  データベース
１５５  クエリ
１５６  検索結果ファイル
１５７  データ検索モジュール
１５８  ＯＳ
２０３  データ集約部
２０４  特徴値抽出部
２０５  データ圧縮部
２０６  データ挿入部
２０７  ＳＩＤテーブル
２０８  ＤＡＴテーブル
３００  クエリ解析部
３０１  ＳＱＬ生成部
３０２  特徴値検索用ＳＱＬ生成部
３０３  ＣＱＬ生成部
３０４  ＤＢ検索部
３０５  データ解凍／並び替え処理部
３０６  ストリームデータ処理部
３０７  切り出し処理部
３０８  データ出力部
３０９  グローバル変数
３１０  ＳＱＬ
３１１  ＣＱＬ
３１２  ファイルＡ
３１３  ファイルＢ
３１４  ファイルＣ
３１５  ファイルＤ
３７０  ＳＱＬテンプレート
３８０  ＣＱＬテンプレート
５００  入力制御部
５０１  入力キュー
５０２  ストリームデータ処理エンジン
５０３  ユーザ定義関数
５０４  出力キュー
５０５  出力制御部
５５１  出力結果
５５２  切り出し範囲
５５３  前方オフセット
５５４  条件成立範囲
５５５  後方オフセット
５５６  結合オフセット
７１０  時刻切り出し用ＳＱＬテンプレート
７１１  特徴値検索用ＳＱＬテンプレート
【図１】
0005423553.tif 000002
【図２】
0005423553.tif 000003
【図３】
0005423553.tif 000004
【図４】
0005423553.tif 000005
【図５Ａ】
0005423553.tif 000006
【図５Ｂ】
0005423553.tif 000007
【図５Ｃ】
0005423553.tif 000008
【図６】
0005423553.tif 000009
【図７】
0005423553.tif 000010
【図８Ａ】
0005423553.tif 000011
【図８Ｂ】
0005423553.tif 000012
【図９】
0005423553.tif 000013
【図１０Ａ】
0005423553.tif 000014
【図１０Ｂ】
0005423553.tif 000015
【図１１Ａ】
0005423553.tif 000016
【図１１Ｂ】
0005423553.tif 000017
【図１２Ａ】
0005423553.tif 000018
【図１２Ｂ】
0005423553.tif 000019
【図１３】
0005423553.tif 000020
【図１４Ａ】
0005423553.tif 000021
【図１４Ｂ】
0005423553.tif 000022
【図１５】
0005423553.tif 000023
【図１６】
0005423553.tif 000024
【図１７】
0005423553.tif 000025
【図１８Ａ】
0005423553.tif 000026
【図１８Ｂ】
0005423553.tif 000027
【図１９】
0005423553.tif 000028
【図２０】
0005423553.tif 000029
【図２１】
0005423553.tif 000030
【図２２】
0005423553.tif 000031
【図２３】
0005423553.tif 000032
【図２４】
0005423553.tif 000033
【図２５】
0005423553.tif 000034
【図２６】
0005423553.tif 000035
【図２７】
0005423553.tif 000036
【図２８】
0005423553.tif 000037
【図２９】
0005423553.tif 000038