図面 (/)

技術 和結合型操作を含むクエリの処理

出願人 アビニシオテクノロジーエルエルシー
発明者 シェヒター,イアンラヴレンティエフ,アレクサンダー
出願日 2015年11月10日 (5年3ヶ月経過) 出願番号 2017-525332
公開日 2017年11月30日 (3年2ヶ月経過) 公開番号 2017-535869
状態 特許登録済
技術分野 検索装置 計算機におけるファイル管理
主要キーワード 専用オペレーティングシステム ローカル分散 集合関数 グラフベース 最大データ値 最小データ値 ターゲットリスト 分配特性
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2017年11月30日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (9)

課題・解決手段

とりわけ、SQLクエリに基づいてコンピュータプログラムを生成する方法は、第1のデータソースに記憶されている第1のデータセットへの参照を含み、第1のデータソースとは異なる第2のデータソースに記憶されている第2のデータセットへの参照を含むSQLクエリを受信することと、SQLクエリが2つ以上のコマンドを含み、当該コマンドが第1の和結合型操作と第1の集約操作とを含むと判断することと、第1の和結合型操作が第1のデータセットからのデータの少なくとも一部分に適用され、第2のデータセットからのデータの少なくとも一部分に適用されることをSQLクエリが記述していると判断することと、第1の集約操作が第1の和結合型操作の結果として得られるデータに適用されることをSQLクエリが記述していると判断することと、コンピュータプログラムを生成することとを含む。

概要

背景

データソース(data source)に対するクエリはそのデータソースから取り出すべきデータを指定するものである。クエリはデータソース(例えば、データベース)に対して提供することができ、データソースに関連するデータ処理システム(例えば、データベース管理システム)はそのクエリによって指定されたデータを返すことができる。クエリを構文解析して、そのクエリによって指定されたデータソース内のデータを識別するために、様々な技法を使用することができる。

概要

とりわけ、SQLクエリに基づいてコンピュータプログラムを生成する方法は、第1のデータソースに記憶されている第1のデータセットへの参照を含み、第1のデータソースとは異なる第2のデータソースに記憶されている第2のデータセットへの参照を含むSQLクエリを受信することと、SQLクエリが2つ以上のコマンドを含み、当該コマンドが第1の和結合型操作と第1の集約操作とを含むと判断することと、第1の和結合型操作が第1のデータセットからのデータの少なくとも一部分に適用され、第2のデータセットからのデータの少なくとも一部分に適用されることをSQLクエリが記述していると判断することと、第1の集約操作が第1の和結合型操作の結果として得られるデータに適用されることをSQLクエリが記述していると判断することと、コンピュータプログラムを生成することとを含む。

目的

和結合型操作は、2つ以上のデータソースからのレコードを含むデータセットを生成し、そのデータセットを出力として提供する

効果

実績

技術文献被引用数
0件
牽制数
0件

この技術が所属する分野

(分野番号表示ON)※整理標準化データをもとに当社作成

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

SQLクエリに基づいてコンピュータプログラムを生成する方法であって、第1のデータソースに記憶されている第1のデータセットへの参照を含み、前記第1のデータソースとは異なる第2のデータソースに記憶されている第2のデータセットへの参照を含むSQLクエリを受信することと、前記SQLクエリが2つ以上のコマンドを含み、前記コマンドが第1の和結合型操作と第1の集約操作とを含むと判断することと、前記第1の和結合型操作が前記第1のデータセットからのデータの少なくとも一部分に適用され、前記第2のデータセットからのデータの少なくとも一部分に適用されることを前記SQLクエリが記述していると判断することと、前記第1の集約操作が前記第1の和結合型操作の結果として得られるデータに適用されることを前記SQLクエリが記述していると判断することと、前記SQLクエリに基づいて第1のシステム上でコンピュータプログラムを生成することであって、前記コンピュータプログラムが、前記第1のデータセットからのデータの一部分について第2の集約操作を実行するよう第2のシステムに指示する命令を送信し、前記データの第1の部分の要約である特定のデータセットを前記第2のシステムから受信し、前記特定のデータセットと、前記第2のデータセットからのデータの一部分の要約とについて第2の和結合型操作を実行するために構成されることと、を含む、方法。

請求項2

前記第1のシステムがグラフベースの処理システムを含み、前記第2のシステムがリレーショナルデータベース管理システムを含む、請求項1に記載の方法。

請求項3

前記コンピュータプログラムが、前記第2のデータセットからのデータの一部分について第2の集約操作を実行するよう第3のシステムに指示する命令を送信し、前記データの第2の部分の要約である特定のデータセットを前記第3のシステムから受信するためにさらに構成される、請求項1に記載の方法。

請求項4

前記コンピュータプログラムが、前記データの第1の部分の要約と前記データの第2の部分の要約である前記データセットに適用される前記SQLクエリの前記和結合型操作を表す第1のコンポーネントであって、前記要約のそれぞれがそれぞれのデータの対応する部分より少ないレコードを含む第1のコンポーネントと、前記第1のデータセットを表す第2のコンポーネントであって、実行された時に前記命令を送信させる第2のコンポーネントと、を含む、請求項1に記載の方法。

請求項5

前記第2のデータセットを表す第3のコンポーネントと、第3の集約操作を表す第4のコンポーネントとを含み、前記第3のコンポーネントの出力が前記第4のコンポーネントに流れ、前記第4のコンポーネントの出力が前記第1のコンポーネントに流れる、請求項4に記載の方法。

請求項6

前記第2のコンポーネントの前記出力が、前記データの第1の部分の前記要約である前記特定のデータセットを含む、請求項4に記載の方法。

請求項7

前記第1のデータソースを表す前記コンポーネントが前記命令を送信し、前記第1のシステムが前記コンピュータプログラムを実行するシステムにデータを送信させる前に前記命令が遂行される、請求項4に記載の方法。

請求項8

前記命令が、前記第2の集約操作に対応するコマンドを含むSQL文を含む、請求項1に記載の方法。

請求項9

前記SQLクエリに基づいて前記コンピュータプログラムを生成することが、前記SQLクエリに基づいてクエリプランを生成することと、前記第1のデータソースからのデータに適用される前記第2の集約操作を前記クエリプランに追加することと、前記第1のシステムが前記第2の集約操作を遂行するための機能性を含むと判断することと、前記第1のデータセットを表す前記クエリプランの一部分に、前記第2の集約操作を遂行するための命令を付加することと、前記クエリプランに基づいて前記コンピュータプログラムを生成することと、を含む、請求項1に記載の方法。

請求項10

前記第1の集約操作が、最小値操作、最大値操作、合計操作、又はカウント操作であり、前記第2の集約操作が前記第1の集約操作と同じタイプの集約操作である、請求項1に記載の方法。

請求項11

前記第1の集約操作が平均操作であり、前記第2の集約操作が合計操作又はカウント操作である、請求項1に記載の方法。

請求項12

前記第1の集約操作に基づいて前記第2の集約操作を決定することを含む、請求項1に記載の方法。

請求項13

第1の集約操作に基づいて前記第2の集約操作を決定することが、遂行された時に前記第1の集約操作の出力と同等の出力を生成する一連の操作を決定することと、前記一連の操作から前記第2の集約操作を選択することと、を含む、請求項12に記載の方法。

請求項14

前記第1の和結合型操作が前記第2の和結合型操作と同じタイプのものである、請求項1に記載の方法。

請求項15

SQLクエリに基づいてコンピュータプログラムを生成するためのシステムであって、1つ以上のプロセッサであって、第1のデータソースに記憶されている第1のデータセットへの参照を含み、前記第1のデータソースとは異なる第2のデータソースに記憶されている第2のデータセットへの参照を含むSQLクエリを受信し、前記SQLクエリが2つ以上のコマンドを含み、前記コマンドが第1の和結合型操作と第1の集約操作とを含むと判断し、前記第1の和結合型操作が前記第1のデータセットからのデータの少なくとも一部分に適用され、前記第2のデータセットからのデータの少なくとも一部分に適用されることを前記SQLクエリが記述していると判断し、前記第1の集約操作が前記第1の和結合型操作の結果として得られるデータに適用されることを前記SQLクエリが記述していると判断し、前記SQLクエリに基づいて第1のシステム上でコンピュータプログラムを生成し、前記コンピュータプログラムが、前記第1のデータセットからのデータの一部分について第2の集約操作を実行するよう第2のシステムに指示する命令を送信し、前記データの第1の部分の要約である特定のデータセットを前記第2のシステムから受信し、前記特定のデータセットと、前記第2のデータセットからのデータの一部分の要約とについて第2の和結合型操作を実行するために構成される、ために構成される1つ以上のプロセッサを含む、システム。

請求項16

実行された時に、SQLクエリに基づいてコンピュータプログラムを生成するための操作をコンピュータシステムに遂行させる実行可能コードを記憶するコンピュータ可読媒体であって、第1のデータソースに記憶されている第1のデータセットへの参照を含み、前記第1のデータソースとは異なる第2のデータソースに記憶されている第2のデータセットへの参照を含むSQLクエリを受信することと、前記SQLクエリが2つ以上のコマンドを含み、前記コマンドが第1の和結合型操作と第1の集約操作とを含むと判断することと、前記第1の和結合型操作が前記第1のデータセットからのデータの少なくとも一部分に適用され、前記第2のデータセットからのデータの少なくとも一部分に適用されることを前記SQLクエリが記述していると判断することと、前記第1の集約操作が前記第1の和結合型操作の結果として得られるデータに適用されることを前記SQLクエリが記述していると判断することと、前記SQLクエリに基づいて第1のシステム上でコンピュータプログラムを生成することであって、前記コンピュータプログラムが、前記第1のデータセットからのデータの一部分について第2の集約操作を実行するよう第2のシステムに指示する命令を送信し、前記データの第1の部分の要約である特定のデータセットを前記第2のシステムから受信し、前記特定のデータセットと、前記第2のデータセットからのデータの一部分の要約とについて第2の和結合型操作を実行するために構成されることと、を含む、コンピュータ可読媒体。

請求項17

SQLクエリに基づいてコンピュータプログラムを生成するためのシステムであって、第1のデータソースに記憶されている第1のデータセットへの参照を含み、前記第1のデータソースとは異なる第2のデータソースに記憶されている第2のデータセットへの参照を含むSQLクエリを受信するための手段と、前記SQLクエリが2つ以上のコマンドを含み、前記コマンドが第1の和結合型操作と第1の集約操作とを含むと判断するための手段と、前記第1の和結合型操作が前記第1のデータセットからのデータの少なくとも一部分に適用され、前記第2のデータセットからのデータの少なくとも一部分に適用されることを前記SQLクエリが記述していると判断するための手段と、前記第1の集約操作が前記第1の和結合型操作の結果として得られるデータに適用されることを前記SQLクエリが記述していると判断するための手段と、前記SQLクエリに基づいて第1のシステム上でコンピュータプログラムを生成するための手段であって、前記コンピュータプログラムが、前記第1のデータセットからのデータの一部分について第2の集約操作を実行するよう第2のシステムに指示する命令を送信し、前記データの第1の部分の要約である特定のデータセットを前記第2のシステムから受信し、前記特定のデータセットと、前記第2のデータセットからのデータの一部分の要約とについて第2の和結合型操作を実行するために構成される手段と、を含む、システム。

技術分野

0001

優先権主張
本出願は、2015年6月22日に出願された米国特許出願第14/746188号に対する優先権を主張するものであり、同出願は2014年11月14日に出願された米国特許出願第62/079922号に対する優先権を主張するものであり、両出願の内容全体が参照により本明細書に取り入れられる。

0002

本明細書は、和結合型操作(union−type operation)を含むクエリ(query)の処理に関する。

背景技術

0003

データソース(data source)に対するクエリはそのデータソースから取り出すべきデータを指定するものである。クエリはデータソース(例えば、データベース)に対して提供することができ、データソースに関連するデータ処理システム(例えば、データベース管理システム)はそのクエリによって指定されたデータを返すことができる。クエリを構文解析して、そのクエリによって指定されたデータソース内のデータを識別するために、様々な技法を使用することができる。

課題を解決するための手段

0004

態様1は、SQLクエリに基づいてコンピュータプログラムを生成する方法であって、第1のデータソースに記憶されている第1のデータセットへの参照を含み、第1のデータソースとは異なる第2のデータソースに記憶されている第2のデータセットへの参照を含むSQLクエリを受信することと、SQLクエリが2つ以上のコマンドを含み、当該コマンドが第1の和結合型操作と第1の集約操作(aggregation operation)とを含むと判断することと、第1の和結合型操作が第1のデータセットからのデータの少なくとも一部分に適用され、第2のデータセットからのデータの少なくとも一部分に適用されることをSQLクエリが記述していると判断することと、第1の集約操作が第1の和結合型操作の結果として得られるデータに適用されることをSQLクエリが記述していると判断することと、SQLクエリに基づいて第1のシステム上でコンピュータプログラムを生成することであって、当該コンピュータプログラムが、第1のデータセットからのデータの一部分について第2の集約操作を実行するよう第2のシステムに指示する命令を送信し、データの第1の部分の要約である特定のデータセットを第2のシステムから受信し、当該特定のデータセットと、第2のデータセットからのデータの一部分の要約とについて第2の和結合型操作を実行するために構成されることとを含む方法である。

0005

態様2は、当該コンピュータプログラムが、第2のデータセットからのデータの一部分について第2の集約操作を実行するよう第3のシステムに指示する命令を送信し、データの第2の部分の要約である特定のデータセットを第3のシステムから受信するためにさらに構成される、態様1の方法である。

0006

態様3は、当該コンピュータプログラムが、データの第1の部分の要約とデータの第2の部分の要約であるデータセットに適用されるSQLクエリの和結合型操作を表す第1のコンポーネントであって、当該要約のそれぞれがそれぞれのデータの対応する部分より少ないレコードを含む第1のコンポーネントと、第1のデータセットを表す第2のコンポーネントであって、実行された時に当該命令を送信させる第2のコンポーネントとを含む、態様1又は2の方法である。

0007

態様4は、第2のデータセットを表す第3のコンポーネントと、第3の集約操作を表す第4のコンポーネントとを含み、第3のコンポーネントの出力が第4のコンポーネントに流れ、第4のコンポーネントの出力が第1のコンポーネントに流れる、態様3の方法である。

0008

態様5は、第2のコンポーネントの出力が、データの第1の部分の要約である特定のデータセットを含む、態様3又は4の方法である。

0009

態様6は、第1のデータソースを表すコンポーネントが命令を送信し、第1のシステムがコンピュータプログラムを実行するシステムにデータを送信させる前に命令が遂行される、態様3、4、又は5の方法である。

0010

態様7は、命令が、第2の集約操作に対応するコマンドを含むSQL文を含む、態様1乃至6のいずれかの方法である。

0011

態様8は、SQLクエリに基づいてコンピュータプログラムを生成することが、SQLクエリに基づいてクエリプラン(query plan)を生成することと、第1のデータソースからのデータに適用される第2の集約操作をクエリプランに追加することと、第1のシステムが第2の集約操作を遂行するための機能性を含むと判断することと、第1のデータセットを表すクエリプランの一部分に、第2の集約操作を遂行するための命令を付加することと、クエリプランに基づいてコンピュータプログラムを生成することとを含む、態様1乃至7のいずれかの方法である。

0012

態様9は、第1の集約操作が、最小値操作、最大値操作、合計操作、又はカウント操作であり、第2の集約操作が第1の集約操作と同じタイプの集約操作である、態様1乃至8のいずれかの方法である。

0013

態様10は、第1の集約操作が平均操作であり、第2の集約操作が合計操作又はカウント操作である、態様1乃至9のいずれかの方法である。

0014

態様11は、第1の集約操作に基づいて第2の集約操作を決定することを含む、態様1乃至10のいずれかの方法である。

0015

態様12は、第1の集約操作に基づいて第2の集約操作を決定することが、遂行された時に第1の集約操作の出力と同等の出力を生成する一連の操作を決定することと、当該一連の操作から第2の集約操作を選択することとを含む、態様11の方法である。

0016

態様13は、第1の和結合型操作が第2の和結合型操作と同じタイプのものである、態様1乃至12のいずれかの方法である。

0017

態様14は、第1のシステムがグラフベースの処理システムを含み、第2のシステムがリレーショナルデータベース管理システムを含む、態様1乃至13のいずれかの方法である。

0018

これらの諸態様のうちの1つ以上は、単独又は組み合わせて、コンピュータシステムによって実行された時に当該態様の操作を遂行する機械可読命令を含むコンピュータプログラムプロダクトを記憶する、システム又は装置としてあるいはコンピュータ可読記憶装置として表すことができる。一例として、コンピュータ可読記憶装置は、コンピュータシステムによって実行された時に第1乃至第13の態様のうちのいずれか1つによる操作を遂行する機械可読命令を含むコンピュータプログラムプロダクトを記憶することができる。もう1つの例として、1つ以上のプロセッサを含むコンピュータシステムは、当該1つ以上のプロセッサによって実行された時に第1乃至第13の態様のうちのいずれか1つによる操作を遂行する機械可読命令を含むコンピュータプログラムプロダクトを記憶するコンピュータ可読記憶装置を含むことができる。

0019

諸態様は以下の利点のうちの1つ以上を含むことができる。データ処理システムは、データソースから転送されるデータの量を削減するために集約操作をプッシュダウンする。クエリに対応するコンピュータプログラムは、例えば、コンポーネントを除去することにより簡略化することができる。

0020

本発明のその他の特徴及び利点は、以下の説明及び特許請求の範囲から明らかになるであろう。

図面の簡単な説明

0021

クエリを処理できるデータ処理システムを示している。
データ処理システムの諸要素を示している。
クエリプランを示している。
クエリプランを示している。
コンピュータプログラムを示している。
コンピュータプログラムを示している。
フローチャートである。
フローチャートである。

実施例

0022

データ処理システムは、クエリ(SQLクエリなど)をデータフローグラフなどのコンピュータプログラムに変換することができる。データフローグラフは、実行された時にクエリの操作と同等の操作(例えば、データ処理操作)を遂行するコンポーネントを含む。クエリからコンピュータプログラムを生成するシステムは、いくつかの操作がデータソース(例えば、データベースシステム)によって実行できると判断することができる。例えば、コンピュータプログラムの1つのコンポーネントは、そのコンポーネントによって表された1つ以上の操作を実行するようデータソースに指示することにより、データソースに「プッシュダウン」することができ、それによりそのコンポーネントをコンピュータプログラムから削除することができる。例えば、コンピュータプログラムは、データソースで実行された時にその操作を遂行するSQL文をデータソースに送信することにより、操作を実行するようデータソースに指示することができる。

0023

SQLクエリ(SQL文ともいう)は、構造化照会言語SQL)によって定義されたコマンド及び構文を使用する。一般に、クエリは、そのクエリに示されている1つ以上のデータセット内のデータのサブセットを指定する文である。指定されたサブセットは、そのクエリを処理するシステムによって、そのクエリを発行したシステムに返すことができる。クエリによって指定され、そのクエリに応答して返されるデータは一般に、そのクエリによって示されるデータセット内に記憶されている全データの一部分である。SQLクエリの一例は、「SELECT last_name FROM current_customers」にすることができる。このSQLクエリはSELECTという操作を含み、これはSELECT操作の引数に応じてデータを取り出すよう、クエリを実行するシステムに指示するものである。SQLの構文では、引数は、データベーステーブルなどのデータセットである「current_customers」及びデータベーステーブルの列である「last_name」である。システムがクエリを解釈し、クエリの操作を実行すると、システムはクエリに応答してlast_name列のデータ(例えば、last_ame列に含まれるデータの各部分)を返すことになる。SQLについては、2008年4月7日に出版されたAlex Kriegel及びBoris Trukhnovによる「SQL Bible, 2nd Edition」(ISBN 978−0470229064)に詳細に記載されており、同書は参照により本明細書に取り入れられる。

0024

時には、クエリは、2つ以上のデータソースからのレコードの組み合わせについて実行される操作を含むことができる。例えば、クエリは和結合型操作を含むことができる。和結合型操作は、2つ以上のデータソースからのレコードを含むデータセットを生成し、そのデータセットを出力として提供する。言い換えれば、和結合型操作は、2つ以上のソースからのデータを単一のデータセットに結合する。「union」という用語(例えば、SQLにおけるUNIONコマンド)は典型的に、その出力を提供する前に両方のデータソースにおいて重複するデータ要素を除去する和結合型操作を指し、「union all」(例えば、SQLにおけるUNION ALLコマンド)は典型的に、その出力を提供する前に両方のデータソースにおいて重複するデータ要素を除去しない和結合型操作を指す。例えば、2つのデータセットのそれぞれが電話番号を含み、両方のデータセットが「555−1212」という電話番号を表すデータ要素を含む場合、「union」操作は電話番号「555−1212」を表す1つのデータ要素のみを出力し、「union all」操作は電話番号「555−1212」を表す2つのデータ要素を出力することになる。

0025

クエリは、和結合型操作の後に集約操作(例えば、SUM、COUNT、AVG、MIN、又はMAXなどの操作)も含むことができる。集約操作は、時には集合関数又は要約操作と呼ばれ、出力データが典型的に入力データよりかなり小さいサイズになるように入力データを要約する出力データを提供する。クエリが和結合型操作の後に集約操作を含む場合、集約操作を遂行するためにデータソースから受信したデータの要約のみが必要になるので、コンピュータプログラムを生成するシステムは和結合型操作の前に集約操作を置くことができる。さらに、和結合型操作の前に置かれた集約操作は、データソースのいずれか又は全部が集約操作を本来サポートするものと判断された場合、それぞれの関連データソース内にプッシュダウンすることができる。コンピュータプログラムは、そうでなければデータソースのうちのいくつか又は全部から受信されると思われるデータの要約のみを受信するので、これは典型的にデータソースから転送されるデータの量を削減する。

0026

実世界の一例として、電話会社は60日間遡って通話の記録を記憶する場合がある。この会社は、最後の7日間の通話記録を含むデータストアと、残りの53日間の記録を含むもう1つのデータストアを有する可能性がある。60日間すべての記録について実行されたクエリは和結合型操作を含む可能性があり、集約操作は一方又は両方のデータストアにプッシュダウンすることができる。さらに、最後の7日間の通話記録を含むデータストアはリレーショナルデータベースにすることができ、残りの53日間の記録を含むデータストアはリレーショナルデータベース以外のタイプのデータストア、例えばフラットファイルにすることができる。集約操作は、依然として最後の7日間の通話記録を含むリレーショナルデータベースにプッシュダウンすることができる。

0027

図1は、クエリ102を処理して、クエリ102によって指定された結果104を生成することができるデータ処理システム100を示している。結果104は、クエリ102によって参照されるデータソース110、120から受信したデータ106に基づくものである。データ処理システム100は、クエリ102に基づいてデータ処理システム100が生成する命令114、124に応答してデータ106を受信する。

0028

クエリ102は、そのクエリによって指定されたものと判断されたデータを取り出すために使用される。

0029

1つのタイプのクエリ102は構造化照会言語(SQL)クエリである。SQLクエリ(SQL文ともいう)は、構造化照会言語によって定義されたコマンド及び構文を使用する。クエリに応答してデータを返すリソースの典型的な一例はリレーショナルデータベースである。リレーショナルデータベースは、1つ以上のデータベーステーブルと、SQLクエリの解釈、テーブルからのデータの読み取り、テーブルへのデータの書き込み、その他の種類のデータ処理機能の実行などのデータ処理操作を管理するシステムとの集合である。データベーステーブルは、a)それぞれが1つのレコードを表す行と、b)それぞれが行内に記憶されているデータのカテゴリを表す列とに配置されたデータの集合である。例えば、「current_customers」というデータベーステーブルは、それぞれがある事業の現在の顧客を表す行を有することができ、顧客の名前、顧客の住所、顧客が最後に購入した製品などのデータのカテゴリを表す列を有することができる。

0030

データソース110、120はデータ処理システム100の外部にある。データ処理システム100の外部ということは、そのリソースがデータ処理システム100のコンポーネントの1つではないことを意味する。(データ処理システム100のいくつかのコンポーネントは図2に詳細に示されている。)例えば、データソース110、120は、ネットワーク(例えば、インターネット)を使用して通信する設備にすることができる。データ処理システム100は、ネットワークにデータを送信し、ネットワークからデータを受信することにより、データソース110、120と通信する。

0031

同図に示されているように、データ処理システム100は、複数のデータソース110、120への参照101、103を含むクエリ102を受信することができる。データソース110、120はそれぞれ、1つ以上のデータセットを含む。例えば、データソース110、120は、記憶媒体、例えば、有形で非一時的なコンピュータ可読媒体上に記憶されているデータベーステーブル、データファイル、又はその他のデータ構造などのデータセットを含むことができる。

0032

さらに、データソースは典型的に、そのデータソースに関連するシステムによって管理される。例えば、データソースがデータベーステーブル(又はデータベーステーブルの集合)を含むリレーショナルデータベースである場合、そのリレーショナルデータベースはリレーショナルデータベース管理システム(RDBMS)によって管理することができる。参照101、103はデータソースを識別する任意の情報にすることができる。いくつかの例では、参照101、103はデータソース110、120の英数字「名」である。

0033

リレーショナルデータベース管理システム(RDBMS)は、リレーショナルデータベースに記憶されているデータの作成及び修正に向けられた命令を処理するシステムである。RDBMSは、クエリを解釈し、クエリによって指定されたデータを返すための機能性を含む。クエリを解釈することと、クエリによって指定されたデータを返すことの組み合わせは、時にはクエリを実行することと呼ばれる。例えば、いくつかのRDBMS実施形態は、a)SQLクエリを構文解析し、b)構造化照会言語によって定義された操作を識別し、c)コマンドの引数を識別し、d)引数に応じて操作を遂行する(例えば、実行する)エンジンを含む。

0034

上記のように、SQLクエリ「SELECT last_name FROM current_customers」は操作SELECTを含み、これはSELECT操作の引数に応じてデータを取り出すようRDBMSに指示する。引数は、RDBMSによって管理されるデータベーステーブルである「current_customers」及びデータベーステーブルの列である「last_name」である。RDBMSがクエリを解釈し、クエリの操作を実行すると、RDBMSはクエリに応答してlast_name列のデータ(例えば、last_name列に含まれるデータの各部分)を返すことになる。

0035

データ処理システム100は、クエリ102に基づいてコンピュータプログラム108(時にはデータ処理プログラムという)を生成する。例えば、コンピュータプログラム108は、クエリを入力として取り、データフローグラフを出力として生成するエンジン(例えば、データ処理システム100のサブシステムを形成するエンジン)を使用して生成することができる。ここでは一例としてデータフローグラフを使用するが、コンピュータプログラムは、プログラムコードによって表される命令を遂行するために実行できるプログラムコードを含む任意の種類のプログラムにすることができる。

0036

このようにして、図1に示されているコンピュータプログラム108などのコンピュータプログラムは、実行された時に、例えばRDBMSなどのデータベース管理システムにより、対応するクエリ102の実行と同じ出力を生成することができる。従って、クエリ102は、SQLなどの照会言語を使用して作成することができる。しかしながら、対応するデータ処理操作を遂行するシステム、例えばデータ処理システム100のサブシステムは、クエリ102を実行したが、コンピュータプログラム108を実行しなかったシステム(例えば、RDBMS)によって実行されると思われる操作と同等の操作を実行するために、コンピュータプログラム108を実行することができる。2つの操作が同等であるという場合、同じ入力データを提供された時に2つの操作が実質的に同じ出力データを生成することを意味する。一例として、2つの操作は、同じ入力データを提供された時に正確に同じ出力データを生成する可能性がある。一例として、同じ入力データを提供された2つの操作はデータフォーマットのみが異なる出力データを生成する可能性があり、例えば、1つの操作はコンマで区切られた出力データを生成する可能性があり、同等の操作は、それ以外はコンマで区切られた出力データと同一である、タブで区切られた出力データを生成する可能性がある。

0037

いくつかの例では、クエリ102の操作のうちのいくつかはコンピュータプログラム108によって遂行することができ、クエリ102の操作のうちのいくつかはデータソース110、120にプッシュダウンすることができる。これにより、データ処理システム100は、データソース110、120を管理するシステム112、122のうちの1つ以上によって実行できるクエリ102内の操作を識別することを意味する。次に、データ処理システム100は、システム112、122によって実行された時に、データ処理システム100によって識別された操作と同等の操作をシステム112、122に実行させる命令114、124を生成することができる。コンピュータプログラム108は、コンピュータプログラム108が実行された時に命令114、124をシステム112、122に送信するように構成することができる。命令114、124は、システム112、122によって実行できる任意のフォーマットの命令にすることができる。

0038

いくつかの例では、データソース110、120のそれぞれの能力は、データソース110、120の既知の特徴に基づいてデータ処理システム100に知られている。例えば、データ処理システム100がSQL文を使用してデータソース110のうちの1つと通信する場合、データソース110がSQL文を処理できることはデータ処理システム100にすでに知られている。この情報により、データ処理システム100は、SQL文として表し、従って、データソース110にプッシュダウンすることができるその他の操作を識別することができる。

0039

いくつかの例では、プッシュダウンされる操作は集約操作105である。集約操作105はデータを取り入れて、データの要約を生成するので、集約操作105は典型的にその入力データに比べて少量の出力データを生成する。この理由で、一般に、データソース110、120を管理するシステム112、122によって、集約操作105に対応する操作を遂行することはより効率的である。このようにして、データ処理システム100はデータソース110、120のそれぞれから要約データ116、126を受信するだけである。要約データ116、126は典型的に、集約操作105に対応する操作がデータ処理システム100上で実行しているコンピュータプログラム108によって実行された場合にデータソース110、120から転送されると思われるデータ106より少量のデータになる。さらに、集約操作は一般にSQL文又はSQL文の一部分として表すことができ、従って、これはSQL文を処理できるシステム(例えば、RDBMS)にプッシュダウンすることができる操作の一例である。このようにして、それぞれのデータソース110、120から返されるデータ106は、データの一部分(例えば、クエリ102によって指定されるようにデータベーステーブルの一部分又はデータのその他の本体の一部分)そのものではなく、それぞれのデータソースに記憶されているデータの一部分の要約になる。

0040

集約操作105は、和結合型操作がクエリ102内の集約操作105に先行する場合でもプッシュダウンすることができ、これについては図3及び図4に詳細に示されている。

0041

図2は、クエリ102を解釈し、クエリ102に対応するコンピュータプログラム108を生成するために使用できるデータ処理システム100の諸要素を示している。

0042

クエリ102は、クエリ102に対応するクエリプラン132を生成するクエリプランナ(query planner)130によって受信される。例えば、データ処理システム100はクエリプランナ130にクエリ102を提供することができる。クエリプランは、クエリが実行される場合に実行できる操作(例えば、データ処理操作)の記述である。例えば、この操作は、例えばデータベース管理システムによって遂行されるデータベース操作である可能性がある。また、この操作は他の形を取ることもできる。データベース操作は時にはデータベース機能又はデータベースタスクともいう。

0043

クエリプランは、その他の配置の操作又は異なるセットの操作が同じ結果を達成すると思われる場合でも、1つの可能な配置の操作について記述する可能性がある。クエリプランナは、クエリに関する情報及びクエリによって使用されるデータソースに関する情報に基づいてクエリプランを生成できるシステムである。

0044

いくつかの配置では、操作は、依然として同等の出力を提供しながら、様々な順序で実行することができる。このため、クエリプランナは、最適クエリプランを決定する機能性を有することができる。例えば、最適クエリプランは、最小量の時間でクエリを実行するため、データ記憶空間などの最小量のデータベースリソースを使用するため、又はそれ以外にデータベースシステムによって識別された制約の範囲内でクエリを達成するための操作の配置を記述するクエリプランにすることができる。最適クエリプランを決定するためのクエリプランナの機能性は、多くの可能なクエリプランにスコア又はランクを付ける機能性を含むことができ、最適又は効率的な構成になるように可能なクエリプランを再配置する機能性も含むことができる。

0045

単一クエリは複数回実行することができ、それぞれの実行は固有の最適クエリプランを有することができる。例えば、データベーステーブル内のデータは1つのクエリを2回実行する間に変化する可能性がある。この例では、クエリの1回目の実行のために生成されたクエリプランに記載されている操作は、そのクエリの2回目の実行中に、1回目の実行中より長いか又は短い実行時間を必要とする可能性がある。この場合、例えば、同じ操作を異なる配置にするか又は異なる操作の配置にするなど、異なる操作配置にする方がクエリの2回目の実行により適している可能性がある。クエリの2回目の実行のために最適化されたクエリプランは、データベーステーブルの瞬間的な状態を考慮に入れて、その実行のために生成することができる。

0046

クエリプラン132はコンピュータプログラム生成エンジン140によって受信される。コンピュータプログラム生成エンジン140は、実行された時に、クエリ102に対応する操作を遂行するコンピュータプログラム108を生成する。例えば、クエリ102は、構造化照会言語によって定義された1つ以上の操作と、その操作に関連する引数とを含む。この例では、コンピュータプログラム108は、SQLクエリの操作と同等の実行可能機能性を含み、コンピュータプログラム108が実行されると、コンピュータプログラム108は同じ引数に基づいて実行される。

0047

コンピュータプログラム生成エンジン140は、クエリプラン132を分析し、コンピュータプログラム108が生成される前にクエリプラン132によって表される操作を変更しなければならないかどうかを判断する。コンピュータプログラム108はクエリプラン132に基づいて生成されるので、コンピュータプログラム生成エンジン140は、分析の結果を使用して、コンピュータプログラム108の生成に移行する前にクエリプラン132を修正することができる。例えば、クエリプラン132は集約操作が後に続く和結合型操作を含むことができる。そうである場合、コンピュータプログラム生成エンジン140は、和結合型操作の前に集約操作を置くようにクエリプラン132を修正することができる。これは、図3及び図4にさらに詳細に示されている。

0048

コンピュータプログラム生成エンジン140がコンピュータプログラムを生成する場合、集約操作はデータソースから直接受信したデータについて実行されるので(例えば、そのデータは集約操作の前にいかなる操作も受けない)、コンピュータプログラム生成エンジン140はデータソースへのプッシュダウンのための候補として集約操作を識別することができる。次に、コンピュータプログラム生成エンジン140は、データソース110、120を管理するシステム112、122のいずれか一方又は両方が集約操作と同等の操作を実行できるかどうかを判断することができる。第1のシステム112が集約操作と同等の操作を実行できる場合、コンピュータプログラム生成エンジン140は、集約操作と同等の操作を実行し、要約データをコンピュータプログラムに返すよう第1のシステム112に指示する命令114を第1のシステム112に送信するようにコンピュータプログラム108を構成する。第2のシステム122が集約操作と同等の操作を実行できる場合、コンピュータプログラム生成エンジン140は、集約操作と同等の操作を実行し、要約データをコンピュータプログラムに返すよう第2のシステム122に指示する命令124を第2のシステム122に送信するようにコンピュータプログラム108を構成する。

0049

いくつかの実施形態では、コンピュータプログラム108はデータフローグラフ142を含む。データフローグラフは、入力データについて実行すべき操作を表すコンポーネントと、データの流れを表すコンポーネント間リンク(時にはノードと呼ばれる)とを含むコンピュータプログラムである。コンポーネントによって表される操作は、入力データを処理することにより、入力データに基づいた出力データを生成する。コンポーネントは、そのコンポーネントが他のコンポーネントにリンクされている場合、他のコンポーネントに入力データを提供し、他のコンポーネントから出力データを受信することができ、2つのコンポーネント間のそれぞれのリンクは一方のコンポーネントからもう一方のコンポーネントへのデータの流れを表す。グラフのコンポーネントのサブセット(例えば、グラフの1つ以上のコンポーネント)は時にはグラフのサブグラフという。データフローグラフがグラフベースの処理システムによって実行される場合、コンポーネントのそれぞれが実行され、例えば、コンピュータプログラム又はコンピュータプログラムの一部分が実行され、そのコンポーネントによって表される操作を遂行する。実行中に、データフローグラフは、出力データを生成するために処理される(例えば、データフローグラフのコンポーネントの操作によって操作される)入力データを受信する。いくつかの例では、データフローグラフのいくつか又はすべてのコンポーネントはそれぞれ、そのコンポーネントに関連する操作を実行するために実行可能プログラムコードを呼び出すための情報に関連付けられる。例えば、あるコンポーネントは、そのコンポーネントに関連する操作を遂行するための、例えば、データを処理して出力するためのコンピュータで実行可能な命令を含むコンピュータ可読記憶域に記憶されているコンピュータプログラムへの参照に関連付けることができる。いくつかの例では、データフローグラフのいくつか又はすべてのコンポーネントはそれぞれ、データをプログラムコードにとって使用可能な状態にするための情報に関連付けられる。例えば、あるコンポーネントは、そのコンポーネントに関連する実行可能プログラムにデータを引き渡すために呼び出すことができる関数呼び出しに関連付けることができるか、そのコンポーネントに関連する実行可能プログラムに引き渡されるデータを受信できるネットワークポートに関連付けることができるか、あるいはそのコンポーネントに関連する実行可能プログラムにデータを引き渡すための他の技法に関連付けることができる。このようにして、それぞれのコンポーネントはデータを受信し、処理し、出力することができる。

0050

グラフベースのシステムの一例は、「Managing Parameters for Graph−Based Applications」という名称の米国特許出願公報第2007/0011668号に詳細に記載されており、同出願は参照により本明細書に取り入れられる。グラフベースの計算を実行するためのシステムは、「Executing Computations Expressed as Graphs」という名称の米国特許第5966072号に記載されており、同特許は参照により本明細書に取り入れられる。さらに、データフローグラフのコンポーネントはクエリ102の操作の代わりに使用することができる。この代用による技法は、「Managing Data Queries」という名称の米国特許出願公報第2011/0179014A1号及び同じく「Managing Data Queries」という名称の米国特許出願公報第2012/0284255A1号にさらに記載されており、これらの出願は参照により本明細書に取り入れられる。いくつかの実施形態では、データフローグラフはクエリ102から生成することができる。

0051

いくつかの実施形態では、コンピュータプログラム108はパラメータで構成することができる。例えば、パラメータは、プログラムの挙動を変更するように変更可能な値にすることができる。特定の例として、パラメータは「ファイル名」にすることができ、そのパラメータの値はファイルシステム内のファイルの位置にすることができる。パラメータの値は、異なるファイルにアクセスするようにプログラムを構成するために、異なるファイルの位置に変更することができる。同じプログラムの2つのインスタンスは異なるパラメータ値で構成することができ、その値は同じプログラムの2つのインスタンスの挙動を変更することになる。

0052

実行エンジン150はコンピュータプログラム108を受信する。次に、実行エンジン150はコンピュータプログラム108を実行し、例えば、コンピュータプログラム108に関連するプログラムコードによって指定された命令を遂行する。実行された時にコンピュータプログラム108は、命令114、124を生成し、データソース110、120を管理するシステム112、122にその命令114、124を送信する。

0053

いくつかの実施形態では、例えば、コンピュータプログラム108がデータフローグラフである場合、実行エンジン150は、時にはグラフオペレーティングシステムと呼ばれる専用オペレーティングシステムを含む。グラフオペレーティングシステムは、データフローグラフの個々のコンポーネントの基礎となる操作を実行できるコンピュータプログラムである。例えば、データフローグラフのあるコンポーネントがデータ処理システムによって遂行すべき操作を表す場合、グラフオペレーティングシステムは、その操作を遂行するようデータ処理システムに指示することが課せられる。

0054

データソース110、120を管理するシステム112、122に命令114、124を送信した後、コンピュータプログラム108はデータソース110、120から要約データ116、126を受信する。次に、実行エンジン150はコンピュータプログラム108の実行時に要約データ116、126を使用して、クエリ102の結果104を生成する。このようにして、データ処理システム100は、クエリ102を実行し、そのクエリによって指定された結果104を生成することができる。

0055

図3は、SQLで作成されたクエリ200と、そのクエリを表すクエリプラン210の図表現を示している。例えば、クエリ200は図1及び図2に示されているクエリ102の一例にすることができ、クエリプラン210は図2に示されているクエリプラン132の一例にすることができる。クエリ200は、「Boston」及び「New York」という2つのデータソース(例えば、リレーショナルデータベーステーブル)内で見つかった「price」という列の最大値を計算するために使用される。2つのデータソースはクエリ200内の引数202、204によって識別される。また、クエリ200は実行すべき「GROUP BY hotel_chain」という操作も要求し、この操作は、出力の列のうちの1つ、即ちここではhotel_chain列に応じて出力のデータをグループ分けする。実世界の一例として、このクエリは、ボストンホテルのデータベースとニューヨークのホテルのデータベースの両方に記録されているホテルの客室最高価格(「最大値」)を求めるために使用することができる。このクエリが実行されると、2つのデータソースからのデータが合体(例えば、結合)され、ホテルチェーンでグループ分けされる。次に、それぞれのホテルチェーンごとにホテルの客室の最高価格が識別され、返される。

0056

クエリプラン210は2つのデータソース212、214の識別を含み、そのそれぞれは和結合型操作216によって結合されるデータを提供する。例えば、和結合型操作216は、SQLクエリ200に指定されている操作次第で、「union」又は「union all」と同等なものにすることができる。ここでは、「union」操作(例えば、UNIONコマンド)がSQLクエリ200に指定されている。

0057

和結合型操作216の出力はGROUP BY操作217に提供され、そこで、例えばhotel_chain列でデータをグループ分けすることによってデータが処理される。処理されたデータはロールアップ操作218に渡され、そこで入力データの最大値が決定される。この最大値がクエリ200の結果になる。

0058

図4は、もう1つのバージョンのクエリプラン210aを示している。このバージョンのクエリプラン210aは、例えば図2に示されているコンピュータプログラム生成エンジン140によって修正されている。(いくつかの例では、この修正は、クエリプラン132が生成エンジン140に提供される前にクエリプランナ130で実行される。)このバージョンのクエリプラン210aでは、ロールアップ操作218aは第1のデータソース212と和結合型操作216との間に置かれ、もう1つのロールアップ操作218bは第2のデータソース214と和結合型操作216との間に置かれている。クエリプラン210aのこの配置は、図3に示されている配置のクエリプラン210と同じ出力を生成する。さらに、データソース212、214のいずれか一方がロールアップ操作218a、218bと同等の操作を遂行できる場合、それぞれのロールアップ操作218a、218bは対応するデータソース212、214にプッシュダウンすることができる。

0059

このバージョンのクエリプラン210aは、和結合型操作の後に追加のロールアップ操作219を含む。ロールアップ操作218a、218bはそれぞれ「最大値」(最大値)操作を表すので、和結合型操作の出力の最大値は、和結合型操作によって出力される2つの値(例えば、ロールアップ操作218a、218bによって返される2つの値)の間の最大値を識別するように決定しなければならない。従って、ロールアップ操作218が図3に示されている和結合型操作216及びGROUP BY操作217の出力について操作するように、ロールアップ操作219は和結合型操作216及びGROUP BY操作217の出力について操作する。しかしながら、図4に示されているこのロールアップ操作219は、図3に示されているこの位置のロールアップ操作218と比べて非常に少量のデータを操作する。

0060

図4に示されているクエリプラン210aは、集約操作の特性に基づいて生成することができる。例えば、MIN(最小データ値)、MAX(最大データ値)、SUM(データ値の合計)、COUNT(レコード数)、及びAVG(データ値の平均)を含む、集約操作のいくつかの特性は以下の通りである。これらの特性のそれぞれは、集約操作を含む式及び順番に実行される複数の集約操作を含む同等の式を表す。これらの特性のうちのいくつかは、分配特性の適用を含み、関数fの場合、式f(X,Y)は式f(f(X),f(Y))と同等である。一般に、集約操作はこれらの特性に応じて一連の集約操作に変換することができ、次にその一連の操作のうちのいくつかはデータソースを管理するシステムに「プッシュダウン」することができる。

0061

特性1: AGG(X UNION ALLY)=AGG(AGG(X) UNION ALL AGG(Y)) [ここで、AGGはMIN、MAX、又はSUMのうちの1つである]
特性2: COUNT(X UNION ALL Y)=SUM(COUNT(X) UNION ALL COUNT (Y))
特性3: AVG(X UNION ALL Y)=SUM(X UNION ALL Y)/COUNT(X UNION ALL Y)=SUM(SUM(X) UNION ALL SUM(Y))/SUM(COUNT(X) UNION ALL COUNT(Y))
特性4: AGG(X UNION Y)=AGG(AGG(X) UNION AGG(Y)) [ここで、AGGはMIN又はMAXのうちの1つである]

0062

以下の擬似コードは、それぞれが和結合型操作に続く1つ以上の集約操作をプッシュダウンするためにクエリプランを修正するための技法を表している。

0063

有効範囲及びサブクエリ範囲テーブルを備えたクエリプランが与えられ、それぞれのサブクエリがターゲット入力式ターゲットリストを定義する場合:
クエリプラン内のそれぞれのサブクエリを最上位からトラバースする。
それぞれのサブクエリについて、以下のチェック及び変形を実行する:
クエリが空でない和結合パラメータを備えたサブクエリタイプの範囲テーブルを1つだけ有するかどうかをチェックする。そうではない場合、次のサブクエリに進む。
クエリターゲットリスト内のそれぞれのターゲット入力について:
ターゲット入力が集約コマンドを有するかどうかをチェックする。そうではない場合、次のターゲット入力に進む。
(SUM,COUNT,AVG)及びUNION ALL内の集約コマンド)又は(MIN,MAX)及びUNION内の集約コマンド)かどうかをチェックする。そうではない場合、次のサブクエリに進む。
クエリ範囲テーブル内のサブクエリを変形する。
サブクエリ内のそれぞれの範囲テーブルについて:
新しいサブクエリを作成し、範囲テーブルを新しいサブクエリの範囲テーブルリストコピーする。
クエリターゲットリスト及びグループを新しいサブクエリのターゲットリスト及びグループ句にコピーする。
ターゲットリストがAVG関数を有するかどうかをチェックする。そうである場合、それぞれのAVG()関数に関するSUM()関数及びCOUNT()関数をターゲットリストに追加する。
範囲テーブルを新しいサブクエリで置換する。
クエリターゲットリスト内のそれぞれのターゲット入力について:
ターゲットリストがAVG関数を有するかどうかをチェックする。それぞれのAVG()関数を、対応する新たに形成されたSUM()/COUNT()で置換する。

0064

図5は、クエリプラン210aから生成されたコンピュータプログラム300を示している。このコンピュータプログラム300は、図1及び図2に示されているコンピュータプログラム108の一例にすることができる。このコンピュータプログラム300は、データの流れを表すリンクによって接続されたコンポーネントを含むデータフローグラフであり、同じく図2に示されているデータフローグラフ132の一例にすることができる。

0065

コンピュータプログラム300は、実行可能コード(例えば、1つ以上の実行可能操作)を表すコンポーネントを有する。コンピュータプログラム300は、第1のデータソース212の出力データを表すコンポーネント302と、第2のデータソース214の出力データを表すコンポーネント304とを有する。2つのコンポーネント302、304は、和結合型操作216を表すコンポーネント306にリンクされる。いくつかの実施形態では、コンポーネント306は、複数のコンポーネントの組み合わせ、例えばサブグラフにすることができる。このコンポーネント306は、ロールアップ操作219及びGROUP BY操作217を一緒に表すコンポーネント308にリンクされる。コンピュータプログラム300が実行されると、コンピュータプログラム300の出力は、図3に示されているSQLで作成されたクエリ200を実行するシステムの出力と同等である。

0066

データソースの出力データを表すコンポーネント302、304のそれぞれは、それぞれの対応するデータソースに命令を送信するように構成されている。例えば、ボストンデータソース212の出力データを表すコンポーネント302は、ボストンデータソース212を管理するシステム(例えば、ボストンデータソース212に記憶されているデータセットを管理するシステム)に送信された時に、図4に示されているロールアップ操作218aによって表される要約操作と同等の操作を実行する命令で構成されている。この操作は、いずれかのデータがコンピュータプログラム300によって受信される前に遂行される。いくつかの実施形態では、コンポーネント302は、ボストンデータソース212を管理するシステムにSQLクエリを送信することができる。ここでは、SQLクエリは、ボストンデータソース212に記憶されているデータベーステーブルの「price」列の最大値を指定することができる。命令は、例えば、「SELECT max(price), hotel_chain FROM Boston GROUP BY hotel_chain」というSQL文にすることができる。このようにして、ロールアップ操作218aはボストンデータソース212にプッシュダウンされている。

0067

この例では、ボストンデータソース212及びニューヨークデータソース214の両方に集約操作がプッシュダウンされている。従って、ボストンデータソース212及びニューヨークデータソース214を管理するシステムは、集約操作と同等の操作を実行できるものと判断されている。いくつかの実施形態では、この判断は図2に示されているコンピュータプログラム生成エンジン140によって行われ、コンピュータプログラム生成エンジン140はコンピュータプログラム300を生成する時にこの判断を使用する。いくつかの実施形態では、この判断は図2に示されているクエリプランナ130によって行われ、クエリプラン132は集約操作のプッシュダウンを取り入れるようにクエリプランナ130によって修正される。これらの実施形態では、コンピュータプログラム生成エンジン140は、クエリプラン132からコンピュータプログラム300を生成することができ、クエリプラン132で識別されたデータソースを管理するシステムの能力を評価する必要はない。

0068

いくつかの例では、データソースのうちの少なくとも1つは集約操作と同等の操作を実行できない可能性がある。図6は、クエリプラン210aから生成されたコンピュータプログラム300aの一例を示している。この例では、ボストンデータソース212を管理するシステムは集約操作と同等の操作を実行できるものと判断されている。しかしながら、ニューヨークデータソース214を管理するシステムは集約操作と同等の操作を実行できないものと判断されている。従って、このコンピュータプログラム300aでは、ニューヨークデータソース214の出力を表すコンポーネント304は、和結合型操作を表すコンポーネント306にリンクされたロールアップコンポーネント305にリンクされる。ここでは、MAX操作をニューヨークデータソース214にプッシュダウンすることができないので、操作は代わりにロールアップコンポーネント305で実行される。ボストンデータソース214の出力を表すコンポーネント302は、クエリプラン210からの集約操作218aと同等の操作を遂行するための命令をボストンデータソース214に送信するように構成され、従って、ボストンデータソース214の出力を表すコンポーネント302は和結合型操作を表すコンポーネント306にリンクされる。このようにして、他のデータソースが操作をサポートしない場合でも、集約操作を何らかのデータソースにプッシュダウンすることができる。

0069

図7は、SQLクエリに基づいてコンピュータプログラムを生成するための手順400を表すフローチャートを示している。手順400は、例えば、図1に示されているデータ処理システム100のコンポーネントによって遂行することができる。

0070

この手順は402でSQLクエリを受信する。例えば、SQLクエリは図1に示されているクエリ102の一例にすることができる。いくつかの例では、SQLクエリは、データ処理システムの外部にある1つ以上のデータセットへの参照を含む。例えば、クエリは、第1のデータソースに記憶されている第1のデータセットへの参照と、第1のデータソースとは異なる第2のデータソースに記憶されている第2のデータセットへの参照とを有することができる。例えば、データソースは、リレーショナルデータベース(例えば、リレーショナルデータベーステーブルを記憶する)、データ記憶域上でアクセス可能なフラットファイル、ネットワークを介してアクセス可能なデータストリーム、HDFS(Hadoop分散ファイルシステム)ファイル、又はその他の種類のデータソースにすることができる。図1に示されているデータソース110、120はデータソースの例であり、データセットはデータソース110、120に記憶されているデータにすることができる。参照の例は図3に示されている引数202、204である。

0071

この手順は404で、SQLクエリが2つ以上のコマンドを含み、そのコマンドが第1の和結合型操作と第1の集約操作とを含むと判断する。いくつかの実施形態では、和結合型操作は、第1のデータソースから受信したデータに基づいてデータの第1の部分に適用され、第2のデータソースから受信したデータに基づいてデータの第2の部分にも適用される。SQLクエリの一例は図3に示されているSQLクエリ200である。いくつかの実施形態では、SQLクエリは、SQLクエリから生成されたクエリプランに基づいて和結合型操作と第1の集約操作とを含むものと判断される。

0072

この手順は406で、第1の和結合型操作が第1のデータセットからのデータの少なくとも一部分に適用され、第2のデータセットからのデータの少なくとも一部分に適用されることをSQLクエリが記述していると判断する。例えば、プロセスは、SQLクエリを構文解析して、和結合型操作(例えば、UNION又はUNION ALL)を識別し、データの一部分に対応する引数(例えば、データの一部分を含むデータソースを指定する引数)を識別することができる。

0073

この手順は408で、第1の集約操作が第1の和結合型操作の結果として得られるデータに適用されることをSQLクエリが記述していると判断する。例えば、この手順は、SQLクエリを構文解析して第1の集約操作を識別することができ、例えば、和結合型操作は第1の集約操作への引数として提供される。

0074

いくつかの実施形態では、この手順は第1の集約操作に基づいて第2の集約操作を決定する。例えば、この手順は、遂行された時に第1の集約操作の出力と同等の出力を生成する一連の操作を決定し、その一連の操作から第2の集約操作を選択することができる。一例として、第1の集約操作は最小値操作、最大値操作、合計操作、又はカウント操作にすることができ、第2の集約操作は第1の集約操作と同じタイプの集約操作にすることができる。もう1つの例として、第1の集約操作は平均操作にすることができ、第2の集約操作は合計操作又はカウント操作にすることができる。これらの例では、第2の集約操作は上記の特性1〜4のうちの1つに応じて選択される。

0075

いくつかの実施形態では、この手順は、第2の集約操作が第1のデータソースを管理するシステムによって実行できると判断する。例えば、データソースを管理するシステムが、SQL文を実行できるRDBMSである場合、このシステムは、集約操作がSQL文の一部として表される場合にその集約操作を実行することができる。RDBMS112、122の例は図1に示されている。

0076

この手順は410で、SQLクエリに基づいてコンピュータプログラムを生成する。いくつかの実施形態では、コンピュータプログラムは、第1のシステム、例えば、図1に示されているデータ処理システム100によって生成される。このプログラムの実行は、以下の図8に示されている手順500に対応することができる。いくつかの実施形態では、これは、SQLクエリに基づいてクエリプランを生成することと、第1のデータソースからのデータに適用される第2の集約操作をクエリプランに追加することと、第1のデータソースに関連する第1のシステムが第2の集約操作を遂行するための機能性を含むと判断することと、第2の集約操作を遂行するための命令を、第1のデータソースを表すクエリプランの一部分に付加することと、クエリプランに基づいてコンピュータプログラムを生成することとを含む。次に、このプログラムを実行することができる。

0077

いくつかの実施形態では、手順400の410で生成されたコンピュータプログラムは、SQLクエリの和結合型操作を表す第1のコンポーネントを含む。第1のコンポーネントは、データの第1の部分の要約及びデータの第2の部分の要約に適用され、それぞれの要約はデータのそれぞれ対応する部分より少ないレコードを含む。コンピュータプログラムは第1のデータソースを表す第2のコンポーネントも含むことができ、第2のコンポーネントは、実行された時に、第1のシステムによる実行のために命令を送信させる。この命令は、第2の集約操作に対応するコマンドを含むSQL文を含むことができる。さらに、この命令は、第1のシステムがコンピュータプログラムを実行するシステムにデータを送信させる前に遂行される。

0078

この例では、第2のコンポーネントの出力は、第1のデータソースからのデータの第1の部分の要約を含むことができる。また、コンピュータプログラムは、第2のデータソースを表す第3のコンポーネントと、第3の集約操作を表す第4のコンポーネントも含むことができ、第3のコンポーネントの出力は第4のコンポーネントに流れ、第4のコンポーネントの出力は第1のコンポーネントに流れる。例えば、第3の集約操作は、図6に示されているコンポーネント305によって表すことができる。さらに、第1のコンポーネントの出力は、例えば、図6に示されているコンポーネント308によって表されるように、他の集約操作に流れる場合もある。

0079

いくつかの実施形態では、コンピュータプログラムは、第2のデータセットからのデータの一部分について第2の集約操作を実行するよう第3のシステムに指示する命令も送信し、データの第2の部分の要約である特定のデータセットを第3のシステムから受信する。これは、例えば、第2のデータソースを管理するシステムが第2の集約操作を実行できるという判断が行われた時に行うことができる。

0080

図8は、SQLクエリの実行に関する操作を実行するための手順500を表すフローチャートを示している。手順500は、例えば、図1に示されているデータ処理システム100のコンポーネントなどの第1のシステムによって遂行することができる。例えば、手順500は、実行エンジン150がSQLクエリから生成されたコンピュータプログラムの少なくとも一部を実行する時に、図2に示されている実行エンジン150によって遂行することができる。コンピュータプログラムは、図1図2に示されているコンピュータプログラム108及び図7の410で生成されたコンピュータプログラムにすることができる。さらに、SQLクエリは図1及び図2に示されているクエリ102にすることができる。

0081

この手順は502で、第1のデータセットからのデータの一部分について第2の集約操作を実行するよう第2のシステムに指示する命令を送信する。例えば、第2のシステムは、図1に示されているシステム112、122のうちの1つにすることができる。命令はSQL文の形にすることができる。例えば、命令は図1に示されている命令114、124にすることができる。

0082

この手順は504で、データの第1の部分の要約である特定のデータセットを第2のシステムから受信する。例えば、このデータの一部分は、コンピュータプログラムが生成されたSQLクエリで参照されたデータの一部分にすることができる。

0083

この手順は506で、特定のデータセット及び第2のデータセットからのデータの一部分の要約について第2の和結合型操作を実行する。例えば、データの第2の部分は、コンピュータプログラムが生成されたSQLクエリで参照されたデータの他の一部分にすることができる。いくつかの実施形態では、第2の和結合型操作は第1の和結合型操作と同じタイプのものである。上記のように、1つのタイプの和結合型操作は「union」であり、もう1つは「union all」である。例えば、第1の和結合型操作が「union all」操作であり、第2の和結合型操作も「union all」操作である場合、2つの操作は同じタイプのものである。

0084

このようにして、コンピュータプログラムは、例えば、SQLクエリがリレーショナルデータベースシステム又はSQLクエリを評価(例えば、実行)するその他のシステムである場合と同様に、SQLクエリの出力と同等の出力を生成する。しかしながら、操作はデータソースに「プッシュダウン」されるので、コンピュータプログラムは、その操作がコンピュータプログラムそのものによって遂行された場合より効率的に動作することができる。

0085

図2に示されているクエリプランナ130、生成エンジン140、及び/又は実行エンジン150は、例えば、UNIX(登録商標)オペレーティングシステムのあるバージョンなど、適切なオペレーティングシステムの制御下にある1つ以上の汎用コンピュータ上で処理される。例えば、これは、ローカル(例えば、対称型マルチプロセッシングSMP)コンピュータなどのマルチプロセッサシステム)又はローカル分散型(例えば、クラスタとして結合された複数プロセッサ又は超並列処理(MPP)システム)あるいはリモート又はリモート分散型(例えば、ローカルエリアネットワーク(LAN)及び/又は広域ネットワークWAN)を介して結合された複数プロセッサ)あるいはこれらの任意の組み合わせなど、複数の中央演算処理装置(CPU)又はプロセッサコアを使用するコンピュータシステムの構成を含む複数ノード並列コンピューティング環境を含むことができる。

0086

図5及び図6に示されているコンピュータプログラム300、300aは開発環境において表示される場合がある。開発環境は、いくつかの実施形態では、データフローグラフとしてアプリケーションを開発するためのシステムである。このシステムにより作成されるデータフローグラフは、グラフコンポーネントによって表される個々のプロセス内に及び個々のプロセスから情報を取得するため、プロセス間で情報を移動するため、及びプロセスの実行順序を定義するための方法を提供する。このシステムは、任意の使用可能な方法からプロセス間通信方法を選択するアルゴリズムを含む(例えば、グラフのリンクに応じた通信経路は、TCP/IP又はUNIXドメインソケットを使用するかあるいはプロセス間でデータを渡すために共有メモリを使用することができる)。

0087

上記の技法は、適切なソフトウェアを実行するコンピューティングシステムを使用して実現することができる。例えば、ソフトウェアは、それぞれが少なくとも1つのプロセッサと少なくとも1つのデータ記憶システム揮発性及び/又は不揮発性メモリ及び/又は記憶素子を含む)と少なくとも1つのユーザインターフェース(少なくとも1つの入力装置又はポートを使用して入力を受け取り、少なくとも1つの出力装置又はポートを使用して出力を提供するためのもの)とを含む、1つ以上のプログラム式又はプログラム可能コンピューティングシステム(分散、クライアントサーバ、又はグリッドなどの様々なアーキテクチャのものにすることができる)上で実行される1つ以上のコンピュータプログラムに手順を含むことができる。ソフトウェアは、例えば、データフローグラフの設計、構成、及び実行に関するサービスを提供する、より大きいプログラムの1つ以上のモジュールを含むことができる。プログラムのモジュール(例えば、データフローグラフの要素)は、データリポジトリに記憶されているデータモデル適合するデータ構造又はその他の編成済みデータとして実現することができる。

0088

ソフトウェアは、CD−ROM又はその他のコンピュータ可読媒体などの有形で非一時的な媒体(例えば、汎用又は専用コンピューティングシステム又は装置によって読み取り可能)上で提供するか、あるいは、ネットワークの通信媒体により、それが実行されるコンピューティングシステムの有形で非一時的な媒体に引き渡す(例えば、伝搬信号コード化する)ことができる。処理の一部又は全部は、専用コンピュータ上で実行するか、あるいは、コプロセッサ又はフィールドプログラマブルゲートアレイFPGA)又は専用の特定用途向け集積回路ASIC)などの専用ハードウェアを使用して実行することができる。処理は、ソフトウェアによって指定された計算の異なる部分が異なる計算要素によって実行されるという分散方式で実現することができる。このようなコンピュータプログラムはそれぞれ、好ましくは、本明細書に記載されている処理を実行するためにコンピュータによって記憶装置媒体が読み取られた時にコンピュータを構成し操作するために、汎用又は専用プログラマブルコンピュータによってアクセス可能な記憶装置のコンピュータ可読記憶媒体(例えば、ソリッドステートメモリ又はメディアあるいは磁気又は光メディア)上に記憶されるか又はそれにダウンロードされる。また、本発明のシステムは、コンピュータプログラムで構成された有形で非一時的な媒体として実現されるものと見なすこともでき、このように構成された媒体は、本明細書に記載されている処理ステップのうちの1つ以上を実行するために特定の定義済み方式でコンピュータを動作させる。

0089

本発明のいくつかの実施形態について説明してきた。それにもかかわらず、上記の説明は、例証するためのものであり、以下の特許請求の範囲の範囲によって定義されている本発明の範囲を制限するためのものではないことを理解するべきである。従って、その他の実施形態も以下の特許請求の範囲の範囲内にある。例えば、本発明の範囲を逸脱せずに様々な変更を行うことができる。さらに、上記のステップのいくつかは順序に依存しない可能性があり、従って、記載されているものとは異なる順序で実行することができる。

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

技術視点だけで見ていませんか?

この技術の活用可能性がある分野

分野別動向を把握したい方- 事業化視点で見る -

(分野番号表示ON)※整理標準化データをもとに当社作成

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ