この章では、Coherenceの問合せ言語(CohQL)を使用してCoherenceキャッシュと相互作用する方法について説明します。CohQLは、軽量な構文(SQLに似た)で、Coherenceクラスタ上でキャッシュ操作を実行するのに使用します。この言語は、プログラムからでも、コマンドライン・ツールからでも使用できます。
この章には次の項が含まれます:
注意:
|
次の各項では、CohQLの機能について説明します。各項では、特に記述文、その構文、および例について説明します。問合せの例は、「その他のCoherenceの問合せ言語の例」を参照してください。
注意: CohQLでは、副問合せはサポートされません。 |
この項には次のトピックが含まれます:
詳細は、Coherence問合せ文、句、式をアルファベット順に示している表28-1を参照してください。
表28-1 Coherenceの問合せ言語の文
この文、句、または式 | 参照先の項 |
---|---|
BACKUP CACHE |
|
バインド変数 |
|
CREATE CACHE |
|
CREATE INDEX |
|
DELETE |
|
DROP CACHE |
|
DROP INDEX |
|
ENSURE CACHE |
|
ENSURE INDEX |
|
GROUP BY |
|
INSERT |
|
key()擬似関数 |
|
パス式 |
|
RESTORE CACHE |
|
SELECT |
|
SOURCE |
|
UPDATE |
|
value()擬似関数 |
|
WHERE |
|
この項では、構文の一部の構成要素(パス式、バインド変数、擬似関数など)について説明します。
CohQLのメインの構成要素にパス式があります。パス式は、オブジェクトのインスタンスのグラフを介して移動する際に使用されます。パス式の識別子を使用して、Java Bean感覚でプロパティを表現します。これは、先頭にget
を付加し、最初の文字を大文字にして作成される、ReflectionExtractor
によってバッキングされます。各要素は「ドット」(.
)文字で区切られ、オブジェクトのトラバースを表現しています。たとえば、次のパス式はオブジェクト構造を移動するのに使用します。
a.b.c
これは反射的に次のメソッドを起動します。
getA().getB().getC()
プログラム的に使用する場合には、APIは文字列を単純な一連の問合せ関数に渡します。文字列連結を行わずに変数の値を渡すには、バインド変数を使用します。バインド変数には、2つの異なる形式があります。
疑問符(?): 疑問符を入力する場所は、位置を示すプレースホルダーを表す数字の直後です。このプレースホルダーにより、問合せを実行する前に提供されたオブジェクトのコレクションの索引が作成されます。この形式の構文は、?
nで、この場合nに任意の数字を使用できます。位置を示すバインド変数は、フィルタの構成でQueryHelper
クラスによって使用されます。例:
QueryHelper.createFilter("number = ?1" , new Object[]{new Integer(42)};
コロン(:): コロンを入力する場所は、キー値のペアとして提供されるオブジェクトの名前付きプレースホルダーとして使用される識別子の直後です。この構文は、:
identifierで、この場合identifierは英数字の組合せで、アルファベット文字で開始します。名前付きのバインド変数は、フィルタの構成でQueryHelper
クラスによって使用されます。例:
HashMap env = new HashMap(); env.put("iNum",new Integer(42)); QueryHelper.createFilter("number = :iNum" , env};
QueryHelper
クラスとフィルタのプログラム的な構成の詳細は、「Javaプログラムにおけるフィルタの作成」を参照してください。
多くのユーザーがオブジェクトをkey
プロパティで格納するため、CohQLでは、key()
擬似関数が用意されています。key()
はキャッシュのキーを表しています。問合せ構文でもvalue()
擬似関数が用意されています。value()
は、key()
で開始されない連鎖内では暗黙的です。key()
擬似関数とvalue()
擬似関数は、通常、WHERE
句で使用され、この句ではキーやキャッシュ・エントリの値がテストされます。key()
とvalue()
の使用例は、「KeyおよびValue擬似関数の例」および「コマンドラインの例」を参照してください。
意味的には必要はありませんが、CohQLはコード・アーティファクトをできるだけJPQLへ移植できるようにするために別名をサポートしています。CohQLは、キャッシュ名と、SELECT
コマンド、UPDATE
コマンド、DELETE
コマンドのドット付きパス式の先頭に続く別名をサポートします。CohQLでは、キャッシュの別名をvalue()
擬似関数の代用およびkey()
擬似関数に対する引数として使用することも可能です。
通常、リテラル引数(cache-name
またはservice-name
など)を引用符で囲む必要はありません。引数に演算子(-
、+
、.
、<
、>
、=
など)や空白が含まれる場合にのみ、引用符(一重または二重)が必要となります。
ファイル名も引用符で囲む必要があります。ファイル名には、通常、パス・セパレータ(/
または\
)およびドットが含まれ、名前が拡張子から区切られます。
コンパイラがunquotedリテラル引数、または問題のある文字が含まれるファイル名を発生する場合には、コンパイラはエラーをスローします。
次の項では、SELECT
文およびWHERE
句について説明します。これらのエンティティは、ほとんどのキャッシュ問合せの基本的な構成要素です。
SELECT
文は、問合せの基本的な構成要素で、キャッシュからデータを取得します。句は、単純なまたは複雑なパス表現、主要な式、変形関数、複数の式、集計関数などのいくつかの形式を取ることができます。SELECT
文は、別名の使用もサポートします。
SELECT
文の形式は、次のとおりです。
SELECT (properties* aggregators* | * | alias) FROM "cache-name" [[AS] alias] [WHERE conditional-expression] [GROUP [BY] properties+]
アスタリスク(*
)文字は、サブパスのかわりに完全なオブジェクトを表します。cache-name
を持つパスを接頭辞として指定する必要はありません。SELECT
文のFROM
部分は、問合せによりその結果が引き出されるドメインを形成するキャッシュをターゲットとします。cache-name
は、既存のキャッシュの名前です。
その他の例は、「フィルタを強調表示する単純なSELECT * FROM文」を参照してください。
次に例を示します。
キャッシュのdept
から項目を選択します。
select * from "dept"
WHERE
句を使用して、結果セットから返されるエントリをフィルタリングします。CohQLの主要機能の1つは、パス式を使用して、式の評価の際にオブジェクト構造を移動できることです。条件式では、論理演算子、比較式、フィールドのプリミティブおよび関数演算子などを使用できます。
WHERE
句のリテラル構文では、一重引用符を使用して、文字列のリテラルを囲むことができます。その引用符の前に別の一重引用符を接頭辞にして、文字列内でエスケープできます。数式は、Javaプログラミング言語の表記規則に従って定義されます。ブール値は、リテラルのTRUE
とFALSE
で表されます。日付リテラルはサポートされていません。
注意: CohQLには、型情報に対するアクセス権が付与されていません。ゲッターがリテラルのタイプとは異なる数値型を返した場合、比較の演算子の |
WHERE
句内の演算子の優先度は、次のとおりです。
パス演算子(.
)
単項の+
および-
乗算(*
)および除算(/
)
足し算(+
)および引き算(-
)
比較演算子: =
、>
、>=
、<
、<=
、<>
、[NOT
] BETWEEN
、[NOT
] LIKE
、[NOT
] IN
、IS
[NOT
] NULL
、CONTAINS
[ALL
|ANY
]
論理演算子(AND
、OR
、NOT
)
WHERE
句は、言語レベルで算術のみをサポートします。
BETWEEN
演算子を条件式で使用して、式の結果が値の包括範囲内に含まれるかどうかを判断できます。数値の式、または文字列の式は、この方法で評価できます。形式は、BETWEEN
lower
AND
upper
となります。
LIKE
演算子は、_
および%
のワイルドカードを使用できます。ワイルドカード_
は正確に1文字と一致させるために使用され、ワイルドカード%
は任意の文字のゼロ回以上の出現と一致させるために使用されます。ワイルドカードをエスケープするには、escape
キーワードを使用して定義されたエスケープ文字をワイルドカードの前に置きます。次の例では、k%1
という名前のキーを選択するために、\
エスケープ文字を使用してワイルドカード%
をエスケープします。
SELECT key(),value() FROM mycache WHERE key() LIKE "k\%1" escape "\"
さらに、任意の文字をエスケープ文字として定義できます。例:
SELECT key(),value() FROM mycache WHERE key() LIKE "k#%1" escape "#"
IN
演算子では、単一の値のパス式がコレクションのメンバーかどうかを確認できます。このコレクションは、インラインリストとして定義されているか、バインド変数として表されています。インラインリストの構文は、次のとおりです。
"("
literal
*
")
"
CONTAINS [ALL|ANY]
は、Coherenceデータ・モデルで通常非正規化データが使用されるため、非常に便利な演算子です。CONTAINS
演算子では、多値のパス式に指定した値が含まれているどうかを判断できます。例:
e.citys CONTAINS "Boston"
CONTAINS
のALL
およびANY
形式は、IN
演算子と同じ構文を持つインラインリストまたはバインド変数となります。
注意: Coherenceで用意されているプログラムのAPIを使用すると、 |
その他の例は、「フィルタを強調表示する単純なSELECT * FROM文」を参照してください。
次に例を示します。
キャッシュdept
内のすべての項目を選択します。ここでは、deptno
キーの値が10になります。
select * from "dept" where deptno = 10
次の項では、キャッシュの作成と削除の方法を説明します。また、キャッシュの内容のバックアップとリストアの方法も説明します。
問合せを送信する前に、それぞれCREATE
CACHE
またはENSURE
CACHE
文を使用して、既存のキャッシュに接続するか、新規キャッシュを作成します。この文は、まず指定されたcache-name
でキャッシュへの接続を試行します。キャッシュがクラスタ内に見つからない場合は、現在のキャッシュ構成ファイルに基づいて指定された名前でキャッシュの作成が試行されます。この文は、コマンドラインで特に有用です。この文をプログラムで使用している場合、名前の変わりにサービスとクラスローダーの情報を指定するオプションがあります(クラスローダーにはコマンドラインからはアクセスできません)。
注意: 文では、キャッシュ名とサービス名を引用符(二重引用符( |
構文は次のとおりです。
[ CREATE | ENSURE ] CACHE "cache-name
" [ SERVICE"service-name"
]
次に例を示します。
dept
という名前のキャッシュを作成します。
create cache "dept"
BACKUP
CACHE
文を使用して、指定されたキャッシュのシリアライズ表現を、指定されたfilename
で表示されたファイルに書き込みます。filename
は、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。BACKUP
CACHE
文は、コマンドライン・ツールでのみ使用できます。構文は次のとおりです。
BACKUP CACHE "cache-name
" [ TO ] [ FILE ] "filename
"
注意: バックアップ(および後続のリストア)機能は、開発およびテスト環境で使用されるように設計されており、データの整合性を確認するプロビジョニングがないため、本番のデータ・セットでは使用しないでください。この機能は、本番のバックアップ、スナップショット、またはチェックポイント・ユーティリティとしてサポートされていません。 特に:
|
次に例を示します。
dept
キャッシュのシリアライズ表現をtextfile
ファイルに書き込みます。
backup cache "dept" to file "textfile"
RESTORE
CACHE
文を使用して、指定されたキャッシュのシリアライズ表現を、指定されたfilename
で表示されたファイルから読み取ります。filename
は、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。RESTORE
CACHE
文は、コマンドライン・ツールでのみ使用できます。構文は次のとおりです。
RESTORE CACHE"cache-name
" [ FROM ] [ FILE ] "filename
"
注意: Coherenceのバージョン3.xから12.1.xまでは、バックアップをリストアできません。 |
次に例を示します。
dept
キャッシュをtextfile
ファイルからリストアします。
restore cache "dept" from file "textfile"
DROP
CACHE
文を使用して、指定したキャッシュをクラスタから完全に削除します。キャッシュは、Java destroy()
メソッドへのコールによって削除されます。いずれかのクラスタ・メンバーが、削除されたキャッシュへの参照を保持してそれになんらかの操作の実行を試行すると、そのメンバーはIllegalStateException
を受け取ります。Coherence問合せのDROP
CACHE
文の構文は、次のとおりです。
DROP CACHE "cache-name
"
次に例を示します。
orders
キャッシュをクラスタから削除します。
drop cache "orders"
次の項では、キャッシュ・データの挿入および削除、結果セットのフィルタリングなど、キャッシュ内のデータの操作方法を説明します。
集計の問合せは、SELECT
問合せの変動要素です。結果をグループ化して集計関数を適用し、結果に関するサマリー情報を取得する場合には、集計の問合せを使用します。問合せに集計関数を使用しているか、GROUP
BY
句が含まれる場合には、問合せは集計の問合せと見なされます。集計の問合せの最も一般的な形式では、1つ以上のグループ化の式の後にGROUP
BY
句内の同じリード・グループ化の式と組み合せられたSELECT
句の集計関数が続く形式が使用されます。
CohQLがサポートする集計関数は、COUNT
、AVG
、MIN
、MAX
、およびSUM
です。これらの関数は、Double
、Long
およびBigDecimal
型に対して使用できます。型を指定するには、型の後にアンダースコア(_)を付けた接頭辞を関数に含めます。例:
long_sum, bd_sum
明示的に型が指定されていない場合は、Double
型であると見なされます。
その他の例は、「予測、集計、グループ化を扱う複雑な問合せ」を参照してください。
次に例を示します。
supplier
でグループ化されたorders
キャッシュからの項目に対して、合計amount
および平均price
を選択します。
select supplier,sum(amount),avg(price) from "orders" group by supplier
supplier
でグループ化されたorders
キャッシュからの項目に対して、(BigDecimal
型を使用して)合計amount
および平均price
を選択します。
select supplier,bd_sum(amount),bd_avg(price) from "orders" group by supplier
UPDATE
文を使用して、キャッシュ内の既存の値を変更します。構文は次のとおりです。
UPDATE "cache-name" [[AS] alias] SET update-statement {, update-statement}* [ WHERE conditional-expression ]
各update-statement
は、パス式、割当て演算子(=)および式で構成されています。割当て文に対する式の選択は制限されています。割当ての右側は、リテラル、バインド変数、静的メソッド、またはリテラルかバインド変数のみでの新規Javaコンストラクタに決定する必要があります。UPDATE
文は、別名の使用もサポートします。
追加の例は、「UPDATEの例」を参照してください。
次に例を示します。
employees
キャッシュでグレード7以上のランクの従業員の場合、給与を1000に、休暇時間を200に更新します。
update "employees" set salary = 1000, vacation = 200 where grade > 7
INSERT
文を使用して、指定されたKEY
の下に指定されたVALUE
を格納します。KEY
句が提供されていない場合には、新しく作成したオブジェクトに対してメッセージgetKey()
が送信されます(可能な場合)。そうでない場合、value
オブジェクトがキーとして使用されます。
INSERT
文はObjects
のMaps
上で機能する点に注意してください。構文は次のとおりです。
INSERT INTO "cache-name" [ KEY (literal | new java-constructor | static method) ] VALUE (literal | new java-constructor | static method)
次に例を示します。
キーwriter
を値David
とともにemployee
キャッシュに挿入します。
insert into "employee" key "writer" value "David"
DELETE
文を使用して、キャッシュ内の指定されたエントリを削除します。構文は次のとおりです。
DELETE FROM "cache-name" [[AS] alias] [WHERE conditional-expression]
DELETE
文のWHERE
句は、SELECT
文の場合と同様に機能します。すべてのconditional-expressions
は、削除するエンティティのセットをフィルタする際に使用できます。DELETE
文は、別名の使用もサポートします。
注意事項:
|
次に例を示します。
bar.writer
キーがDavid
でないemployee
キャッシュからエントリを削除します。
delete from "employee" where bar.writer IS NOT "David"
次の項では、キャッシュ・データの索引の作成と削除の方法を説明します。索引により、Coherenceの組込みオプティマイザがさらに迅速かつ効率的に問合せを分析して、結果を返すことができるようになります。
CREATE
INDEX
またはENSURE
INDEX
を使用して、特定されたキャッシュに索引を作成します。構文は次のとおりです。
[ CREATE | ENSURE ] INDEX [ON]"cache-name
" (value-extractor-list
)
value-extractor-list
は、パス式を使用してValueExtractors
を作成する、カンマ区切りのリストです。複数の要素が存在する場合、MultiExtractor
が使用されます。KeyExtractor
を作成するには、key()
擬似関数を使用してパス式を開始します。
索引の自然な順序が適用されます。
次に例を示します。
orders
キャッシュ内の属性lastname
で索引を作成します。
create index "orders" lastname
次の項では、複数の問合せ文を効率的にキャッシュへ発行する方法を説明します。
SOURCE
文では、文の「バッチ」処理が可能です。SOURCE
文は、指定されたfilename
で表示されたファイルから1つ以上の問合せ文を開いて読み取ります。filename
は、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。ファイル内の各問合せ文は、セミコロン(;
)で区切る必要があります。ソーシングはコマンドライン・ツールでのみ使用でき、コマンドの順序で構成されるファイルをロードできます。ソース・ファイルは、そのソースが他のファイルの場合もあります。構文は次のとおりです。
SOURCE FROM [ FILE ] "filename
"
SOURCE
は、@"
filename
"のように"at"記号(@
)を使用して短縮できます。"ピリオド"記号の'.'は、コマンドラインでのみ、'@'の省略として使用できますが、ファイル名を引用符で囲むことはできません。
次に例を示します。
command_file
ファイルの文を処理します。
source from file "command_file"
または
@ "command_file"
または
. command_file
問合せのコストと効果を判断するために使用される問合せレコードを作成および出力するには、EXPLAIN PLAN FOR
およびTRACE
コマンドを使用します。問合せの実行レコードは、問合せ操作の一部としてフィルタの評価の見積もりコストを提供します。問合せのトレース・レコードは、問合せ操作の一部としてフィルタの評価の実コストを提供します。いずれの問合せレコードでも、フィルタで索引を使用できるかどうかが考慮されます。問合せの実行レコードおよびトレース・レコードで提供されるデータに関する詳細は、「問合せレコードの解析」を参照してください。コマンドの構文は、次のとおりです。
問合せの実行計画:
EXPLAIN PLAN FOR select statement | update statement | delete statement
トレース:
TRACE select statement | update statement | delete statement
次に例を示します。
EXPLAIN PLAN FOR select * from "mycache" where age=19 and firstName=Bob
または
TRACE SELECT * from "MyCache" WHERE age=19
CohQLコマンドライン・ツールには、文をコマンドラインから発行するキャッシュと相互作用する、非プログラム的方法が用意されています。このツールは、com.tangosol.coherence.dslquery.QueryPlus
クラスを使用して操作できます。また便宜上、COHERENCE_HOME
/bin/
に配置された起動スクリプトを使用してこのツールを操作できます。このスクリプトは、Windows (query.cmd
)でもUNIX (query.sh
)でも使用できます。
スクリプトは、コンソール・モードでクラスタ・ノードを起動します。記憶域はノード上では有効化されていません。これは、本番環境での推奨設定で、ノードが記憶域有効化キャッシュ・サーバーを持つクラスタに参加することが前提となっています。ただし、記憶域有効化ノードをテスト用に作成するには、スクリプト内のstorage_enabled
設定をtrue
に変更します。
注意: 構成の際には、起動スクリプトではデフォルトのオペレーション構成ファイル( |
スクリプトは、COHERENCE_HOME
環境変数を設定するためのオプションを提供します。COHERENCE_HOME
がコンピュータで未設定の場合、スクリプト内のその環境変数をCoherenceのインストール場所に設定します。
CohQLは、コマンド履歴内で上矢印または下矢印を動かすなど、コマンドライン編集の拡張機能にJLineを使用します。ただし、JLineはCohQLの使用には必要ありません。スクリプトは、COHERENCE_HOME
/lib/
ディレクトリ内に格納されているjline.jar
ライブラリを自動的に使用します。スクリプトのJLINE_HOME
変数およびクラスパスを変更することで、別の場所を指定できます。JLineライブラリが見つからない場合、メッセージが表示され、CohQLはJLine機能なしで開始されます。
次の手順は、起動スクリプトを使用してCohQLコマンドライン・ツールの起動方法を示しています。この手順は、スクリプトのstorage_enabled
がfalse
に設定されていること(デフォルト)を前提としています。
キャッシュ・サーバー・クラスタ・ノードを起動するか、既存のキャッシュ・サーバー・クラスタが起動していることを確認します。
キャッシュ・サーバー・クラスタ・ノードを起動するには、コマンド・プロンプトまたはシェルを開き、/bin
ディレクトリにあるキャッシュ・サーバー起動スクリプトを実行します(Windowsプラットフォームではcache-server.cmd
、UNIXプラットフォームではcache-server.sh
)。キャッシュ・サーバーが起動し、このクラスタ・メンバーに関する情報が出力されます。
コマンド・プロンプトまたはシェルを開き、/bin
ディレクトリにあるCohQLコマンドライン起動スクリプトを実行します(Windowsプラットフォームではquery.cmd
、UNIXプラットフォームではquery.sh
)。Java環境に関する情報が表示されます。コマンドライン・ツール・プロンプト(CohQL>
)が返されます。
注意: 既存のキャッシュ・サーバー・ノードを結合する場合、起動スクリプトを変更して、同じキャッシュ構成を含む既存のキャッシュ・サーバー・ノードと同じクラスタ設定を使用します。 |
コマンドラインのヘルプを全部表示するには、プロンプトでhelp
と入力します。詳細な説明のないヘルプのリストを表示するには、commands
と入力します。
コマンドライン・ツールを用いる一連の問合せ文については、「コマンドラインの例」を参照してください。
CohQLコマンドライン・ツールには、CohQL>
プロンプトが返す前に読み取られ、実行される一連の引数が組み込まれています。これは、スクリプトを大型のスクリプトの一部として使用する際に(ビルド・プロセスの一部としての使用、I/Oをパイピングするための使用など)有用です。CohQL>
プロンプトでhelp
と入力し、コマンドライン・ツール内の引数のヘルプを表示します。
表28-2 Coherenceの問合せ言語コマンドライン・ツールの引数
引数 | 説明 |
---|---|
|
トレース・モードを有効にして、デバッグ情報を出力します。 |
|
コマンドライン引数の処理の後、コマンドライン・ツールを終了します。この引数は、標準の入力からリダイレクトする際には使用しないでください。使用すると、コマンドラインの引数が処理を終了すると同時にツールが終了して、リダイレクトされた入力が読み取られません。 |
|
コマンドライン・ツールをサイレント・モードで操作して、無関係な用語を削除します。これにより、標準の入力( |
|
コマンドライン・ツールを拡張言語モードで操作します。このモードにより、更新でオブジェクト・リテラルが許可され、コマンドを挿入できるようになります。使用法の詳細は、コマンドラインのヘルプを参照してください。 |
|
指定した文を実行します。文は一重または二重の引用符で囲む必要があります。任意の数の |
|
指定したファイルの文を処理します。ファイル内の文は、セミコロン(;)で区切る必要があります。ファイルは、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。任意の数の |
例
contact
キャッシュ内のすべてのエントリを返し、そのエントリを標準出力に出力してコマンドライン・ツールを終了します。
query.sh -c -l "select * from contact"
dist-example
キャッシュ内のすべてのエントリを返し、そのエントリ(余分な用語を削除)をmyOutput
という名前のファイルに出力してコマンドライン・ツールを終了します。
query.cmd -s -c -l "select * from 'dist-example'" >myOutput
myStatements
という名前のファイルのすべてのセグメントを処理して、コマンドライン・ツールを終了します。
query.sh -c -f myStatements
myInput
ファイルからコマンドを読み取り、出力(余分な用語を削除)をmyOutput
という名前のファイルに出力します。
query.sh -s <myInput >myOutput
次に、Windowsでのコマンドライン・ツールの使用方法の例を示します。この例では、単一クラスタ・メンバーを想定しているため、起動スクリプト内のstorage_enabled
設定はtrue
に設定されています。この例はキャッシュの作成と削除、エントリの格納と取得、バックアップ・ファイルからのキャッシュのリストアを示します。また、key()
およびvalue()
という擬似関数の使用を強調します。
コマンド・プロンプトでquery.cmd
スクリプトを起動する際に、Java環境、Coherenceのバージョンおよびエディション、Coherenceキャッシュ・サーバーに関する情報が表示されます。プロンプト(CohQL>
)に問合せ文を入力します。
次のようにしてCohQLコマンドライン・ツールを起動します。
C:/coherence/bin/query.cmd
employees
という名前のキャッシュを作成します。
CohQL> create cache "employees"
エントリ(キーと値のペア)をキャッシュに挿入します。
CohQL> insert into "employees" key "David" value "ID-5070"
キャッシュにオブジェクトを挿入します。
CohQL> insert into "employees" value new com.my.Employee("John", "Doe", "address", 34)
キーの値を変更します。
CohQL> update employees set value() = "ID-5080" where key() like "David"
キャッシュ内の値を取得します。
CohQL> select * from "employees"
存在しないキーの値を取得します。空の結果セットが返されます。
CohQL> select key(), value() from "employees" where key() is "Richard"
キャッシュ内の既存のキーを削除します。空の結果セットが返されます。
CohQL> delete from employees where key() = "David"
employeesキャッシュの内容を削除します。空の結果セットが返されます。
CohQL> delete from "employees"
employeesキャッシュを破棄します。
CohQL> drop cache "employees"
employeesキャッシュを再作成します。
CohQL> create cache "employees"
さらに多くのエントリをキャッシュに挿入します。
CohQL> insert into "employees" key "David" value "ID-5080" CohQL> insert into "employees" key "Julie" value "ID-5081" CohQL> insert into "employees" key "Julie" value "ID-5082" CohQL> insert into "employees" key "Mike" value "ID-5083"
employeesキャッシュ内のキーと値を取得します。
CohQL> select key(), value() from "employees"
キャッシュのシリアライズされた形式をファイルに保存します。
CohQL> backup cache "employees" to "emp.bkup"
キャッシュからキーを削除します。
CohQL> delete from "employees" where key() = "David"
キャッシュの内容を取得します。削除されたキーと値が存在していないことがわかります。
CohQL> select key(), value() from "employees"
キャッシュの内容を削除します。
CohQL> delete from "employees"
キャッシュの内容を取得します。空の結果セットが返されます。
CohQL> select * from "employees"
バックアップ・ファイルからキャッシュの内容をリストアします。
CohQL> restore cache "employees" from file "emp.bkup"
キャッシュの内容を取得します。すべてのエントリがリストアされ、返されたことを確認します。
CohQL> select key(), value() from "employees"
employeesキャッシュを破棄します。
CohQL> drop cache "employees"
コマンドライン・ツールを終了します。
CohQL> bye
FilterBuilder
APIは、Javaプログラム内から結果セットをフィルタリングする文字列指向の方法で、使用の際にはCoherence APIの詳細を覚える必要はありません。APIには、com.tangosol.util.QueryHelper
クラスに過負荷のcreateFilter
ファクトリ・メソッドのセットが4つ用意されています。
次のリストは、createFilter
メソッドの異なる形式について説明しています。渡された文字列は、Coherence問合せのWHERE
句の構文(「エントリの結果セットでのフィルタリング」を参照)を使用しますが、リテラルのWHERE
は使用しません。Object
配列またはMap
を指定する形式は、バインド変数で参照されるオブジェクトを渡すためのものです。各形式は用意されたCoherence問合せ文字列からフィルタを構築します。
public static Filter createFilter(String s)
: s
は、Filter
を表すCoherenceの問合せ内のString
です。
public static Filter createFilter(String s, Object[] aBindings)
: s
は、Filter
およびaBindings
がバインド変数に使用するObjects
の配列であることを表すCoherenceの問合せ内のString
です。
public static Filter createFilter(String s, Map bindings)
: s
は、Filter
およびbindings
がバインド変数に使用するObjects
のMap
であることを表すCoherenceの問合せ内のString
です。
public static Filter createFilter(String s, Object[] aBindings, Map bindings)
: s
は、Filter
, aBindings
がバインド変数に使用するObjects
の配列であり、bindings
がバインド変数に使用するObjects
のMap
であることを表すCoherenceの問合せ内のString
です。
これらのファクトリ・メソッドは、不具合、構文的に不正確な文、セマンティックなエラーがあると、FilterBuildingException
をスローします。この例外がRuntimeException
のサブクラスであるため、エラーの捕捉は必要ありませんが、エラーの捕捉をしないとプロセスが終了する可能性があります。
例
次の文では、メソッドのcreateFilter(String s)
の形式を使用します。これはマサチューセッツ州に住み、別の州で働く従業員のフィルタを構築します。
.. QueryHelper.createFilter("homeAddress.state = 'MA' and workAddress.state != 'MA'") ...
この文は、Coherence APIを使用する次のフィルタ/エクストラクタと同じです。
AndFilter(EqualsFilter(ChainedExtractor(#getHomeAddress[], #getState[]), MA), NotEqualsFilter(ChainedExtractor(#getWorkAddress[], #getState[]), MA)))
QueryHelper
クラスもcreateExtractor
メソッドを提供し、それによりフィルタ構築時に値エクストラクタを作成できます。エクストラクタは、オブジェクトからの値の抽出(並べ替えやフィルタリングなど)とその抽出の識別の両方に使用されます。次の例は、索引作成時のcreateExtractor
の使用を示しています。
cache.addIndex(QueryHelper.createExtractor("key().lastName"),/*fOrdered*/ true, /*comparator*/ null);
この項では、その他の例を使用して、インスタンス化されたオブジェクト(Filters
、ValueExtractors
、Aggregators
など)によるそれらと同等のCoherence APIコールを示します。Filters
を強調する単純なselect
*
の例では、Filter
部分のみに注目した場合、FilterBuilder
APIの変換について理解できます。例の完全なセットを使用すると、QueryBuilder
APIとコマンドライン・ツールの変換について理解できます。
この例では、識別子を修飾するキャッシュ名が削除されたパス構文の短縮された形式が使用されています。
例のJava言語形式でも、EntryProcessors
のかわりにReducerAggregator
が予測に使用されています。KeyExtractor
の使用についても、Coherence 3.5ではReflectionExtractor
に対する特定の変更を必要としなくなったことにも注意してください。
40
がprice
キーの値より大きい、キャッシュorders
から項目を選択します。
select * from "orders" where 40 > price
price
キーが100にまったく等しく、insurance
キーの値が10より小さいか、shipping
キーの値が20以上である、キャッシュorders
から項目を選択します。
select * from "orders" where price is 100 and insurance < 10 or shipping >= 20
price
キーが100にまったく等しく、insurance
キーの値が10より小さいか、またはshipping
キーの値が20以上のいずれかである、キャッシュorders
から項目を選択します。
select * from "orders" where price is 100 and (insurance < 10 or shipping >= 20)
price
キーの値が100
に等しいか、bar
キーが20
に等しい、キャッシュorders
から項目を選択します。
select * from "orders" where price = 100 or shipping = 20
insurance
キーの値がnullでない、キャッシュorders
から項目を選択します。
select * from "orders" where insurance is not null
emp_id
キーが1から1000の値を持つか、bar.emp
キーが"Smith
"でない、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id between 1 and 1000 or bar.emp is not "Smith"
item
キーが値"coat
"に類似しているキャッシュorders
から項目を選択します。
select * from "orders" where item like "coat%"
emp_id
の値が5、10、15、または20のセット内にある、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id in (5,10,15,20)
emp_id
がリスト5
、10
、15
、および20
を含む、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id contains (5,10,15,20)
emp_id
が5
、10
、15
、および20
のすべての項目を含む、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id contains all (5,10,15,20)
emp_id
が5
、10
、15
、および20
のいずれかの項目を含む、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id contains any (5,10,15,20)
foo
キーの値が10より小さく、セット10、20で発生する、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id < 10 in (10,20)
キャッシュContactInfoCache
で従業員の家庭のstate
とage
を選択し、state
およびage
でグループ化します。
select homeAddress.state, age, count() from "ContactInfoCache" group by homeAddress.state, age
orders
キャッシュから擬似frobit
キーを選択します。空の結果セットが返されます。
select frobit,supplier,sum(amount),avg(price) from "orders" group by supplier
$1000より大きいorders
キャッシュ内の項目の場合、その項目、その価格と色を選択します。
select item_name,price,color from "orders" where price > 1000
orders
キャッシュから、項目に対する合計amount
を選択します。Double
型であると見なされます。
select sum(amount) from "orders"
orders
キャッシュから、項目に対する合計amount
をLong
型として選択します。
select long_sum(amount) from "orders"
orders
キャッシュから、項目に対する合計amount
をBigDecimal
型として選択します。
select bd_sum(amount) from "orders"
color
属性がred
またはgreen
である、orders
キャッシュから、項目に対する合計amount
を選択します。
select sum(amount) from "orders" where color is "red" or color is "green"
orders
キャッシュからの項目に対して、合計amount
および平均price
を選択します。
select sum(amount),avg(price) from "orders"
employees
キャッシュの可能な重複行からlast
name
とcity
のコピーを選択します。ここでは、state
はカリフォルニアです。
select distinct lastName,city from "employees" where state = "CA"
employees
キャッシュでランクがグレード7以上の従業員の場合、給与を10%ごと増加して、休暇を50時間追加します。
update "employees" set salary = salary*1.10, vacation = vacation + 50 where grade > 7
この項では、key()
およびvalue()
という擬似関数の使用方法の例を示します。その他の例は、「コマンドラインの例」を参照してください。
ContactInfoCache
から、自宅の住所がマサチューセッツで勤務先は別の州である従業員を選択します。
select key().firstName, key().lastName from "ContactInfoCache" where homeAddress.state is 'MA' and workAddress.state != "MA"
ContactInfoCache
キャッシュから、年齢が42より高い従業員を選択します。
select key().firstName, key().lastName, age from "ContactInfoCache" where age > 42