ノート:
CohQL構文はSQLによく似ているように見えますが、この構文はSQLではなく、実際には文脈的にJava Persistence問合せ言語(JPQL)の標準の方に関連している点に注意してください。
連続問合せ言語(CQL: Continuous Query Language)は、複合イベント処理(CEP: Complex Event Processing)に関連した問合せ言語です。CohQLと混同しないようにしてください。
この章の内容は次のとおりです。
FilterBuilder
APIは、Javaプログラム内から結果セットをフィルタリングする文字列指向の方法で、使用の際にはCoherence APIの詳細を覚える必要はありません。親トピック: データ・グリッド操作の実行
ノート:
CohQLでは、副問合せはサポートされません。
この項には次のトピックが含まれます:
親トピック: Coherenceの問合せ言語の使用
表28-1で、Coherence問合せ文、句、式をアルファベット順に示します。
表28-1 Coherenceの問合せ言語の文
この文、句、または式 | 参照先の項 |
---|---|
ARCHIVE SNAPSHOT |
|
バインド変数 |
|
CREATE CACHE |
|
CREATE INDEX |
|
CREATE SNAPSHOT |
|
DELETE |
|
DROP CACHE |
|
DROP INDEX |
|
ENSURE CACHE |
|
ENSURE INDEX |
|
GROUP BY |
|
INSERT |
|
key()擬似関数 |
|
LIST [ARCHIVED] SNAPSHOTS |
|
LIST ARCHIVER |
|
パス式 |
|
RECOVER SNAPSHOT |
|
REMOVE [ARCHIVED] SNAPSHOT |
|
RESUME SERVICE |
|
RETRIEVE ARCHIVED SNAPSHOT |
|
SELECT |
|
SOURCE |
|
SUSPEND SERVICE |
|
UPDATE |
|
VALIDATE ARCHIVED SNAPSHOT |
|
VALIDATE SNAPSHOT |
|
value()擬似関数 |
|
WHENEVER COHQLERROR THEN [EXIT|CONTINUE] |
|
WHERE |
親トピック: Coherenceの問合せ言語構文について
この項では、構文の一部の構成要素(パス式、バインド変数、擬似関数など)について説明します。
この項には次のトピックが含まれます:
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};
Javaプログラムにおけるフィルタの作成を参照してください。
親トピック: 問合せ構文の基本
多くのユーザーがオブジェクトをkey
プロパティで格納するため、CohQLでは、key()
擬似関数が用意されています。key()
はキャッシュのキーを表しています。問合せ構文でもvalue()
擬似関数が用意されています。value()
は、key()
で開始されない連鎖内では暗黙的です。key()
擬似関数とvalue()
擬似関数は、通常、WHERE
句で使用され、この句ではキーやキャッシュ・エントリの値がテストされます。KeyおよびValue擬似関数の例およびコマンド行の例を参照してください。
親トピック: 問合せ構文の基本
意味的には必要はありませんが、CohQLはコード・アーティファクトをできるだけJPQLへ移植できるようにするために別名をサポートしています。CohQLは、キャッシュ名と、SELECT
コマンド、UPDATE
コマンド、DELETE
コマンドのドット付きパス式の先頭に続く別名をサポートします。CohQLでは、キャッシュの別名をvalue()
擬似関数の代用およびkey()
擬似関数に対する引数として使用することも可能です。
親トピック: 問合せ構文の基本
通常、リテラル引数(cache-name
またはservice-name
など)を引用符で囲む必要はありません。引数に演算子(-
、+
、.
、<
、>
、=
など)や空白が含まれる場合にのみ、引用符(一重または二重)が必要となります。
ファイル名も引用符で囲む必要があります。ファイル名には、通常、パス・セパレータ(/
または\
)およびドットが含まれ、名前が拡張子から区切られます。
コンパイラがunquotedリテラル引数、または問題のある文字が含まれるファイル名を発生する場合には、コンパイラはエラーをスローします。
親トピック: 問合せ構文の基本
この項では、キャッシュの作成と削除の方法について説明します。
この項には次のトピックが含まれます:
新しいキャッシュを作成する場合はCREATE
CACHE
文を、既存のキャッシュに接続する場合はENSURE
CACHE
文をそれぞれ使用します。この文は、まず指定されたcache-name
でキャッシュへの接続を試行します。キャッシュがクラスタ内に見つからない場合は、現在のキャッシュ構成ファイルに基づいて、指定された名前でキャッシュの作成が試行されます。この文は、コマンド行で特に有用です。この文をプログラムで使用している場合、名前のかわりにサービスとクラスローダーの情報を指定するオプションがあります(クラスローダーにはコマンド行からはアクセスできません)。
ノート:
文では、キャッシュ名とサービス名を引用符(二重引用符("
"
)または一重引用符('
'
))で囲む必要があります。
構文は次のとおりです。
[ CREATE | ENSURE ] CACHE "cache-name
" [ SERVICE"service-name"
]
次に例を示します。
dept
という名前のキャッシュを作成します。
create cache "dept"
親トピック: キャッシュのライフサイクルの管理
DROP
CACHE
文を使用して、指定したキャッシュをクラスタから完全に削除します。キャッシュは、Java destroy()
メソッドへのコールによって削除されます。いずれかのクラスタ・メンバーが、削除されたキャッシュへの参照を保持してそれになんらかの操作の実行を試行すると、そのメンバーはIllegalStateException
を受け取ります。Coherence問合せのDROP
CACHE
文の構文は、次のとおりです。
DROP CACHE "cache-name
"
次に例を示します。
orders
キャッシュをクラスタから削除します。
drop cache "orders"
親トピック: キャッシュのライフサイクルの管理
ノート:
BACKUP CACHE
文は非推奨になりました。かわりに、永続性文を使用します。ディスクへのキャッシュ・データの永続化を参照してください。
BACKUP
CACHE
文を使用して、指定されたキャッシュのシリアライズ表現を、指定されたfilename
で表示されたファイルに書き込みます。filename
は、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。BACKUP
CACHE
文は、コマンド行ツールでのみ使用できます。構文は次のとおりです。
BACKUP CACHE "cache-name
" [ TO ] [ FILE ] "filename
"
ノート:
バックアップ(および後続のリストア)機能は、開発およびテスト環境で使用されるように設計されており、データの整合性を確認するプロビジョニングがないため、本番のデータ・セットでは使用しないでください。この機能は、本番のバックアップ、スナップショット、またはチェックポイント・ユーティリティとしてサポートされていません。
具体的には、次のとおりです。
バックアップは、クラスタ内のシングル・ノードでのみ動作するため、低速です。
バックアップはアトミックではありません。つまり、バックアップ中に発生した要素への変更が反映されず、データの読取りで内容が保証されない結果になります。
エラーが発生して不完全なバックアップとなった場合、バックアップは停止します。そのような場合には、エラーを説明するIOException
がスローされます。
バックアップは、3.xから12.1.xまでの前方互換性および後方互換性はありません。
次に例を示します。
dept
キャッシュのシリアライズ表現をtextfile
ファイルに書き込みます。
backup cache "dept" to file "textfile"
親トピック: キャッシュのライフサイクルの管理
ノート:
RESTORE CACHE
文は非推奨になりました。かわりに、永続性文を使用します。ディスクへのキャッシュ・データの永続化を参照してください。
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"
親トピック: キャッシュのライフサイクルの管理
この項では、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には、型情報に対するアクセス権が付与されていません。ゲッターがリテラルのタイプとは異なる数値型を返した場合、比較の演算子のtrue
を想定した部分にfalse
を取得することがあります。これを回避するには、リテラルの型で、long
にはl
を、double
にはd
を、またshort
にはs
を指定します。デフォルト値は、ピリオド(.
)なしのリテラルに対してはInteger
で、ピリオド(.
)付きのリテラルに対してはFloat
です。
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を使用すると、WHERE
句の条件式構文に基づいたスタンドアロンのCoherenceフィルタを作成できます。Javaプログラムにおけるフィルタの作成を参照してください。
フィルタを強調表示する単純なSELECT * FROM文も参照してください。
次に例を示します。
キャッシュdept
内のすべての項目を選択します。ここでは、deptno
キーの値が10になります。
select * from "dept" where deptno = 10
親トピック: データの取得
この項では、キャッシュ・データの挿入および削除、結果セットのフィルタリングなど、キャッシュ内のデータの操作方法を説明します。
この項には次のトピックが含まれます:
集計の問合せは、SELECT
問合せの変動要素です。結果をグループ化して集計関数を適用し、結果に関するサマリー情報を取得する場合には、集計の問合せを使用します。問合せに集計関数を使用しているか、GROUP
BY
句が含まれる場合には、問合せは集計の問合せと見なされます。集計の問合せの最も一般的な形式では、1つ以上のグループ化の式の後にGROUP
BY
句内の同じリード・グループ化の式と組み合せられたSELECT
句の集計関数が続く形式が使用されます。
CohQLがサポートする集計関数は、COUNT
、AVG
、MIN
、MAX
、およびSUM
です。これらの関数は、エントリ・セット内の値の数を計算するもので型を必要としないCOUNT
関数を除いて、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
文は、別名の使用もサポートします。
ノート:
WHERE
句が存在しない場合には、指定したキャッシュ内のすべてのエントリが削除されます。
次に例を示します。
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
親トピック: 索引の処理
DROP
INDEX
文は、指定されたValueExtractor
に基づいて索引を削除します。この文は、コマンド行ツールでのみ使用できます。構文は次のとおりです。
DROP INDEX [ON]"cache-name"
(value-extractor-list
)
次に例を示します。
orders
キャッシュ内の属性lastname
の索引を削除します。
drop 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
親トピック: Coherenceの問合せ言語構文について
この項の文は、キャッシュのバックアップとリストアに使用されます。永続性文は、サービスに構成されている永続性設定に依存します。Oracle Coherenceの管理の永続キャッシュを参照してください。
この項には次のトピックが含まれます:
親トピック: Coherenceの問合せ言語構文について
CREATE SNAPSHOT
文は、サービスのデータ・パーティションをディスクに永続化します。構文は次のとおりです。
CREATE SNAPSHOT "snapshot-name" "service"
snapshot-name
引数は、任意のユーザー定義名で、%y
(年)、%m
(月)、%d
(日)、%hh
(時間)、%mm
(分)、%w
(週日)、%M
(月名)のマクロを含めることができます。service
引数は、スナップショットが作成されるパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。
次に例を示します。
Backup
という名前のスナップショットをOrdersCacheService
という名前のパーティション・キャッシュ・サービスに作成します。
create snapshot "Backup" "OrdersCacheService"
LIST SERVICES
文を使用して、各サービスのアクティブなすべてのサービス、現在構成されている永続性モード、クォーラムおよびステータスを確認します。永続性環境構成の詳細を確認するには、ENVIRONMENT
オプションを含めます。たとえば:
list services environment
親トピック: ディスクへのキャッシュ・データの永続化
VALIDATE SNAPSHOT
文は、スナップショットが完了し、エラーがないかどうかをチェックする場合に使用されます。構文は次のとおりです。
VALIDATE SNAPSHOT ["snapshot-directory" | "snapshot-name" "service-name"] [VERBOSE]
snapshot-directory
引数は、スナップショットのフルパスで、スナップショット名を含める必要があります。snapshot-name
引数は、検証されるアーカイブ済のスナップショットの名前です。service-name
引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。snapshot-name
およびservice-name
引数が使用されている場合、場所が導出されます。デフォルトのスナップショットの場所はUSER_HOME
/coherence/snapshots
です。詳細な検証情報を確認するには、VERBOSE
オプションを使用します。VERBOSE
オプションを指定する場合、スナップショットの各パーティションが開いて読み取られ、エントリの数と実際のサイズを含む、永続化されたキャッシュのサマリーが表示されます。索引、トリガー、ロックおよびリスナーの数の情報も表示されます。
次に例を示します。
Backup
という名前のスナップショットを検証します。
validate snapshot "c:\coherence\snapshots\MyCluster\OrdersCacheService\Backup"
verbose
OrdersCacheService
サービスによって管理される、Backup
という名前のスナップショットを検証します。
validate snapshot "Backup" "OrdersCacheService" verbose
親トピック: ディスクへのキャッシュ・データの永続化
RECOVER SNAPSHOT
文は、サービスのデータ・パーティションをディスクからリストアします。サービスのキャッシュ内の既存データが失われます。
注意:
スナップショットをリカバリすると、サービス内のキャッシュの現在の内容が削除されます。
構文は次のとおりです。
RECOVER SNAPSHOT "snapshot-name" "service"
snapshot-name
引数は、リカバリするスナップショットの名前です。service
引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。サービスが明示的に一時停止されていない場合、サービスは一時停止し、スナップショットがリカバリされてサービスが再開されます。永続性操作中のサービスの中断を参照してください。
次に例を示します。
OrdersCacheService
という名前のパーティション・キャッシュ・サービスでBackup
という名前のスナップショットをリカバリします。
recover snapshot "Backup" "OrdersCacheService"
LIST SNAPSHOTS
文を使用して、使用可能なスナップショットのリストを確認します。たとえば:
list snapshots "OrdersCacheService"
親トピック: ディスクへのキャッシュ・データの永続化
ARCHIVE SNAPSHOT
文は、スナップショットを中央の場所に保存します。場所は、サービスに関連付けられているスナップショット・アーカイバ定義で指定します。構文は次のとおりです。
ARCHIVE SNAPSHOT "snapshot-name" "service"
snapshot-name
引数は、アーカイブするスナップショットの名前です。service
引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。
次に例を示します。
OrdersCacheService
という名前のパーティション・キャッシュ・サービスでBackup
という名前のスナップショットをアーカイブします。
archive snapshot "Backup" "OrdersCacheService"
LIST ARCHIVER
文を使用して、サービスに現在関連付けられているスナップショット・アーカイバ定義の場所を表示します。たとえば:
list archiver "OrdersCacheService"
親トピック: ディスクへのキャッシュ・データの永続化
VALIDATE ARCHIVED SNAPSHOT
文は、アーカイブされたスナップショットが完了し、エラーがないかどうかをチェックする場合に使用されます。構文は次のとおりです。
VALIDATE ARCHIVED SNAPSHOT "snapshot-name" "service-name" [VERBOSE]
snapshot-name
引数は、検証されるアーカイブ済のスナップショットの名前です。service-name
引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。詳細な検証情報を確認するには、VERBOSE
オプションを使用します。
ノート:
クラスタ・オペレーション構成ファイルおよびキャッシュ構成ファイルは、定義済のスナップショット・アーカイバが見つかるように、クラスパスで使用可能にする必要があります。
アーカイブされたスナップショットの検証には、各パーティションの取得、内容の解凍および検証が含まれます。この操作(たとえば、Windows環境ではTEMP
環境変数)には、オペレーティング・システムのデフォルトのJava一時ディレクトリが使用されます。アーカイブされたスナップショットが大きい場合は、Djava.io.tmpdir=/path
を使用して、デフォルトのJava一時ディレクトリを変更することを検討してください。
次に例を示します。
Backup
という名前のアーカイブ済スナップショットを検証します。
validate archived snapshot "Backup" "OrdersCacheService" verbose
親トピック: ディスクへのキャッシュ・データの永続化
RETRIEVE ARCHIVED SNAPSHOT
文は、RECOVER SNAPSHOT
文を使用してリカバリできるように、アーカイブされたスナップショットを取得する場合に使用されます。リカバリを参照してください。構文は次のとおりです。
RETRIEVE ARCHIVED SNAPSHOT "snapshot-name" "service" [OVERWRITE]
snapshot-name
引数は、取得するアーカイブ済のスナップショットの名前です。service
引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。同じ名前が永続性スナップショット・ディレクトリにすでに存在する場合は、OVERWRITE
オプションを使用します。
次に例を示します。
OrdersCacheService
という名前のパーティション・キャッシュ・サービスで、Backup
という名前のアーカイブ済スナップショットを取得し、既存のスナップショットを上書きします。
retrieve archived snapshot "Backup" "OrdersCacheService" overwrite
ARCHIVED
オプションを指定してLIST SNAPSHOTS
文を使用し、使用可能なアーカイブ済みのスナップショットのリストを確認します。たとえば:
list archived snapshots "OrdersCacheService"
親トピック: ディスクへのキャッシュ・データの永続化
REMOVE SNAPSHOT
文は、スナップショットまたはアーカイブされたスナップショットをディスクから削除する場合に使用されます。構文は次のとおりです。
REMOVE [ARCHIVED] SNAPSHOT "snapshot-name" "service"
snapshot-name
引数は、削除するスナップショットの名前です。service
引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。ARCHIVED
オプションを使用して、アーカイブされたスナップショットを削除します。
次に例を示します。
Backup
という名前のスナップショットをOrdersCacheService
という名前のパーティション・キャッシュ・サービスから削除します。
remove snapshot "Backup" "OrdersCacheService"
Backup
という名前のアーカイブ済スナップショットをOrdersCacheService
という名前のパーティション・キャッシュ・サービスから削除します。
remove archived snapshot "Backup" "OrdersCacheService"
親トピック: ディスクへのキャッシュ・データの永続化
FORCE RECOVERY
文を使用して、動的クォーラム・ポリシーに反している場合でも永続性リカバリを続行できます。Oracle Coherenceの管理の動的リカバリ・クォーラム・ポリシーの使用を参照してください。ノート:
永続性リカバリを強制すると、対応するキャッシュ・サービスにおいて部分的または完全にデータが失われる可能性があります。
FORCE RECOVERY "service"
service
引数は、削除するパーティション・キャッシュ・サービスの名前です。
次に例を示します。
OrdersCacheService
という名前のパーティション・キャッシュ・サービスのリカバリを強制します。
force recovery "OrdersCacheService"
親トピック: ディスクへのキャッシュ・データの永続化
SUSPEND SERVICE
およびRESUME SERVICE
を使用して、永続性操作が非アクティブ・サービスで実行されることを確認します。一部の永続性操作では、サービスは自動的に一時停止し、文を実行すると再開されます。構文は次のとおりです。
[RESUME | SUSPEND] SERVICE "service"
service
引数は、一時停止または再開するパーティション・キャッシュ・サービスの名前です。
ノート:
一時停止したサービスにリクエストを送信するクライアントは、サービスが再開してリクエストが完了するまでブロックされます。サービスの再開を待機している間は、クライアントがブロックされないように、リクエスト・タイムアウトでサービスを構成できます。リクエスト・タイムアウトは、分散スキーム定義の<request-timeout>
要素またはcoherence.distributed.request.timeout
システム・プロパティを使用して構成できます。
次に例を示します。
OrdersCacheService
という名前のパーティション・キャッシュ・サービスを一時停止します。
suspend service "OrdersCacheService"
OrdersCacheService
という名前のパーティション・キャッシュ・サービスを再開します。
resume service "OrdersCacheService"
親トピック: ディスクへのキャッシュ・データの永続化
問合せのコストと効果を判断するために使用される問合せレコードを作成および出力するには、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
親トピック: Coherenceの問合せ言語構文について
WHENEVER COHQLERROR THEN
文は、文の実行中にエラーが発生した場合にCohQLで実行されるアクションを指定する場合に使用されます。この文は、CohQLがスクリプトの一部として使用される場合に役に立つことがあります。コマンド行ツールの引数の使用を参照してください。構文は次のとおりです。
WHENEVER COHQLERROR THEN [EXIT|CONTINUE]
次に例を示します。
検証スナップショット文が返され、エラーの場合は即座に終了します。
whenver cohqlerror then exit validate snapshot "/snapshots/MyCluster/DistCacheService/snapshot"
親トピック: Coherenceの問合せ言語構文について
com.tangosol.coherence.dslquery.QueryPlus
クラスを使用して操作できます。また便宜上、COHERENCE_HOME
/bin/
に配置された起動スクリプトを使用してこのツールを操作できます。このスクリプトは、Windows (query.cmd
)でもUNIX (query.sh
)でも使用できます。スクリプトは、コンソール・モードでクラスタ・ノードを起動します。記憶域はノード上では有効化されていません。これは、本番環境での推奨設定で、ノードが記憶域有効化キャッシュ・サーバーを持つクラスタに参加することが前提となっています。ただし、単一の記憶域有効化ノードをテスト用に作成するには、スクリプト内のstorage_enabled
設定をtrue
に変更します。
ノート:
構成の際には、起動スクリプトではデフォルトのオペレーション構成ファイル(tangosol-coherence.xml
)とデフォルトのキャッシュ構成ファイル(coherence-cache-config.xml
)が使用されます。これらのファイルは、クラスタの作成/参加およびキャッシュの構成の際にcoherence.jar
に格納されます。構成の理解を参照してください。
スクリプトは、COHERENCE_HOME
環境変数を設定するためのオプションを提供します。COHERENCE_HOME
がコンピュータで未設定の場合、スクリプト内のその環境変数をCoherenceのインストール場所に設定します。
CohQLは、コマンド履歴内で上矢印または下矢印を動かすなど、コマンド行編集の拡張機能にJLineを使用します。ただし、JLineはCohQLの使用には必要ありません。スクリプトは、COHERENCE_HOME
/lib/
ディレクトリ内に格納されているjline.jar
ライブラリを自動的に使用します。スクリプトのJLINE_HOME
変数およびクラスパスを変更することで、別の場所を指定できます。JLineライブラリが見つからない場合、メッセージが表示され、CohQLはJLine機能なしで開始されます。
この項には次のトピックが含まれます:
次の手順は、起動スクリプトを使用してCohQLコマンド行ツールの起動方法を示しています。この手順は、スクリプトのstorage_enabled
がfalse
に設定されていること(デフォルト)を前提としています。
親トピック: CohQLのコマンドライン行ツールの使用方法
CohQLコマンド行ツールには、CohQL>
プロンプトが返す前に読み取られ、実行される一連の引数が組み込まれています。これは、スクリプトを大型のスクリプトの一部として使用する際に(ビルド・プロセスの一部としての使用、I/Oをパイピングするための使用など)有用です。CohQL>
プロンプトでhelp
と入力し、コマンド行ツール内の引数のヘルプを表示します。
表28-2 Coherenceの問合せ言語コマンド行ツールの引数
引数 | 説明 |
---|---|
|
アプリケーション名をGARファイルに関連付けます。アプリケーション名は、同じユーザーで実行される他のアプリケーションから分離されるように、キャッシュとサービスのスコープ設定に使用されます。この引数が使用されるのは、 |
|
コマンド行引数の処理の後、コマンド行ツールを終了します。この引数は、標準の入力からリダイレクトする際には使用しないでください。使用すると、コマンド行の引数が処理を終了すると同時にツールが終了して、リダイレクトされた入力が読み取られません。 |
|
マルチテナント環境で使用するドメイン・パーティション名のカンマ区切りのリストを指定します。この引数が使用されるのは、 リストの最初のドメイン・パーティションがアーカイブ・ドメイン・パーティションとして自動的に選択され、キャッシュの作成時に使用されることに注意してください。異なるパーティションを選択するには、CohQLコマンド行からドメイン・パーティション文を使用して、パーティションを選択します。 ALTER SESSION SET DOMAIN PARTITON partition-name
|
|
コマンド行ツールを拡張言語モードで操作します。このモードにより、更新でオブジェクト・リテラルが許可され、コマンドを挿入できるようになります。使用法の詳細は、コマンド行のヘルプを参照してください。 |
|
指定したファイルの文を処理します。ファイル内の文は、セミコロン(;)で区切る必要があります。ファイルは、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。任意の数の |
|
CohQLを実行する前に、指定されたGrid ARchive (GAR)ファイルまたは展開されたGARファイル・ディレクトリをロードし、デフォルトのアプリケーション名を使用します。デフォルトのアプリケーション名は、親ディレクトリ名なしのGARファイル名です。 |
|
指定した文を実行します。文は一重または二重の引用符で囲む必要があります。任意の数の |
|
コマンド行ツールをサイレント・モードで操作して、無関係な用語を削除します。これにより、標準の入力( |
|
トレース・モードを有効にして、デバッグ情報を出力します。 |
|
CohQL文のタイムアウト値をミリ秒単位で指定します。 |
例
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
コマンド行ツールを起動し、/applications
ディレクトリにある、contacts.gar
という名前のGARファイルからアプリケーション・アーティファクトをロードします。
query.sh -g /applications/contacts.gar
コマンド行ツールを起動し、/applications
ディレクトリにある、contacts.gar
という名前のGARファイルからアプリケーション・アーティファクトをロードします。アプリケーション名をHRContacts
にスコープ設定します。
query.sh -g /applications/contacts.gar -a HRContacts
親トピック: CohQLのコマンドライン行ツールの使用方法
サービスのデフォルトのリクエスト・タイムアウト値は、サービスの<request-timeout>
要素またはすべてのサービスのcoherence.distributed.request.timeout
システム・プロパティのいずれかを使用して、値が明示的に設定されていないかぎり、無限大に設定されます。
CohQLコマンド行ツールは、現在のセッションで実行される文に適用されるタイムアウト値の設定に使用できます。コマンド行ツールのデフォルトのタイムアウト値は30秒です。文の実行時間が30秒を超えると、タイムアウト例外がスローされます。タイムアウト値を変更するには、次の2つの方法があります。
タイムアウト値をミリ秒単位で設定する場合は、-timeout
コマンド行引数が使用されます。たとえば、
query.sh -timeout 60000
ALTER SESSION
文は、タイムアウトをデフォルト値または-timeout
引数で指定された値から変更し、別のALTER SESSION
文が実行されるまで、有効な状態のままになります。構文は次のとおりです。
ALTER SESSION SET TIMEOUT value
値は、ミリ秒の合計を指定する整数にできます。たとえば:
ALTER SESSION SET TIMEOUT 45000
値は、期間を指定する文字列にすることもできます。期間の文字列に使用する有効な値は、h
(時間)、m
(分)、s
(秒)およびms
(ミリ秒)です。たとえば:
ALTER SESSION SET TIMEOUT '5m 30s'
親トピック: CohQLのコマンドライン行ツールの使用方法
次に、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> create snapshot "Backup" "DistributedCache"
キャッシュ内の既存のキーを削除します。空の結果セットが返されます。
CohQL> delete from employees where key() = "David"
employeesキャッシュの内容を削除します。空の結果セットが返されます。
CohQL> delete from "employees"
employeesキャッシュを破棄します。
CohQL> drop cache "employees"
employeesキャッシュを再作成します。
CohQL> create cache "employees"
バックアップからキャッシュの内容をリカバリします。
CohQL> recover snapshot "Backup" "DistributedCache"
employeesキャッシュ内のキーと値を取得します。削除されたキーと値が存在していることがわかります。
CohQL> select key(), value() from "employees"
employeesキャッシュを破棄します。
CohQL> drop cache "employees"
コマンド行ツールを終了します。
CohQL> bye
親トピック: CohQLのコマンドライン行ツールの使用方法
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);
親トピック: Coherenceの問合せ言語の使用
Filters
を強調する単純なselect
*
の例では、Filter
部分のみに注目すると、FilterBuilder
APIの変換について理解できます。例の完全なセットを使用すると、QueryBuilder
APIとコマンド行ツールの変換について理解できます。この例では、識別子を修飾するキャッシュ名が削除されたパス構文の短縮された形式が使用されています。
例のJava言語形式でも、EntryProcessors
のかわりにReducerAggregator
が予測に使用されています。KeyExtractor
の使用についても、Coherence 3.5ではReflectionExtractor
に対する特定の変更を必要としなくなったことにも注意してください。
この項には次のトピックが含まれます:
親トピック: Coherenceの問合せ言語の使用
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)
親トピック: その他のCoherenceの問合せ言語の例
キャッシュ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"
親トピック: その他のCoherenceの問合せ言語の例
employees
キャッシュでランクがグレード7以上の従業員の場合、給与を10%ごと増加して、休暇を50時間追加します。
update "employees" set salary = salary*1.10, vacation = vacation + 50 where grade > 7
親トピック: その他のCoherenceの問合せ言語の例
この項では、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
親トピック: その他のCoherenceの問合せ言語の例