(57)【要約】【課題】型が不定である入力データに基づき実行される処理におけるエラーの発生を抑制すること。【解決手段】情報処理装置１００は、入力データ１０１を読み込む。情報処理装置１００は、読み込んだ入力データ１０１の型に基づくデータサイズと、読み込んだ入力データ１０１に基づき実行される所定の処理１１０に用いられる中間データ１０２の型に基づくデータサイズとを比較する。情報処理装置１００は、比較した結果、読み込んだ入力データ１０１の型に基づくデータサイズが、中間データ１０２の型に基づくデータサイズ以上である場合、中間データ１０２の型を、読み込んだ入力データ１０１の型に応じて変換する。情報処理装置１００は、変換した中間データ１０２の型に基づいて、中間データ１０２を格納する記憶領域のサイズを変更する。【選択図】図１
2018124649.tif 000002
【特許請求の範囲】
【請求項１】
読み込んだ入力データの型に基づくデータサイズと、読み込んだ前記入力データに基づき実行される所定の処理に用いられる中間データの型に基づくデータサイズとを比較し、
比較した結果、読み込んだ前記入力データの型に基づくデータサイズが、前記中間データの型に基づくデータサイズ以上である場合、前記中間データの型を、読み込んだ前記入力データの型に応じて変換し、
変換した前記中間データの型に基づいて、前記中間データを格納する記憶領域のサイズを変更する、
制御部を有することを特徴とする情報処理装置。
【請求項２】
前記制御部は、
読み込んだ前記入力データの型と、前記中間データの型との数値表現方法が異なる場合、読み込んだ前記入力データの型と、前記中間データの型との数値表現方法を統一する、ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御部は、
前記中間データの型を、読み込んだ前記入力データの型よりもデータサイズが大きい型に変換する、ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記制御部は、
前記入力データとともに前記入力データの型を示す型情報を読み込み、
前記型情報に基づいて、読み込んだ前記入力データの型に基づくデータサイズと、前記中間データの型に基づくデータサイズとを比較する、ことを特徴とする請求項１〜３のいずれか一つに記載の情報処理装置。
【請求項５】
前記制御部は、
それぞれ異なる型に対応し前記所定の処理を行う複数の関数のうち、前記中間データの型に対応する関数を用いて前記所定の処理を行い、前記所定の処理の結果に応じて前記中間データを更新する、ことを特徴とする請求項１〜４のいずれか一つに記載の情報処理装置。
【請求項６】
前記制御部は、
読み込んだ前記入力データが、前記所定の処理の対象になる複数の入力データのうちで最後に読み込んだ入力データであると判断した場合、それぞれ異なる型に対応し出力データの生成処理を行う複数の関数のうち、前記中間データの型に対応する関数を用いて前記生成処理を行い、前記出力データを出力する、ことを特徴とする請求項５に記載の情報処理装置。
【請求項７】
コンピュータが、
読み込んだ入力データの型に基づくデータサイズと、読み込んだ前記入力データに基づき実行される所定の処理に用いられる中間データの型に基づくデータサイズとを比較し、
比較した結果、読み込んだ前記入力データの型に基づくデータサイズが、前記中間データの型に基づくデータサイズ以上である場合、前記中間データの型を、読み込んだ前記入力データの型に応じて変換し、
変換した前記中間データの型に基づいて、前記中間データを格納する記憶領域のサイズを変更する、
処理を実行することを特徴とする情報処理方法。
【請求項８】
コンピュータに、
読み込んだ入力データの型に基づくデータサイズと、読み込んだ前記入力データに基づき実行される所定の処理に用いられる中間データの型に基づくデータサイズとを比較し、
比較した結果、読み込んだ前記入力データの型に基づくデータサイズが、前記中間データの型に基づくデータサイズ以上である場合、前記中間データの型を、読み込んだ前記入力データの型に応じて変換し、
変換した前記中間データの型に基づいて、前記中間データを格納する記憶領域のサイズを変更する、
処理を実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、および情報処理プログラムに関する。
【背景技術】
【０００２】
従来、複数の入力データを読み込んで処理を行う場合、最初に読み込んだ入力データの型に応じて、その処理の中間結果になる中間データの型を推定し、その中間データを格納する記憶領域を確保してから、以降の入力データを読み込んでいく処理システムがある。入力データは、例えば、その処理において用いられる関数の入力として用いられる。
【０００３】
先行技術としては、例えば、複数の入力データを読み込む場合、最初に読み込んだ入力データの型に応じて、以降に読み込むデータの型を、最初に読み込んだ入力データの型と同じ型であるとして扱うものがある。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】“Ｑｕｅｒｙ  ｏｆ  Ｎｏｒｉｋｒａ”、［ｏｎｌｉｎｅ］、［平成２９年１月１８日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｎｏｒｉｋｒａ．ｇｉｔｈｕｂ．ｉｏ／ｑｕｅｒｙ．ｈｔｍｌ＞
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、読み込む入力データの型が不定であると、複数の入力データを読み込んで処理を行う際に、エラーが発生してしまうことがある。例えば、最初に読み込んだ入力データの型に応じて、中間データの型を推定し、その中間データを格納する記憶領域を確保した場合、以降に読み込む入力データの型が最初に読み込んだ入力データの型と異なると、中間データがオーバフローしてしまうことがある。
【０００６】
１つの側面では、本発明は、型が不定である入力データに基づき実行される処理におけるエラーの発生を抑制することができる情報処理装置、情報処理方法、および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様によれば、読み込んだ入力データの型に基づくデータサイズと、読み込んだ前記入力データに基づき実行される所定の処理に用いられる中間データの型に基づくデータサイズとを比較し、比較した結果、読み込んだ前記入力データの型に基づくデータサイズが、前記中間データの型に基づくデータサイズ以上である場合、前記中間データの型を、読み込んだ前記入力データの型に応じて変換し、変換した前記中間データの型に基づいて、前記中間データを格納する記憶領域のサイズを変更する情報処理装置、情報処理方法、および情報処理プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、型が不定である入力データに基づき実行される処理におけるエラーの発生を抑制することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。
【図２】図２は、情報処理装置１００のハードウェア構成例を示すブロック図である。
【図３】図３は、クエリ３００のデータ構造の一例を示す説明図である。
【図４】図４は、クエリ４００のデータ構造の一例を示す説明図である。
【図５】図５は、ｊｓｏｎテーブル５００の記憶内容の一例を示す説明図である。
【図６】図６は、情報処理装置１００の機能的構成例を示すブロック図である。
【図７】図７は、情報処理装置１００の実施例を示す説明図である。
【図８】図８は、全体処理手順の一例を示すフローチャートである。
【図９】図９は、クエリ処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、本発明にかかる情報処理装置、情報処理方法、および情報処理プログラムの実施の形態を詳細に説明する。
【００１１】
（実施の形態にかかる情報処理方法の一実施例）
図１は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。図１において、情報処理装置１００は、複数の入力データを読み込み、その入力データに基づき所定の処理を実行するコンピュータである。
【００１２】
入力データは、所定の処理の対象になる。入力データは、例えば、所定の処理において用いられる関数の入力として用いられる。入力データは、例えば、データベースのレコードのフィールドに設定された値である。データベースは、例えば、リレーショナルデータベースである。データベースの一例は、図５を用いて後述する。データベースは、例えば、情報処理装置１００が有する。データベースは、例えば、情報処理装置１００が通信可能な他のコンピュータが有し、情報処理装置１００がデータベースのレコードのフィールドに設定された値を取得可能であってもよい。
【００１３】
ここで、データベースは、そのデータベースが作成される際に、そのデータベースのレコードのフィールドに設定される値の型などが固定される場合がある。型は、例えば、１６ｂｉｔ整数型、１６ｂｉｔ浮動小数点型などである。型は、符号なし１６ｂｉｔ整数型、符号なし１６ｂｉｔ浮動小数点型などであってもよい。例えば、リレーショナルデータベース管理システム（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）においてデータベースが作成される場合がある。以下の説明では、リレーショナルデータベース管理システムを「ＲＤＢＭＳ」と表記する場合がある。ＲＤＢＭＳは、例えば、ＰｏｓｔｇｒｅＳＱＬである。
【００１４】
具体的には、ＲＤＢＭＳでは、データベースを作成する際に、スキーマと呼ばれる、データベースになる表の形式を定義し、１つのレコードあたりのフィールドの数や、レコードのフィールドに設定される値の型を固定する方法が用いられる傾向がある。この方法は、例えば、スキーマオンライト（Ｓｃｈｅｍａ−ｏｎ−ｗｒｉｔｅ）と呼ばれる。このため、ＲＤＢＭＳでは、データベースのレコードのフィールドに設定される値の型などが固定されることがある。
【００１５】
このＲＤＢＭＳでは、定義されたスキーマに基づいて、データベースのレコードのフィールドに設定された値を入力データとして読み込んで、種々の処理を行うことが規定された種々の関数が用意されることがある。これにより、ＲＤＢＭＳは、種々の関数を利用者に提供し、データベースの利便性の向上を図ることができる。
【００１６】
一方で、データベースは、そのデータベースを作成した際には、そのデータベースのレコードのフィールドに設定される値の型などが固定されず、その値の型が不定であり、スキーマが定義されない場合がある。例えば、あるデータベース管理システムにおいて、データベースが、半構造化データのフォーマットにしたがえば、異なる型の値であっても同じフィールドに設定することができるように作成される場合がある。半構造化データは、型が不定である。半構造化データのフォーマットは、例えば、ｘｍｌやｊｓｏｎやｂｓｏｎなどである。
【００１７】
この場合、データベース管理システムでは、実際にデータベースのレコードを読み込む際に、そのレコードに基づいてスキーマを定義する方法が用いられる。この方法は、例えば、スキーマオンリード（Ｓｃｈｅｍａ−ｏｎ−ｒｅａｄ）と呼ばれる。これにより、データベース管理システムは、型などを固定せずに、利用者にデータベースのフィールドに値を設定させることができ、データベースの利便性の向上を図ることができる。
【００１８】
ここで、さらにデータベースの利便性の向上を図るため、ＲＤＢＭＳに用意された種々の関数を、半構造化データのフォーマットにしたがって、スキーマが定義されずに作成されたデータベースに対して流用することが望まれることがある。しかしながら、ＲＤＢＭＳに用意された種々の関数は、スキーマに基づいて入力データを読み込んで処理を行うように規定されているため、スキーマが定義されずに作成されたデータベースに対して流用することはできない。
【００１９】
具体的には、ＲＤＢＭＳでは、用意した関数を用いた処理を行う際には、最初に実行計画を作成し、用意した関数を用いた処理を行う最中には、その実行計画を動的に変更することができない。実行計画は、用意した関数を用いた処理に用いる入力データの型を指定し、その処理の中間結果になる中間データの型を指定する。
【００２０】
このように、ＲＤＢＭＳでは、用意した関数を用いた処理を行う際、実行計画を動的に変更することができず、最初に作成した実行計画が指定する型以外の入力データは用いることができない。また、ＲＤＢＭＳでは、同様に、最初に作成した実行計画が指定する型以外の中間データを扱うことができない。このため、ＲＤＢＭＳでは、型が不定である複数の入力データを読み込んで、用意した関数を用いた処理を行うことができない。
【００２１】
これに対し、入力データの型を固定せずに入力データを読み込んで処理を行う処理システムも考えられる。例えば、最初に読み込んだ入力データの型に応じて、その処理の中間結果になる中間データの型を推定し、その中間データを格納する記憶領域を確保してから、以降のデータを読み込んで、処理を行う処理システムが考えられる。
【００２２】
しかしながら、この処理システムでは、２番目以降に読み込まれた入力データを、中間データに上書きし、中間データを更新する処理が行われる場合、２番目以降に読み込まれた入力データは、確保した記憶領域に格納しきれないデータサイズである可能性がある。このため、この処理システムでは、中間データがオーバフローしてしまう可能性がある。
【００２３】
また、この処理システムでは、２番目以降に読み込まれた入力データを、中間データに加算し、中間データを更新する処理が行われる場合、加算した結果は、確保した記憶領域に格納しきれないデータサイズになる可能性がある。このため、この処理システムでは、中間データがオーバフローしてしまう可能性がある。
【００２４】
また、この処理システムでは、読み込んだ入力データと、中間データとを比較する処理が行われる場合、型が異なる入力データと中間データとを比較してしまう可能性があり、エラーが発生する可能性がある。また、この処理システムでは、２番目以降に読み込んだ入力データが、最初に読み込んだ入力データと型が異なる場合、２番目以降に読み込んだ入力データを、処理に用いず破棄するように設定されてしまう可能性がある。
【００２５】
また、例えば、Ｎｏｒｉｋｒａと呼ばれる処理システムがある。Ｎｏｒｉｋｒａは、複数の入力データを読み込む場合には、最初の入力データの型に応じて、以降のデータの型を最初の入力データの型と同じ型であるとして扱っている。このため、Ｎｏｒｉｋｒａは、型が不定である複数の入力データを読み込むと、入力データの型を、実際の型とは異なる型として扱ってしまう可能性がある。
【００２６】
また、例えば、Ｏｒａｃｌｅ  Ｂｉｇ  Ｄａｔａ  ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）と呼ばれる処理システムがある。Ｏｒａｃｌｅ  Ｂｉｇ  Ｄａｔａ  ＳＱＬは、データベースを読み込む際に、手動でのスキーマの設定を受け付け、そのデータベースのレコードのフィールドに設定された値の型を、そのスキーマに指定された型であるとして扱っている。このため、Ｏｒａｃｌｅ  Ｂｉｇ  Ｄａｔａ  ＳＱＬは、異なる型の値を同じフィールドに設定したデータベースを扱うことは難しい。
【００２７】
また、例えば、Ａｐａｃｈｅ  Ｄｒｉｌｌと呼ばれる処理システムがある。Ａｐａｃｈｅ  Ｄｒｉｌｌは、読み込む入力データの型を、予め設定された型であるとして扱って、処理を行っている。このため、Ａｐａｃｈｅ  Ｄｒｉｌｌは、入力データの型を、実際の型とは異なる型として扱ってしまう可能性がある。
【００２８】
そこで、本実施の形態では、ダミーの型を用いて入力データを読み込むことを規定した新たな関数を定義する情報処理方法について説明する。この情報処理方法によれば、型が不定である入力データを読み込んでも、その型が不定である入力データに基づき実行される処理におけるエラーの発生を抑制することができる。
【００２９】
図１において、情報処理装置１００は、クエリを受け付ける。クエリは、処理要求である。クエリは、例えば、所定の処理１１０の内容を指定する情報と、その所定の処理１１０の対象になる入力データ１０１を指定する情報とを含む。クエリは、例えば、入力データ１０１として、データベースのレコードのフィールドに設定された値を指定し、そのフィールドに設定された値を加算した合計値を算出する所定の処理１１０の内容を指定する。クエリの一例は、図３および図４を用いて後述する。
【００３０】
データベースは、例えば、ｊｓｏｎにしたがって作成されたデータベースである。このため、データベースは、異なるレコードの同じフィールドに異なる型の値を設定可能である。データベースは、例えば、ｂｓｏｎにしたがって作成されたデータベースであってもよい。データベースは、ｂｓｏｎにしたがって作成された場合、レコードのフィールドに設定された値の型を示す型情報を含む。
【００３１】
情報処理装置１００は、クエリを受け付けた後、そのクエリによって指定された入力データ１０１の型が不定である可能性があれば、ダミーの型を用いて入力データを読み込むことを規定した新たな関数を用いて、下記（１−１）〜（１−３）の動作を行う。ダミーの型は、可変長の文字列を格納するテキスト型への単純変換が可能な型である。ここでは、データベースが、ｊｓｏｎにしたがって作成されたデータベースであるため、入力データ１０１の型が不定である可能性がある。
【００３２】
この新たな関数は、実行計画に用いられると、入力データ１０１の型をダミーの型に固定することができ、実行計画を動的に変更しなくてもよくすることができる。以下の説明では、この新たな関数を「ｊｓｏｎ−ｔｅｘｔ型中間関数」と表記する場合がある。また、以下の説明では、ダミーの型を「ｊｓｏｎ−ｔｅｘｔ型」と表記する場合がある。
【００３３】
また、ｊｓｏｎ−ｔｅｘｔ型中間関数は、さらに、入力データ１０１に基づき、ＲＤＢＭＳに用意された種々の関数を選択し、選択した関数を実行することによって、中間データ１０２を生成、または更新することを規定してもよい。これにより、ｊｓｏｎ−ｔｅｘｔ型中間関数は、型が不定である入力データ１０１に対しても、ＲＤＢＭＳに用意された種々の関数を選択して用いることができるようにする。
【００３４】
（１−１）情報処理装置１００は、入力データ１０１を読み込む。情報処理装置１００は、例えば、クエリに指定されたデータベースのレコードのフィールドに設定された、１６ｂｉｔ整数型の値や１６ｂｉｔ浮動小数点型の値などを順に、入力データ１０１として読み込む。
【００３５】
情報処理装置１００は、具体的には、入力データ１０１を、ダミーの型を用いて読み込んだ後、１６ｂｉｔ整数型や１６ｂｉｔ浮動小数点型として扱う。これにより、情報処理装置１００は、実行計画としては、入力データ１０１の型をダミーの型に固定することができ、実行計画を動的に変更しなくてもよくすることができる。
【００３６】
情報処理装置１００は、読み込んだ入力データ１０１の型に基づくデータサイズと、読み込んだ入力データ１０１に基づき実行される所定の処理１１０に用いられる中間データ１０２の型に基づくデータサイズとを比較する。所定の処理１１０は、クエリによって内容が指定される。所定の処理１１０は、例えば、入力データ１０１を読み込む都度、ＲＤＢＭＳに用意された種々の関数を選択し、選択した関数を用いて行われる一連の処理である。所定の処理１１０は、例えば、ｊｓｏｎ−ｔｅｘｔ型中間関数によって実現される。
【００３７】
中間データ１０２は、所定の処理１１０の中間結果になるデータである。中間データ１０２は、例えば、２番目以降の入力データ１０１を読み込んだ時点では、過去に読み込んだ入力データ１０１に基づき実行された所定の処理１１０によって生成されたデータが用いられる。中間データ１０２の型は、例えば、１６ｂｉｔ整数型である。
【００３８】
中間データ１０２は、例えば、最初の入力データ１０１を読み込んだ時点では、空のデータであってもよく、データサイズが０ｂｉｔであるとして扱われてもよい。中間データ１０２は、例えば、最初の入力データ１０１を読み込んだ時点で、所定の処理１１０に用いられる初期値があれば、その初期値であってもよい。
【００３９】
ここで、情報処理装置１００が読み込んだ入力データ１０１が、最初の入力データ１０１であり、中間データ１０２が空のデータである場合がある。この場合、情報処理装置１００は、例えば、その入力データ１０１の型に基づくデータサイズと、中間データ１０２の型に基づくデータサイズ「０ｂｉｔ」とを比較する。
【００４０】
また、情報処理装置１００が読み込んだ入力データ１０１が、最初の入力データ１０１であり、所定の処理１１０に用いられる初期値が中間データ１０２として扱われる場合がある。この場合、情報処理装置１００は、例えば、その入力データ１０１の型に基づくデータサイズと、中間データ１０２として扱われる初期値の型に基づくデータサイズとを比較してもよい。
【００４１】
また、情報処理装置１００が読み込んだ入力データ１０１が、２番目以降の入力データ１０１であり、以前に読み込んだ入力データ１０１に基づき中間データ１０２が生成済みである場合がある。この場合、情報処理装置１００は、例えば、読み込んだ入力データ１０１の型に基づくデータサイズと、中間データ１０２の型に基づくデータサイズとを比較する。
【００４２】
（１−２）情報処理装置１００は、比較した結果、読み込んだ入力データ１０１の型に基づくデータサイズが、中間データ１０２の型に基づくデータサイズ以上である場合、中間データ１０２の型を、読み込んだ入力データ１０１の型に応じて変換する。情報処理装置１００は、例えば、読み込んだ入力データ１０１の型に基づくデータサイズが、中間データ１０２の型に基づくデータサイズ以上である場合、中間データ１０２の型を、読み込んだ入力データ１０１の型よりもデータサイズが大きい型に変換する。
【００４３】
情報処理装置１００は、具体的には、読み込んだ入力データ１０１の型に基づくデータサイズが１６ｂｉｔであれば、中間データ１０２の型を、データサイズが３２ｂｉｔである型「３２ｂｉｔ整数型」に変換する。これにより、情報処理装置１００は、読み込んだ入力データ１０１に基づき、中間データ１０２を用いて所定の処理１１０が行われても、その所定の処理１１０におけるエラーを発生しにくくすることができる。
【００４４】
情報処理装置１００は、例えば、読み込んだ入力データ１０１が中間データ１０２に加算などされても、中間データ１０２のオーバフローが発生しにくくすることができる。ここで、中間データ１０２のオーバフローの発生を抑制するため、変換した中間データ１０２の型は、読み込んだ入力データ１０１の型よりもデータサイズが大きい型であることが好ましい。
【００４５】
（１−３）情報処理装置１００は、変換した中間データ１０２の型に基づいて、中間データ１０２を格納する記憶領域のサイズを変更する。情報処理装置１００は、例えば、変換した中間データ１０２の型「３２ｂｉｔ整数型」に基づいて、中間データ１０２を格納する記憶領域のサイズを３２ｂｉｔに変更する。
【００４６】
これにより、情報処理装置１００は、中間データ１０２の型を変換しても、その中間データ１０２を格納することができる。また、情報処理装置１００は、読み込んだ入力データ１０１が中間データ１０２に加算などされ、その中間データ１０２が更新されても、その中間データ１０２を格納し続けることができる。情報処理装置１００は、更新された中間データ１０２を出力してもよい。
【００４７】
このように、情報処理装置１００は、型が不定である入力データ１０１を読み込んだ場合であっても、その型が不定である入力データ１０１に基づき実行される処理１１０におけるエラーの発生を抑制することができる。また、情報処理装置１００は、実行計画を動的に変更しなくてもよく、読み込んだ入力データ１０１や中間データ１０２を、ＲＤＢＭＳに用意された種々の関数に用いることができる。結果として、情報処理装置１００は、型が不定である複数の入力データ１０１に対して、ＲＤＢＭＳに用意された種々の関数を流用することができる。
【００４８】
情報処理装置１００は、例えば、ＲＤＢＭＳを実現した上で、ｊｓｏｎ−ｔｅｘｔ型中間関数をＲＤＢＭＳに追加することにより、型が不定である複数の入力データ１０１に対してＲＤＢＭＳに用意された種々の関数を選択して用いることを実現する。このため、情報処理装置１００は、型が不定である複数の入力データ１０１を読み込んだ場合であっても、所定の処理１１０を行うことができる。
【００４９】
ここでは、情報処理装置１００が、最後の入力データ１０１を読み込んだ後の中間データ１０２をそのまま出力する場合について説明したが、これに限らない。例えば、情報処理装置１００が、最後の入力データ１０１を読み込んだ後の中間データ１０２に対して処理を行い、その処理の結果に対応する出力データを出力する場合があってもよい。
【００５０】
この場合、情報処理装置１００は、例えば、ダミーの型を用いて中間データ１０２を読み込むことを規定し、読み込んだ中間データ１０２に対してＲＤＢＭＳに用意された種々の関数を選択して用いることを規定した新たな関数を用いる。この新たな関数は、実行計画に用いられると、中間データ１０２の型をダミーの型に固定することができ、実行計画を動的に変更しなくてもよくすることができる。以下の説明では、この新たな関数を「ｊｓｏｎ−ｔｅｘｔ型最終関数」と表記する場合がある。
【００５１】
情報処理装置１００は、例えば、ＲＤＢＭＳを実現した上で、ｊｓｏｎ−ｔｅｘｔ型最終関数をＲＤＢＭＳに追加することにより、型が不定である中間データ１０２に対してＲＤＢＭＳに用意された種々の関数を選択して用いることを実現する。このため、情報処理装置１００は、型が不定である中間データ１０２から、出力データを生成することができる。
【００５２】
（情報処理装置１００のハードウェア構成例）
次に、図２を用いて、情報処理装置１００のハードウェア構成例について説明する。
【００５３】
図２は、情報処理装置１００のハードウェア構成例を示すブロック図である。図２において、情報処理装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、メモリ２０２と、ネットワークＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０３と、記録媒体Ｉ／Ｆ２０４と、記録媒体２０５とを有する。また、各構成部は、バス２００によってそれぞれ接続される。
【００５４】
ここで、ＣＰＵ２０１は、情報処理装置１００の全体の制御を司る。メモリ２０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ２０１のワークエリアとして使用される。メモリ２０２に記憶されるプログラムは、ＣＰＵ２０１にロードされることで、コーディングされている処理をＣＰＵ２０１に実行させる。
【００５５】
ネットワークＩ／Ｆ２０３は、通信回線を通じてネットワーク２１０に接続され、ネットワーク２１０を介して他のコンピュータに接続される。そして、ネットワークＩ／Ｆ２０３は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークＩ／Ｆ２０３には、例えば、モデムやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）アダプタなどを採用することができる。
【００５６】
記録媒体Ｉ／Ｆ２０４は、ＣＰＵ２０１の制御にしたがって記録媒体２０５に対するデータのリード／ライトを制御する。記録媒体Ｉ／Ｆ２０４は、例えば、ディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポートなどである。記録媒体２０５は、記録媒体Ｉ／Ｆ２０４の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体２０５は、例えば、ディスク、半導体メモリ、ＵＳＢメモリなどである。記録媒体２０５は、情報処理装置１００から着脱可能であってもよい。記録媒体２０５は、実施の形態にかかる情報処理プログラムを記憶してもよい。
【００５７】
情報処理装置１００は、上述した構成部のほか、例えば、キーボード、マウス、ディスプレイ、タッチパネル、プリンタなどを有してもよい。また、情報処理装置１００は、記録媒体Ｉ／Ｆ２０４や記録媒体２０５を有していなくてもよい。
【００５８】
（クエリ３００のデータ構造の一例）
次に、図３を用いて、クエリ３００のデータ構造の一例について説明する。クエリ３００は、ｊｓｏｎのフォーマットで作成されたデータベースを用いた処理を要求する場合に対応する。
【００５９】
図３は、クエリ３００のデータ構造の一例を示す説明図である。図３に示すように、クエリ３００は、処理を要求し、その処理に用いるデータベースを指定する情報として「ＦＲＯＭ  ｊｓｏｎ＿ｔａｂｌｅ」を含み、処理の内容を指定する情報として「ＳＥＬＥＣＴ  ＡＶＧ（ｐｒｉｃｅ）」を含む。ここで、ｊｓｏｎ＿ｔａｂｌｅは、図５に後述するｊｓｏｎテーブル５００を示している。
【００６０】
クエリ３００は、具体的には、図５に後述するｊｓｏｎテーブル５００のｐｒｉｃｅのフィールドの値の平均値を算出する処理を要求する。情報処理装置１００は、例えば、このクエリ３００を受け付けると、ｊｓｏｎ−ｔｅｘｔ型中間関数やｊｓｏｎ−ｔｅｘｔ型最終関数を用いて、図５に後述するｊｓｏｎテーブル５００のｐｒｉｃｅのフィールドの値の平均値を算出する処理を実行することになる。
【００６１】
クエリ３００は、例えば、図５に後述するｊｓｏｎテーブル５００のｐｒｉｃｅのフィールドの値の合計値を算出する処理を要求してもよい。クエリ３００は、例えば、図５に後述するｊｓｏｎテーブル５００のｐｒｉｃｅのフィールドの値の最大値または最小値を算出する処理を要求してもよい。
【００６２】
（クエリ４００のデータ構造の一例）
次に、図４を用いて、クエリ４００のデータ構造の一例について説明する。クエリ４００は、ｂｓｏｎのフォーマットで作成されたデータベースを用いた処理を要求する場合に対応する。
【００６３】
図４は、クエリ４００のデータ構造の一例を示す説明図である。図４に示すように、クエリ４００は、処理を要求し、その処理に用いるデータベースを指定する情報として「ＦＲＯＭ  ｂｓｏｎ＿ｔａｂｌｅ」を含み、処理の内容を指定する情報として「ＳＥＬＥＣＴ  ｐｒｉｃｅ」を含む。また、クエリ４００は、そのｐｒｉｃｅのフィールドに設定された値の型を指定する情報として「ｉｎｔｅｇｅｒ」を含む。
【００６４】
（ｊｓｏｎテーブル５００の記憶内容の一例）
次に、図５を用いて、ｊｓｏｎテーブル５００の記憶内容の一例について説明する。ｊｓｏｎテーブル５００は、例えば、図２に示した情報処理装置１００のメモリ２０２や記録媒体２０５などの記憶領域により実現される。
【００６５】
図５は、ｊｓｏｎテーブル５００の記憶内容の一例を示す説明図である。図５に示すように、ｊｓｏｎテーブル５００は、ｉｄと、ｐｒｉｃｅとのフィールドを有する。ｊｓｏｎテーブル５００は、各フィールドに情報を設定することにより、入力データがレコードとして記憶される。
【００６６】
ｉｄのフィールドは、レコードの識別番号が設定される。ｐｒｉｃｅのフィールドは、型が不定である値が設定される。ｐｒｉｃｅのフィールドは、例えば、１６ｂｉｔ整数型、３２ｂｉｔ整数型、１６ｂｉｔ浮動小数点型、または、３２ｂｉｔ浮動小数点型の値が設定される。
【００６７】
これにより、ｊｓｏｎテーブル５００は、入力データになるレコードを記憶することができ、入力データを順に読み込むことができるようにすることができる。ｊｓｏｎテーブル５００は、具体的には、レコードごとに「｛｝」で区切り、フィールドごとに「，」で区切り、フィールドに設定する値を記憶した、データ５１０のような形式で表現される。
【００６８】
（情報処理装置１００の機能的構成例）
次に、図６を用いて、情報処理装置１００の機能的構成例について説明する。図６は、情報処理装置１００の機能的構成例を示すブロック図である。情報処理装置１００は、記憶部６０１と、受付部６０２と、変換部６０３と、処理部６０４と、出力部６０５とを含む。
【００６９】
記憶部６０１は、例えば、図２に示したメモリ２０２や記録媒体２０５などの記憶領域によって実現される。受付部６０２〜出力部６０５は、制御部となる機能である。受付部６０２〜出力部６０５は、具体的には、例えば、図２に示したメモリ２０２や記録媒体２０５などの記憶領域に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、ネットワークＩ／Ｆ２０３により、その機能を実現する。各機能部の処理結果は、例えば、図２に示したメモリ２０２や記録媒体２０５などの記憶領域に記憶される。
【００７０】
記憶部６０１は、入力データを記憶する。入力データは、例えば、ｊｓｏｎテーブル５００に含まれる。入力データは、具体的には、ｊｓｏｎテーブル５００のｐｒｉｃｅのフィールドに設定された値である。記憶部６０１は、例えば、ｊｓｏｎテーブル５００を記憶する。これにより、記憶部６０１は、受付部６０２が読み込む入力データを記憶し、受付部６０２に提供することができる。
【００７１】
記憶部６０１は、中間データを記憶する。これにより、記憶部６０１は、中間データを記憶し、変換部６０３に提供することができる。
【００７２】
記憶部６０１は、複数の中間関数を記憶する。複数の中間関数は、それぞれ異なる型に対応し、所定の処理を行う関数である。複数の中間関数は、例えば、１６ｂｉｔ整数型に対応し、所定の処理の結果に応じて１６ｂｉｔ整数型の中間データを生成する関数を含む。複数の中間関数は、例えば、１６ｂｉｔ浮動小数点型に対応し、所定の処理の結果に応じて１６ｂｉｔ浮動小数点型の中間データを生成する関数を含む。
【００７３】
複数の中間関数は、具体的には、ＲＤＢＭＳに用意された種々の関数である。中間関数は、具体的には、入力データを、中間データに加算する処理を規定し、加算した結果に応じて中間データを更新する関数である。これにより、記憶部６０１は、処理部６０４が用いる中間関数を記憶し、処理部６０４に中間関数を提供することができる。
【００７４】
記憶部６０１は、複数の最終関数を記憶する。複数の最終関数は、それぞれ異なる型に対応し、出力データの生成処理を行う関数である。複数の最終関数は、例えば、１６ｂｉｔ整数型に対応し、中間データに基づき実行される処理の結果に応じて１６ｂｉｔ整数型の出力データを生成する関数を含む。複数の最終関数は、例えば、１６ｂｉｔ浮動小数点型に対応し、中間データに基づき実行される処理を行い、その処理の結果に応じて１６ｂｉｔ浮動小数点型の出力データを生成する関数を含む。
【００７５】
複数の最終関数は、具体的には、ＲＤＢＭＳに用意された種々の関数である。最終関数は、具体的には、読み込んだ入力データの合計値になる中間データを、読み込んだ入力データの数で除算し、読み込んだ入力データの平均値を算出する処理を規定し、処理の結果に応じて出力データを生成する関数である。これにより、記憶部６０１は、処理部６０４が用いる最終関数を記憶し、処理部６０４に最終関数を提供することができる。
【００７６】
受付部６０２は、クエリを受け付ける。受付部６０２は、例えば、図３に示したクエリ３００を受け付ける。受付部６０２は、例えば、図４に示したクエリ４００を受け付けてもよい。これにより、受付部６０２は、処理の内容と、処理の対象になる入力データとを特定可能にすることができる。
【００７７】
受付部６０２は、受け付けたクエリに基づいて、入力データを読み込む。受付部６０２は、例えば、入力データとして、記憶部６０１に記憶されたデータベースのレコードを順に読み込む。受付部６０２は、具体的には、ｊｓｏｎテーブル５００のレコードを順に読み込む。これにより、受付部６０２は、入力データを読み込み、その入力データに基づき実行される処理を、処理部６０４に行わせることができる。
【００７８】
受付部６０２は、入力データとともに入力データの型を示す型情報を受け付けてもよい。受付部６０２は、例えば、ｂｓｏｎにしたがって作成されたデータベースのレコードのフィールドに設定された値を順に入力データとして読み込むとともに、そのデータベースを参照してそのレコードのフィールドに設定された値の型を示す型情報を読み込む。これにより、受付部６０２は、変換部６０３が入力データの型を特定可能にし、変換部６０３が入力データを解析しなくてもよいようにし、変換部６０３の処理負担の低減化を図ることができる。
【００７９】
変換部６０３は、読み込んだ入力データが、最初に読み込まれた入力データであると判断した場合、所定の処理に用いられる中間データの型を、読み込んだ入力データの型に応じて決定する。所定の処理は、読み込んだ入力データに基づき実行される処理である。所定の処理は、例えば、読み込んだ入力データを、中間データに加算する処理である。変換部６０３は、例えば、中間データの型を、読み込んだ入力データの型よりもデータサイズが大きい型に決定する。
【００８０】
変換部６０３は、具体的には、読み込んだ入力データを解析し、その入力データの型「８ｂｉｔ整数型」を特定し、その入力データのデータサイズ「８ｂｉｔ」を特定する。そして、変換部６０３は、中間データの型を、その入力データの型「８ｂｉｔ整数型」よりもデータサイズが大きい型「１６ｂｉｔ整数型」に決定する。
【００８１】
変換部６０３は、例えば、型情報に基づいて、入力データの型を特定し、その入力データのデータサイズを特定してもよい。これにより、変換部６０３は、入力データを解析しなくても、入力データの型を特定することができ、処理量の低減化を図ることができる。また、変換部６０３は、処理部６０４が入力データに基づき実行される処理を行った際に中間データの型になる型を特定しておくことができる。
【００８２】
変換部６０３は、決定した中間データの型に基づいて、その中間データを格納する記憶領域のサイズを決定する。変換部６０３は、例えば、決定した中間データの型「１６ｂｉｔ整数型」に基づいて、その中間データを格納する記憶領域のサイズ「１６ｂｉｔ」を決定し、その記憶領域を確保する。これにより、変換部６０３は、中間データを記憶可能にし、処理部６０４が入力データに基づき実行される処理を行う準備を行うことができる。また、変換部６０３は、中間データがオーバフローする可能性の低減化を図ることができる。
【００８３】
変換部６０３は、受付部６０２が読み込んだ入力データの型に基づくデータサイズと、所定の処理に用いられる中間データの型に基づくデータサイズとを比較する。変換部６０３は、例えば、読み込んだ入力データが２番目以降の入力データであると判断した場合、読み込んだ入力データを解析し、読み込んだ入力データの型に基づくデータサイズと、所定の処理に用いられる中間データの型に基づくデータサイズとを比較する。
【００８４】
変換部６０３は、具体的には、読み込んだ入力データを解析し、その入力データの型「３２ｂｉｔ整数型」を特定し、その入力データのデータサイズ「３２ｂｉｔ」を特定する。そして、変換部６０３は、その入力データのデータサイズ「３２ｂｉｔ」と、中間データのデータサイズ「１６ｂｉｔ」とを比較する。
【００８５】
変換部６０３は、例えば、型情報に基づいて、読み込んだ入力データの型に基づくデータサイズと、読み込んだ入力データに基づき実行される所定の処理に用いられる中間データの型に基づくデータサイズとを比較してもよい。これにより、変換部６０３は、入力データに基づき実行される処理によって、中間データがオーバフローする可能性があるか否かを判定することができる。
【００８６】
変換部６０３は、比較した結果、読み込んだ入力データの型に基づくデータサイズが、中間データの型に基づくデータサイズ以上である場合、中間データの型を、読み込んだ入力データの型に応じて変換する。変換部６０３は、例えば、中間データの型を、読み込んだ入力データの型「３２ｂｉｔ整数型」よりもデータサイズが大きい型「６４ｂｉｔ整数型」に変換する。
【００８７】
変換部６０３は、中間データの型に基づいて、中間データを格納する記憶領域のサイズを変更する。変換部６０３は、変換した中間データの型に基づいて、その中間データを格納する記憶領域のサイズを決定する。変換部６０３は、例えば、変換した中間データの型「６４ｂｉｔ整数型」に基づいて、その中間データを格納する記憶領域のサイズ「６４ｂｉｔ」を決定し、その記憶領域を確保する。これにより、変換部６０３は、中間データを記憶可能にし、処理部６０４が入力データに基づき実行される処理を行う準備を行うことができる。また、変換部６０３は、中間データがオーバフローする可能性の低減化を図ることができる。
【００８８】
変換部６０３は、読み込んだ前記入力データの型と、前記中間データの型との数値表現方法が異なる場合、読み込んだ前記入力データの型と、前記中間データの型との数値表現方法を統一する。数値表現方法は、例えば、整数型、浮動小数点型などである。
【００８９】
変換部６０３は、例えば、読み込んだ入力データの型が整数型であり、中間データの型が浮動小数点型である場合、読み込んだ入力データの型を整数型から浮動小数点型に変換する。これにより、変換部６０３は、入力データと中間データとを処理部６０４に処理させることができる。
【００９０】
変換部６０３は、例えば、読み込んだ入力データの型が浮動小数点型であり、中間データの型が整数型である場合、中間データの型を整数型から浮動小数点型に変換する。これにより、変換部６０３は、入力データと中間データとを処理部６０４に処理させることができる。
【００９１】
変換部６０３は、比較した結果、読み込んだ入力データの型に基づくデータサイズが、中間データの型に基づくデータサイズ以上である場合、中間データの型を、読み込んだ入力データの型に応じて変換してもよい。これにより、変換部６０３は、中間データを記憶可能にし、処理部６０４が入力データに基づき実行される処理を行う準備を行うことができる。また、変換部６０３は、中間データがオーバフローする可能性の低減化を図ることができる。上述した、変換部６０３の動作は、例えば、ｊｓｏｎ−ｔｅｘｔ型中間関数を用いることにより実現される。
【００９２】
処理部６０４は、複数の中間関数のうち、中間データの型に対応する中間関数を用いて所定の処理を行い、所定の処理の結果に応じて中間データを更新する。処理部６０４は、例えば、１６ｂｉｔ整数型に対応する、受付部６０２が読み込んだ入力データを中間データに加算し、その中間データを１６ｂｉｔ整数型の新たな中間データに更新する中間関数を用いて、その中間データを更新する。これにより、処理部６０４は、中間データを更新することができる。この処理部６０４の動作は、例えば、ｊｓｏｎ−ｔｅｘｔ型中間関数を用いることにより実現される。
【００９３】
処理部６０４は、読み込んだ入力データが、最後に読み込まれた入力データであると判断した場合、複数の最終関数のうち、中間データの型に対応する最終関数を用いて生成処理を行う。処理部６０４は、データベースの末尾のレコードを入力データとして読み込んだ場合に、最後に読み込まれた入力データであると判断する。
【００９４】
処理部６０４は、例えば、１６ｂｉｔ整数型に対応する、受付部６０２が読み込んだ入力データの数で、中間データを除算した結果を、１６ｂｉｔ整数型の出力データとして生成する最終関数を用いて、その出力データを生成する。出力データは、例えば、入力データの平均値である。これにより、処理部６０４は、出力データを生成することができる。この処理部６０４の動作は、例えば、ｊｓｏｎ−ｔｅｘｔ型最終関数を用いることにより実現される。
【００９５】
出力部６０５は、中間データを出力する。出力部６０５は、例えば、受付部６０２が入力データを読み込む都度、処理部６０４が更新した中間データを出力する。出力部６０５は、処理部６０４が生成した出力データを出力してもよい。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークＩ／Ｆ２０３による外部装置への送信、または、メモリ２０２や記録媒体２０５などの記憶領域への記憶である。
【００９６】
（情報処理装置１００の実施例）
次に、図７を用いて、情報処理装置１００の実施例について説明する。
【００９７】
図７は、情報処理装置１００の実施例を示す説明図である。図７において、情報処理装置１００は、クエリを受け付ける。情報処理装置１００は、例えば、クエリ「ＳＥＬＥＣＴ  ＡＶＧ（ｐｒｉｃｅ）  ＦＲＯＭ  ｊｓｏｎ＿ｔａｂｌｅ；」を受け付ける。
【００９８】
情報処理装置１００は、クエリによって指定されたｊｓｏｎテーブル５００から読み出す入力データの型が不定である可能性があるため、ｊｓｏｎ−ｔｅｘｔ型中間関数やｊｓｏｎ−ｔｅｘｔ型最終関数を用いた実行計画を作成して、以下の動作を行う。入力データの型が不定である可能性があるか否かは、例えば、ｊｓｏｎテーブル５００の定義情報などに基づいて判定される。
【００９９】
（７−１）情報処理装置１００は、クエリを受け付けると、クエリによって指定されたｊｓｏｎテーブル５００の１行目の入力データｄ１を読み込む。入力データｄ１は、例えば、１６ｂｉｔ整数型であり、１６ｂｉｔである。情報処理装置１００は、例えば、入力データｄ１を、ｊｓｏｎ−ｔｅｘｔ型を用いて読み込む。
【０１００】
（７−２）情報処理装置１００は、読み込んだ入力データｄ１の型を特定し、その入力データｄ１のデータサイズを特定する。ここでは、情報処理装置１００は、例えば、入力データｄ１の型「１６ｂｉｔ整数型」を特定し、その入力データｄ１のデータサイズ「１６ｂｉｔ」を特定する。
【０１０１】
（７−３）情報処理装置１００は、読み込んだ入力データｄ１が、最初の入力データであるため、その入力データｄ１の型に応じて中間データの型を決定し、その中間データのデータサイズを決定し、その中間データを格納する記憶領域を確保する。ここでは、情報処理装置１００は、例えば、入力データｄ１の型「１６ｂｉｔ整数型」に応じて中間データの型「３２ｂｉｔ整数型」を決定し、その中間データのデータサイズ「３２ｂｉｔ」を決定し、「３２ｂｉｔ」の記憶領域を確保する。ここでは、中間データは空である。
【０１０２】
（７−４）情報処理装置１００は、読み込んだ入力データｄ１に基づいて、中間データの型に対応する中間関数を用いて、その中間データを更新する。情報処理装置１００は、例えば、入力データｄ１を、中間データの型に加算する中間関数を用いて、その中間データを更新する。ここでは、情報処理装置１００は、中間データが空であるため、入力データｄ１をそのまま、中間データにする。
【０１０３】
（７−５）情報処理装置１００は、ｊｓｏｎテーブル５００の２行目の入力データｄ２を読み込む。入力データｄ２は、例えば、１６ｂｉｔ整数型であり、１６ｂｉｔである。
【０１０４】
（７−６）情報処理装置１００は、読み込んだ入力データｄ２の型を特定し、その入力データｄ２のデータサイズを特定する。ここでは、情報処理装置１００は、例えば、入力データｄ２の型「１６ｂｉｔ整数型」を特定し、その入力データｄ２のデータサイズ「１６ｂｉｔ」を特定する。
【０１０５】
（７−７）情報処理装置１００は、読み込んだ入力データｄ２が、２行目以降の入力データであるため、その入力データｄ２のデータサイズが、中間データのデータサイズ以上であるか否かを判定する。ここでは、情報処理装置１００は、例えば、入力データｄ２のデータサイズが、中間データのデータサイズ未満であると判定する。
【０１０６】
（７−８）情報処理装置１００は、入力データｄ２のデータサイズが、中間データのデータサイズ未満であるため、その中間データの型を変換せず、その中間データのデータサイズを変更しない。ここでは、情報処理装置１００は、中間データの型「３２ｂｉｔ整数型」を変換せず、その中間データのデータサイズ「３２ｂｉｔ」を変更しない。
【０１０７】
（７−９）情報処理装置１００は、読み込んだ入力データｄ２に基づいて、中間データの型に対応する中間関数を用いて、中間データを更新する。情報処理装置１００は、例えば、入力データｄ２を、中間データに加算する中間関数を用いて、その中間データを更新する。
【０１０８】
（７−１０）情報処理装置１００は、ｊｓｏｎテーブル５００の３行目の入力データｄ３を読み込む。入力データｄ３は、例えば、３２ｂｉｔ整数型であり、３２ｂｉｔである。
【０１０９】
（７−１１）情報処理装置１００は、読み込んだ入力データｄ３の型を特定し、その入力データｄ３のデータサイズを特定する。ここでは、情報処理装置１００は、例えば、入力データｄ３の型「３２ｂｉｔ整数型」を特定し、その入力データｄ３のデータサイズ「３２ｂｉｔ」を特定する。
【０１１０】
（７−１２）情報処理装置１００は、読み込んだ入力データｄ３が、２行目以降の入力データであるため、その入力データｄ３のデータサイズが、中間データのデータサイズ以上であるか否かを判定する。ここでは、情報処理装置１００は、例えば、入力データｄ３のデータサイズが、中間データのデータサイズ以上であると判定する。
【０１１１】
（７−１３）情報処理装置１００は、入力データｄ３のデータサイズが、中間データのデータサイズ以上であるため、その入力データｄ３の型に応じて中間データの型を変換し、その中間データを格納する記憶領域のサイズを変更する。ここでは、情報処理装置１００は、例えば、入力データｄ３の型「３２ｂｉｔ整数型」に応じて中間データの型を「６４ｂｉｔ整数型」に変換し、その中間データを格納する記憶領域のサイズを「６４ｂｉｔ」に変更する。
【０１１２】
情報処理装置１００は、具体的には、型を変換する前の中間データが格納された記憶領域とは別に、型を変換した後の中間データが格納されるサイズ「６４ｂｉｔ」の新たな記憶領域を作成する。そして、情報処理装置１００は、型を変換した後の中間データを、作成した新たな記憶領域にコピーし、型を変換する前の中間データを破棄する。
【０１１３】
（７−１４）情報処理装置１００は、読み込んだ入力データｄ３に基づいて、中間データの型に対応する中間関数を用いて、中間データを更新する。情報処理装置１００は、例えば、入力データｄ３を、中間データに加算する中間関数を用いて、中間データを更新する。
【０１１４】
（７−１５）情報処理装置１００は、ｊｓｏｎテーブル５００の４行目の入力データｄ４を読み込む。入力データｄ４は、例えば、１６ｂｉｔ浮動小数点型であり、１６ｂｉｔである。
【０１１５】
（７−１６）情報処理装置１００は、読み込んだ入力データｄ４の型を特定し、その入力データｄ４のデータサイズを特定する。ここでは、情報処理装置１００は、例えば、入力データｄ４の型「１６ｂｉｔ浮動小数点型」を特定し、その入力データｄ４のデータサイズ「１６ｂｉｔ」を特定する。
【０１１６】
（７−１７）情報処理装置１００は、読み込んだ入力データｄ４が、２行目以降の入力データであるため、その入力データｄ４のデータサイズが、中間データのデータサイズ以上であるか否かを判定する。ここでは、情報処理装置１００は、例えば、入力データｄ４のデータサイズが、中間データのデータサイズ未満であると判定する。
【０１１７】
（７−１８）情報処理装置１００は、読み込んだ入力データｄ４が、２行目以降の入力データであるため、その入力データｄ４の型に応じた数値表現方法が、中間データの型に応じた数値表現方法と同じであるか否かを判定する。ここでは、情報処理装置１００は、例えば、数値表現方法が異なると判定する。
【０１１８】
（７−１９）情報処理装置１００は、入力データｄ４のデータサイズが、中間データのデータサイズ未満であるが、数値表現方法が異なるため、その入力データｄ４の型と、その中間データの型との数値表現方法を統一する。ここでは、情報処理装置１００は、中間データの型を「６４ｂｉｔ浮動小数点型」に変換する。
【０１１９】
（７−２０）情報処理装置１００は、読み込んだ入力データｄ４に基づいて、中間データの型に対応する中間関数を用いて、中間データを更新する。情報処理装置１００は、例えば、入力データｄ４を、中間データに加算する中間関数を用いて、中間データを更新する。情報処理装置１００は、同様に、５行目以降の入力データを読み込んで処理を行う。
【０１２０】
（７−２１）情報処理装置１００は、ｊｓｏｎテーブル５００のｎ行目の入力データｄｎを読み込む。入力データｄｎは、例えば、３２ｂｉｔ整数型であり、３２ｂｉｔである。
【０１２１】
（７−２２）情報処理装置１００は、読み込んだ入力データｄｎの型を特定し、その入力データｄｎのデータサイズを特定する。ここでは、情報処理装置１００は、例えば、入力データｄｎの型「３２ｂｉｔ整数型」を特定し、その入力データｄｎのデータサイズ「３２ｂｉｔ」を特定する。
【０１２２】
（７−２３）情報処理装置１００は、読み込んだ入力データｄｎが、２行目以降の入力データであるため、その入力データｄｎのデータサイズが、中間データのデータサイズ以上であるか否かを判定する。ここでは、情報処理装置１００は、例えば、入力データｄｎのデータサイズが、中間データのデータサイズ未満であると判定する。
【０１２３】
（７−２４）情報処理装置１００は、読み込んだ入力データｄｎが、２行目以降の入力データであるため、その入力データｄｎの型に応じた数値表現方法が、中間データの型に応じた数値表現方法と同じであるか否かを判定する。ここでは、情報処理装置１００は、例えば、数値表現方法が異なると判定する。
【０１２４】
（７−２５）情報処理装置１００は、入力データｄｎのデータサイズが、中間データのデータサイズ未満であるが、数値表現方法が異なるため、その入力データｄｎの型と、その中間データの型との数値表現方法を統一する。ここでは、情報処理装置１００は、入力データｄｎの型を「６４ｂｉｔ浮動小数点型」に変換する。
【０１２５】
（７−２６）情報処理装置１００は、読み込んだ入力データｄｎに基づいて、中間データの型に対応する中間関数を用いて、中間データを更新する。情報処理装置１００は、例えば、入力データｄｎを、中間データに加算する中間関数を用いて、中間データを更新する。
【０１２６】
（７−２７）情報処理装置１００は、入力データｄｎが最後のデータであれば、中間データに基づいて、中間データの型に対応する最終関数を用いて最終データを生成し、その最終データを出力する。情報処理装置１００は、例えば、中間データをｎで除算する最終関数を用いて、中間データをｎで除算した結果に対応する最終データを生成し、その最終データを出力する。
【０１２７】
また、情報処理装置１００は、入力データｄｎが最後のデータである場合、最終関数がなければ、中間データをそのまま出力してもよい。これにより、情報処理装置１００は、型が不定である複数の入力データを読み込んだ場合であっても、ＲＤＢＭＳに用意された中間関数や最終関数を用いた処理を行うことができる。
【０１２８】
ここでは、情報処理装置１００は、図３に示したクエリを受け付ける場合について説明したが、これに限らない。例えば、情報処理装置１００は、図４に示したクエリを受け付ける場合があってもよい。
【０１２９】
この場合、情報処理装置１００は、ｂｓｏｎのフォーマットにしたがって作成されたデータベースを用いることになる。ここで、情報処理装置１００は、データベースに記憶された型情報を参照することにより、入力データを解析しなくても入力データの型を特定することができ、処理量の低減化を図ることができる。
【０１３０】
例えば、従来の装置では、入力データを文字列に変換した後、その文字列をさらに数値に変換し、入力データとなる数値を取得する場合があった。このように、従来の装置では、データベースに記憶された型情報が利用されず、入力データの型を変換する処理が２回行われ、処理量の増大化を招いていた。一方で、情報処理装置１００は、ｂｓｏｎに記憶された型情報を参照することにより、入力データの型を特定することができ、入力データを一旦文字列に変換しなくてもよくなり、処理量の低減化を図ることができる。
【０１３１】
以上では、説明の簡略化のため、情報処理装置１００が、整数型のデータを、そのデータと同じビット数の浮動小数点型のデータに変換する場合について説明したが、これに限らない。例えば、情報処理装置１００が、整数型と浮動小数点型とでは表現可能な数値の桁数が異なるため、整数型のデータを、そのデータよりビット数が大きい浮動小数点型のデータに変換する場合があってもよい。
【０１３２】
（全体処理手順の一例）
次に、図８を用いて、情報処理装置１００が実行する全体処理手順の一例について説明する。
【０１３３】
図８は、全体処理手順の一例を示すフローチャートである。図８において、まず、情報処理装置１００は、クエリを読み込む（ステップＳ８０１）。次に、情報処理装置１００は、読み込んだクエリを解析する（ステップＳ８０２）。そして、情報処理装置１００は、解析した結果に基づいて、実行計画を生成する（ステップＳ８０３）。
【０１３４】
次に、情報処理装置１００は、実行計画において、半構造化データが存在するか否かを判定する（ステップＳ８０４）。ここで、半構造化データが存在しない場合（ステップＳ８０４：Ｎｏ）、情報処理装置１００は、ステップＳ８０６の処理に移行する。
【０１３５】
一方で、半構造化データが存在する場合（ステップＳ８０４：Ｙｅｓ）、情報処理装置１００は、実行計画を書き換える（ステップＳ８０５）。次に、情報処理装置１００は、実行計画に基づいて、クエリ処理を実行する（ステップＳ８０６）。
【０１３６】
そして、情報処理装置１００は、全体処理を終了する。これにより、情報処理装置１００は、半構造化データが存在する場合であっても、実行計画が動的に変更されないようにすることができ、クエリ処理を実行することができる。
【０１３７】
（クエリ処理手順の一例）
次に、図９を用いて、情報処理装置１００が実行するクエリ処理手順の一例について説明する。
【０１３８】
図９は、クエリ処理手順の一例を示すフローチャートである。図９において、情報処理装置１００は、入力データとして、ｊｓｏｎテーブル５００のレコードを読み込む（ステップＳ９０１）。次に、情報処理装置１００は、読み込んだ入力データの型を特定する（ステップＳ９０２）。
【０１３９】
そして、情報処理装置１００は、読み込んだ入力データの型が、中間データの型よりもデータサイズが大きい型であるか否かを判定する（ステップＳ９０３）。ここで、データサイズが大きい型ではない場合（ステップＳ９０３：Ｎｏ）、情報処理装置１００は、ステップＳ９０５の処理に移行する。
【０１４０】
一方で、データサイズが大きい型である場合（ステップＳ９０３：Ｙｅｓ）、情報処理装置１００は、入力データの型に応じて中間データの型を変換し、中間データを格納する記憶領域のサイズを変更する（ステップＳ９０４）。そして、情報処理装置１００は、ステップＳ９０５の処理に移行する。
【０１４１】
ステップＳ９０５に移行すると、情報処理装置１００は、入力データの型に応じた中間関数を選択し、選択した中間関数を実行する（ステップＳ９０５）。次に、情報処理装置１００は、読み込んだレコードが、ｊｓｏｎテーブル５００の最後のレコードであるか否かを判定する（ステップＳ９０６）。ここで、最後のレコードではない場合（ステップＳ９０６：Ｎｏ）、情報処理装置１００は、ステップＳ９０１の処理に戻る。
【０１４２】
一方で、最後のレコードである場合（ステップＳ９０６：Ｙｅｓ）、情報処理装置１００は、中間データの型を示す型情報を取得する（ステップＳ９０７）。次に、情報処理装置１００は、中間データの型に応じて終了関数を選択し、選択した終了関数を実行する（ステップＳ９０８）。
【０１４３】
そして、情報処理装置１００は、終了関数の結果を出力する（ステップＳ９０９）。その後、情報処理装置１００は、クエリ処理を終了する。これにより、情報処理装置１００は、入力データの型が不定であっても、中間関数と終了関数とを実行した際におけるエラーの発生を抑制することができる。
【０１４４】
以上説明したように、情報処理装置１００によれば、読み込んだ入力データ１０１の型に基づくデータサイズと、所定の処理１１０に用いられる中間データ１０２の型に基づくデータサイズとを比較することができる。また、情報処理装置１００によれば、読み込んだ入力データ１０１の型に基づくデータサイズが、中間データ１０２の型に基づくデータサイズ以上である場合、中間データ１０２の型を、読み込んだ入力データ１０１の型に応じて変換することができる。また、情報処理装置１００によれば、中間データ１０２の型に基づいて、中間データ１０２を格納する記憶領域のサイズを変更することができる。これにより、情報処理装置１００は、読み込んだ入力データ１０１に基づき、中間データ１０２を用いて所定の処理１１０を行っても、エラーを発生しにくくすることができる。
【０１４５】
情報処理装置１００によれば、最初の入力データ１０１を読み込んだ場合、中間データ１０２の型を、読み込んだ入力データ１０１の型に応じて決定することができる。また、情報処理装置１００によれば、中間データ１０２の型に基づいて、中間データ１０２を格納する記憶領域のサイズを決定することができる。これにより、情報処理装置１００は、入力データ１０１を読み込んだ際に、まだ中間データ１０２が生成されていない場合であっても、中間データ１０２を格納する記憶領域を確保し、エラーを発生しにくくすることができる。
【０１４６】
情報処理装置１００によれば、読み込んだ入力データ１０１の型と、中間データ１０２の型との数値表現方法が異なる場合、読み込んだ入力データ１０１の型と、中間データ１０２の型との数値表現方法を統一することができる。これにより、情報処理装置１００は、読み込んだ入力データ１０１に基づき、中間データ１０２を用いて所定の処理１１０を行っても、数値表現方法の違いによるエラーを発生しにくくすることができる。
【０１４７】
情報処理装置１００によれば、読み込んだ入力データ１０１の型が整数型であり、中間データ１０２の型が浮動小数点型である場合、読み込んだ入力データ１０１の型を整数型から浮動小数点型に変換することができる。これにより、情報処理装置１００は、読み込んだ入力データ１０１の型と、中間データ１０２の型とを、数値表現の精度が比較的高い数値表現方法に統一することができる。このため、情報処理装置１００は、読み込んだ入力データ１０１と、中間データ１０２とを、同じように扱うことができる。
【０１４８】
情報処理装置１００によれば、読み込んだ入力データ１０１の型が浮動小数点型であり、中間データ１０２の型が整数型である場合、中間データ１０２の型を整数型から浮動小数点型に変換することができる。これにより、情報処理装置１００は、読み込んだ入力データ１０１の型と、中間データ１０２の型とを、数値表現の精度が比較的高い数値表現方法に統一することができる。このため、情報処理装置１００は、読み込んだ入力データ１０１と、中間データ１０２とを、同じように扱うことができる。
【０１４９】
情報処理装置１００によれば、中間データ１０２の型を、読み込んだ入力データ１０１の型よりもデータサイズが大きい型に変換することができる。これにより、情報処理装置１００は、中間データ１０２のオーバフローの発生を抑制することができる。
【０１５０】
情報処理装置１００によれば、入力データ１０１とともに入力データ１０１の型を示す型情報を受け付けることができる。また、情報処理装置１００によれば、型情報に基づいて、読み込んだ入力データ１０１の型に基づくデータサイズと、中間データ１０２の型に基づくデータサイズとを比較することができる。これにより、情報処理装置１００は、読み込んだ入力データ１０１を解析して、その入力データ１０１の型を特定しなくてもよく、処理量の低減化を図ることができる。
【０１５１】
情報処理装置１００によれば、比較した結果、読み込んだ入力データ１０１の型に基づくデータサイズが、中間データ１０２の型に基づくデータサイズ以上である場合、中間データ１０２の型を、読み込んだ入力データ１０１の型に応じて変換することができる。これにより、情報処理装置１００は、読み込んだ入力データ１０１に基づき、中間データ１０２を用いて所定の処理１１０を行っても、エラーを発生しにくくすることができる。
【０１５２】
情報処理装置１００によれば、それぞれ異なる型に対応し所定の処理１１０を行う複数の関数のうち、中間データ１０２の型に対応する関数を用いて所定の処理１１０を行い、所定の処理１１０の結果に応じて中間データ１０２を更新することができる。これにより、情報処理装置１００は、新たな中間データ１０２を生成し、次に読み込む入力データ１０１に基づき実行される所定の処理１１０に用いることができる。
【０１５３】
情報処理装置１００によれば、最後の入力データ１０１を読み込んだ場合、それぞれ異なる型に対応し出力データの生成処理を行う複数の関数のうち、中間データ１０２の型に対応する関数を用いて生成処理を行うことができる。また、情報処理装置１００によれば、生成処理を行って生成した出力データを出力することができる。これにより、情報処理装置１００は、所定の処理１１０の最終結果を示す出力データを出力することができる。
【０１５４】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実施の形態で説明した情報処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本実施の形態で説明した情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１５５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１５６】
（付記１）読み込んだ入力データの型に基づくデータサイズと、読み込んだ前記入力データに基づき実行される所定の処理に用いられる中間データの型に基づくデータサイズとを比較し、
比較した結果、読み込んだ前記入力データの型に基づくデータサイズが、前記中間データの型に基づくデータサイズ以上である場合、前記中間データの型を、読み込んだ前記入力データの型に応じて変換し、
変換した前記中間データの型に基づいて、前記中間データを格納する記憶領域のサイズを変更する、
制御部を有することを特徴とする情報処理装置。
【０１５７】
（付記２）読み込んだ前記入力データが、前記所定の処理の対象になる複数の入力データのうちで最初に読み込んだ入力データであると判断した場合、前記中間データの型を、読み込んだ前記入力データの型に応じて決定し、
決定した前記中間データの型に基づいて、前記中間データを格納する記憶領域のサイズを決定する、ことを特徴とする付記１に記載の情報処理装置。
【０１５８】
（付記３）前記制御部は、
読み込んだ前記入力データの型と、前記中間データの型との数値表現方法が異なる場合、読み込んだ前記入力データの型と、前記中間データの型との数値表現方法を統一する、ことを特徴とする付記１または２に記載の情報処理装置。
【０１５９】
（付記４）前記制御部は、
読み込んだ前記入力データの型が整数型であり、前記中間データの型が浮動小数点型である場合、読み込んだ前記入力データの型を整数型から浮動小数点型に変換する、ことを特徴とする付記３に記載の情報処理装置。
【０１６０】
（付記５）前記制御部は、
読み込んだ前記入力データの型が浮動小数点型であり、前記中間データの型が整数型である場合、前記中間データの型を整数型から浮動小数点型に変換する、ことを特徴とする付記３または４に記載の情報処理装置。
【０１６１】
（付記６）前記制御部は、
前記中間データの型を、読み込んだ前記入力データの型よりもデータサイズが大きい型に変換する、ことを特徴とする付記１〜５のいずれか一つに記載の情報処理装置。
【０１６２】
（付記７）前記制御部は、
前記入力データとともに前記入力データの型を示す型情報を読み込み、
前記型情報に基づいて、読み込んだ前記入力データの型に基づくデータサイズと、前記中間データの型に基づくデータサイズとを比較する、ことを特徴とする付記１〜６のいずれか一つに記載の情報処理装置。
【０１６３】
（付記８）前記制御部は、
それぞれ異なる型に対応し前記所定の処理を行う複数の関数のうち、前記中間データの型に対応する関数を用いて前記所定の処理を行い、前記所定の処理の結果に応じて前記中間データを更新する、ことを特徴とする付記１〜７のいずれか一つに記載の情報処理装置。
【０１６４】
（付記９）前記制御部は、
読み込んだ前記入力データが、前記所定の処理の対象になる複数の入力データのうちで最後に読み込んだ入力データであると判断した場合、それぞれ異なる型に対応し出力データの生成処理を行う複数の関数のうち、前記中間データの型に対応する関数を用いて前記生成処理を行い、前記出力データを出力する、ことを特徴とする付記８に記載の情報処理装置。
【０１６５】
（付記１０）コンピュータが、
読み込んだ入力データの型に基づくデータサイズと、読み込んだ前記入力データに基づき実行される所定の処理に用いられる中間データの型に基づくデータサイズとを比較し、
比較した結果、読み込んだ前記入力データの型に基づくデータサイズが、前記中間データの型に基づくデータサイズ以上である場合、前記中間データの型を、読み込んだ前記入力データの型に応じて変換し、
変換した前記中間データの型に基づいて、前記中間データを格納する記憶領域のサイズを変更する、
処理を実行することを特徴とする情報処理方法。
【０１６６】
（付記１１）コンピュータに、
読み込んだ入力データの型に基づくデータサイズと、読み込んだ前記入力データに基づき実行される所定の処理に用いられる中間データの型に基づくデータサイズとを比較し、
比較した結果、読み込んだ前記入力データの型に基づくデータサイズが、前記中間データの型に基づくデータサイズ以上である場合、前記中間データの型を、読み込んだ前記入力データの型に応じて変換し、
変換した前記中間データの型に基づいて、前記中間データを格納する記憶領域のサイズを変更する、
処理を実行させることを特徴とする情報処理プログラム。
【符号の説明】
【０１６７】
１００  情報処理装置
１０１  入力データ
１０２  中間データ
１１０  処理
２００  バス
２０１  ＣＰＵ
２０２  メモリ
２０３  ネットワークＩ／Ｆ
２０４  記録媒体Ｉ／Ｆ
２０５  記録媒体
２１０  ネットワーク
３００，４００  クエリ
５００  ｊｓｏｎテーブル
５１０  データ
６０１  記憶部
６０２  受付部
６０３  変換部
６０４  処理部
６０５  出力部
【図１】
2018124649.tif 000003
【図２】
2018124649.tif 000004
【図３】
2018124649.tif 000005
【図４】
2018124649.tif 000006
【図５】
2018124649.tif 000007
【図６】
2018124649.tif 000008
【図７】
2018124649.tif 000009
【図８】
2018124649.tif 000010
【図９】
2018124649.tif 000011