コアDB:queryの構文

Document created by RSA Information Design and Development on Feb 15, 2017
Version 1Show Document
  • View in full screen mode
  

このトピックでは、データベース クエリーの構文について説明します。データベースでクエリーを実行する主要なメカニズムは、各コア サービスの/sdkフォルダにおけるqueryの呼び出し、valuesの呼び出し、msearchの呼び出しの3つです。

queryの呼び出しでは、メタ データベースからメタ アイテムが返されます。インデックスを使用すると処理が高速化されます。

valuesの呼び出しでは、特定の条件でソートされた一意のメタ値のグループが返されます。countなどの集計関数でソートした一意の値のサブセットを返すのに最適です。

msearchの呼び出しでは、テキストの検索語がその入力として取得され、検索語に一致するセッションが返されます。 この呼び出しでは、インデックス、メタ、rawパケット、rawログ内を検索できます。

queryの構文

queryメッセージの構文は次のとおりです。

 query-params = size-param, space, query-param, {space, start-meta-param}, {space, end-meta-param};
size-param = "size=", ? integer between 0 and 1,677,721 ? ;
query-param = "query=", query-string ;
start-meta-param = "id1=", metaid ;
end-meta-param = "id2=", metaid ;
metaid = ? any meta ID from the meta database ? ;

id1id2sizeパラメータは、データベースから大量の結果を返すためのページング メカニズムを構成します。このメカニズムで最も恩恵を受けるのは、Security Analytics Coreデータベースに直接対応したアプリケーションを記述する開発者です。通常、結果は古いデータから順に返されます(メタIDの大きいものが新しいデータです)。新しいデータから順に結果が返されるようにするには、IDを逆にします(たとえばid1id2より大きくします)。このようにすると、構文を完全に評価してからでないと逆順の処理を開始できないため、パフォーマンスが若干低下します。

サイズ設定をオフのままにしておくか、またはゼロに設定すると、すべての結果がページングされずに返されます。RESTfulインタフェースでこの処理を実行すると、チャンク エンコーディングによりフル レスポンスが返されます。ネイティブ プロトコルの場合、複数のメッセージにわたる結果が返されます。

queryパラメータはクエリー コマンド文字列で、Security Analytics固有の構文を使用します。

 query-string = select-clause {, where-clause} {, group-by-clause {, order-by-clause } } ;
select-clause = "select ", ( "*" | meta-or-aggregate {, meta-or-aggregate} ) ;
where-clause = " where ", { where-criteria } ;
meta-or-aggregate = meta_key | aggregate_func, "(", meta_key, ")" ;
aggregate_func = "sum" | "count" | "min" | "max" | "avg" | "distinct" | "first" | "last" | "len" | "countdistinct" ;
group-by-clause = " group by ", meta-key-list
meta-key-list = meta_key {, meta-key-list}
order-by-clause = " order by ", order-by-column
order-by-column = meta-or-aggregate { "asc" | "desc" } {, order-by-column}

select句を使用すると、*を指定してwhere句と一致するすべてのセッションのすべてのメタデータを返すか、メタ フィールド名のセットと集計関数を指定して、セッションごとにメタのサブセットを選択できます。

集計関数は、クエリー結果セットに対して次のような効果をもたらします。

                                                   
関数結果
sumすべてのメタ値を加算します。使用できるのは数字のみです
count返されたメタ フィールドのカウントです
min最小値です
max最大値です
avg数値の平均です
distinct一意の値の一覧が返されます
countdistinct一意の値の数が返されます。 countdistinctは、distinct関数によって返されるメタの数に相当します
first最初の値が返されます
last最後の値が返されます
len実際の値を返さずに、すべてのフィールド値をUInt32の長さに変換します。この長さは、実際の値を格納するためのバイト数で、メタ データベースに格納される構造の長さではありません。たとえば、「NetWitness」の場合、長さは10が返されます。IPv4フィールド(ip.srcなど)の場合は、すべて4バイトが返されます。

where句

where句ではフィルタ条件を定義し、インデックスを使用してコレクションからセッションを選択できます。

構文:

 where-criteria = criteria-or-group, { space, logical-op, space, criteria-or-group } ;
criteria-or-group = criteria | group ;
criteria = meta-key, ( unary-op | binary-op meta-value-ranges ) ;
group = ["~"], "(" where-clause ")" ;
logical-op = "&&" | "||" ;
unary-op = "exists" | "!exists" ;
binary-op = "=" | "!=" | "<" | ">" | ">=" | "<=" | "begins" | "contains" | "ends" | "regex" ;
meta-value-ranges = meta-value-range, { ",", meta-value-range } ;
meta-value-range = (meta-value | "l" ), [ "-", ( meta-value | "u" ) ] ;
meta-value = number | ( '"' text '"' ) | ip-address | mac-address | ( '"' date-time '"' ) ;

ルール条件を指定すると、句のメタ値の部分が、メタ キーで指定するメタの型と一致します。たとえば、キーがip.srcの場合、メタ値はIPv4アドレスになります。

クエリーの演算子

次の表で、各演算子の機能について説明します。

                                                               
演算子機能
=メタ値を含むセッションと完全に一致します。値の範囲が選択されている場合は、その範囲の値はすべて一致と見なされます。
!==演算子で記述した場合と反対で、指定した句に一致しないすべてのセッションと一致します。
<数値の場合、演算子の右側の数値よりも小さい数値のメタを含むセッションと一致します。演算子の右側の数値が範囲で指定されている場合、その範囲の最初の値が比較対象値と見なされます。複数の範囲が指定されている場合は、動作が定義されません。テキストのメタ値の場合、辞書データの比較が実行されます。
<=動作は<と同じですが、値の等しいメタを含むセッションも一致と見なされます。
><演算子と似ていますが、右側の数値よりも大きい数値を持つセッションと一致します。演算子の右側の数値が範囲で指定されている場合、その範囲の最後の値が比較対象値と見なされます。
>=動作は>と同じですが、値の等しいメタを含むセッションも一致と見なされます。
begins右側と同じ文字で始まるテキストのメタ値を含むセッションと一致します。
ends右側と同じ文字で終わるテキストのメタ値を含むセッションと一致します。
contains右側に指定したサブストリングを含むテキストのメタ値を含むセッションと一致します。
regex右側に指定した正規表現と一致するテキストのメタ値を含むセッションと一致します。正規表現の解析はboost::regexにより処理されます。
exists指定するメタ キーを持つメタ値を含むセッションと一致します。
!exists指定するメタ キーを持つメタ値を含まないセッションと一致します。
length特定のレングスのテキスト メタ値を含んだセッションと一致します。 右辺の式は非負数にする必要があります。

テキスト値

テキスト値を引用符で囲んで使用します。引用符で囲まなくても文字列は機能しますが、日付や数値に比べて、値の解釈があいまいになる場合があります。

-を含んでいる可能性があるテキスト値を引用符で囲んで、範囲と解釈されないようにすることも重要です。

IPアドレス

IPアドレスは、標準のIPv4アドレスおよびIPv6アドレスのテキストで表すことができます。また、クエリーでCIDR表記を使用して、アドレスの範囲を表すこともできます。CIDR表記を使用すると、同等の値の範囲まで拡大できます。

MACアドレス

MACアドレスは、次の標準的なMACアドレス表記を使用して指定できます。aa:bb:cc:dd:ee:ff

日時の表現

Security Analytics Coreでは、日付がUNIXのエポック時刻形式で表されます。この表示は、1970/01/01 UTCを起点とする秒数です。クエリーでは、時刻をこの秒数または文字列で表すことができます。日付と時刻を文字列で表すと、YYYY-mmm-DD HH:MM:SSとなります。3文字で表されているのは月の部分です。この部分を2桁(01–12)で表すこともできます。

クエリーで表す時刻は、すべてUTCです。

特殊な範囲の値

範囲は通常、"smallest" - "largest"という構文で表しますが、範囲の式には特殊なプレースホルダーの値を使用することもできます。範囲の開始値としてすべてのメタ値の下限を表すためにlの文字を、上限を表すためにuの文字を使用することができます。これらの上限と下限は、インデックス済みのすべてのメタ値のインデックスから見つかった、最大および最小のメタ値を探すことで決定されます。

注:lタグまたはuタグを使用する場合は、引用符で囲まないでください。

たとえば、time = "2014-may-20 11:57:00" - uという式は、2014/05/20 11:57:00から、コレクションで見つかった最新の時刻までのすべてと一致します。

この式は、テキスト文字列を使用した範囲の式と混同しやすいので注意が必要です。-を含んでいるテキスト値は必ず引用符で囲んでください。またハイフンの範囲を表すために使用する場合は、引用符で囲んだテキストの外に記述してください。

Group By句(10.5以降)

クエリーAPIには、query呼び出しの結果から集計グループを生成する機能があります。これは、クエリーでGROUP BY句を使用して行います。 GROUP BYを指定すると、クエリーの結果セットはグループに分けられます。 結果の各グループは、group by句で指定されたメタ値によって一意に識別されます。 

たとえば、クエリーselect count(ip.dst)について考えます。このクエリーは、データベースにあるすべてのip.dstメタの数を返します。ただし、select count(ip.dst) group by ip.srcのようにgroup by句を追加した場合、クエリーは、一意のip.srcごとに見つかったip.dstメタの数を返します。

Security Analyticsバージョン10.5より、group by句で最大6個のメタ フィールドを利用できるようになりました。

group by句は、values呼び出しと同じ機能を一部共有しており、クエリー時間は長くなりますが、大幅に高度なグループ分けを提供します。グループ分けされたクエリーの結果を生成するときには、WHERE句に一致するすべてのセッションのメタ データベースからメタが読み取られます。一方で、values呼び出しでは、インデックスのみを読み取ることで集計を生成できます。

クエリーによって返される各グループの内容は、select句によって定義されます。select句には、任意の集計関数または選択したメタ フィールドを指定できます。複数の集計が選択された場合、集計関数の結果はグループごとに定義されます。集計以外のフィールドが選択された場合、メタ フィールドはグループごとにバッチで返されます。

group byクエリーの結果セットは次のルールでエンコードされます。

  1. グループに関連づけられたすべてのメタは、同じグループ番号で提供されます。
  2. グループに返される最初のメタがグループ キーを識別します。たとえば、group by句でgroup by ip.srcを指定した場合、各グループの最初のメタはip.srcになります。
  3. 通常の集計以外のメタがグループ キーの後に返されますが、このメタにはグループ キー メタと同じグループ番号が付けられます。
  4. 各グループの集計結果メタ フィールドが次に返されます。
  5. グループ内のすべてのフィールドが一緒に返されます。別のグループの結果はインターリーブされません。

GROUP BYメタのいずれかがwhere句で一致するいずれかのセッションから欠落している場合、そのメタ フィールドはそのグループのためにNULLとして処理されます。そのグループの結果が返されるとき、データベースにはNULLの概念がないため、グループ キーのNULL値部分はグループの結果から取り除かれます。

GROUP BYクエリーのセマンティックは、返されるメタ フィールドの点で、SQLのようなデータベースと異なります。SQLデータベースでは、group by列が結果セットで返されるようにする場合は、select句でgroup by列を明示的に選択する必要があります。Security Analytics Coreデータベースは、常にグループ列を最初に暗黙的に返します。

GROUP BY句を含んだクエリーは、サイズ パラメータが指定されている場合は結果セットのサイズ パラメータに従います。ただし、グループ化の性質により、固定サイズの結果セットが要求された場合は、グループをページングし、再構成するために呼び出し元に追加の負担がかかります。このため、group by呼び出しを行う場合は、明示的な結果サイズを指定しないことをお勧めします。明示的なサイズを指定しないことで、結果セット全体が部分的な結果として提供されます。

次の表に、データベースが従う、group byクエリーのI/Oまたはメモリへの影響を制限する構成パラメーターを示します。

                   
パラメータ機能
/sdk/config/max.query.groupsこれは、集計を計算するためにメモリで保持できるグループの数に対する制限です。このパラメーターにより、クエリーのメモリ全体の使用量を制限できます。
/sdk/config/max.where.clause.sessionsこれは、クエリーで処理できるwhere句からのセッションの数に対する制限です。このパラメーターにより、クエリーを解決するためにメタおよびセッション データベースから読み取る必要があるセッションの数を制限できます。

Order By句(10.5以降)

order by句は、group by句を使用するクエリーに追加できます。order by句を指定すると、グループ化された結果のセットがソートされた順で返されます。

order byは、昇順または降順でソートするときに基準となるアイテムのセットで構成されます。ソートは、結果セットで返される任意のデータ フィールドに対して実行できます。これには、select句によって指定されたメタ、select句によって指定された集計関数の結果、group byメタ フィールドが含まれます。

order by句は、多数の列をソートできます。クエリーで指定できるorder-by列の数に制限はありませんが、各order-by列に存在する実際上の制限は、select句またはgroup by句によって返されるものを指している必要があります。 複数列のソートは、辞書順に行われます。つまり、最初の列の値が2つのグループで同じ場合は、そのグループは2番目の列を基準にソートされます。2番目の列で値が同じ場合は、3番目の列を基準にソートされます。このとき、指定されたorder by列の数は関係ありません。

Security Analytics Coreデータベースは、クエリーによって返される結果のグループそれぞれが、選択内容に対して多くの値を持つことができる点が特徴です。 たとえば、メタ タイプに一致するすべてのメタを選択し、それをグループに分けることができます。また、distinct()関数を使用して、個別のメタ値のグループを返すことができます。order by句が、複数の値を持つグループのフィールドのいずれかを参照している場合、ソート順は次のように適用されます。

  1. 各グループ内で、複数の一致する値を持つフィールドは、順序づけ句によって順序づけられます。
  2. すべてのグループは、各グループ内で見つかった順序づけられたフィールドの最初の出現を比較することでソートされます。

メタ フィールドを個別のレコードに整理するためにグループが必要なので、order by句はgroup by句を使用するクエリーでのみ使用できます。グループ化が適用されていない場合と同じように任意のクエリーをソートする場合は、group by sessionidを使用します。これにより、結果は、個別のセッションまたはイベントのグループで返されます。

group by句は、本来はグループ キーの昇順で返されますが、order by句を使用して別の順序でグループを返すことができます。

order by列でascまたはdescを指定しない場合、デフォルトの順序は昇順です。

例:

 select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst)
select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) desc
select countdistinct(ip.dst),sum(size) GROUP BY ip.src ORDER BY sum(size) desc, countdistinct(ip.dst)
select sum(size) GROUP BY ip.src, ip.dst ORDER BY ip.dst desc
select user.dst,time GROUP BY sessionid ORDER BY user.dst
select * GROUP BY sessionid ORDER BY time

valuesの呼び出し

インデックスは、インデックスに格納されている特定のメタ値にアクセスできる下位レベルのvalues関数を提供します。開発者はこの関数を使用して、一意のメタ値のグループに対してより高度な演算を実行できます。

valuesの呼び出しパラメータの構文:

 values-params = field-name-param, space, where-param, space, size-param, {space, flags-param} {space, start-meta-param}, {space, end-meta-param}, {space, threshold-param}, {space, aggregate-func-param}, {space, aggregate-field-param}, {space, min-param}, {space, max-param} ;
field-name-param = "fieldName=", meta-key ;
where-param = "where=", where-clause ;
size-param = "size=", ? integer between 1 and 1,677,721 ? ;
start-meta-param = ? same as query message ?
end-meta-param = ? same as query message ?
flags-param = "flags=", {values-flag, {"," values-flag} } ;
values-flag = "sessions" | "size" | "packets" | "sort-total" | "sort-value" | "order-ascending" | "order-descending" ;
threshold-flag = "threshold=", ? non-negative integer ? ;
aggregate-func-param = "aggregateFunction=", { aggregate-func-flag } ;
aggregate-func-flag = "count" | "sum" ;
aggregate-field-param = "aggregateFieldName=", meta-key ;
min-param = "min=", meta-value ;
max-param = "max=", meta-value ;

valuesの呼び出しでは、所定のメタ キーに対して一意のメタ値のセットを返す関数を実行できます。一意の値ごとにvaluesを呼び出すと、カウントを集計できます。合計の生成に使用する関数は、flagsパラメータにより制御します。

パラメータ

以下の表に、各パラメータの機能を示します。

                                               
パラメータ機能
fieldName一意の値を取得するためのメタ キー名です。たとえばfieldNameがip.srcの場合、この関数を実行すると、コレクションにある一意のソースIP値が返されます。
wherewhere句は、一意の値を取得するためのセッションのセットをフィルタします。たとえば、fieldNameがip.srcで、where句がip.src = 192.168.0.0/16の場合、192.168.0.0~192.168.255.255の範囲にある値のみが返されます。where句の構文については、「where句」を参照してください。
size返される一意の値のセットのサイズです。データベース内の一意の値の限定的なサブセットを返すように、この関数を最適化することもできます。
id1、id2これらのオプションのパラメータにより、一意の値の検索範囲を、メタ データベースとインデックスの特定の部分に限定することができます。大規模なコレクションの検索を高速で実行するには、メタ データベースの特定の範囲に限定するように、id1とid2のパラメータを設定することが重要です。
flagsflagsは、値のソート方法や集計方法を制御します。flagsについては、次の「valuesのフラグ」セクションで説明します。
thresholdthresholdパラメータを設定すると、valuesを呼び出したときに、いったん閾値に達した時点で、値ごとに関連づけられる合計値の収集をショートカットできます。thresholdを指定することで、呼び出し側でデータベースから取得するのに必要なインデックスとメタ アイテムの量を減らすことができます。thresholdパラメータを省略するか、またはゼロに設定すると、このような最適化が行われません。
aggregateFunctionセッション、パケット、サイズをカウントするデフォルトの動作を、aggregateFieldNameで定義する数値フィールドのカウントまたは合計に変更する場合に使用するオプションのパラメータです。これらのうち、どちらかのパラメータを指定した場合は、もう一方も指定する必要があります。sumまたはcountのいずれかを渡して、どちらの動作を実行するか指定します。
aggregateFieldNameaggregateFunctionを実行するメタ フィールドです。集計フラグを設定する場合は、aggregateFunctionとaggregateFieldNameの両方のパラメータを指定する必要があります。集計関数の1つを使ってvaluesの呼び出しを実行すると、セッション、パケット、サイズのセッションの合計を収集するvaluesの呼び出しに比べて、動作が大幅に低下する場合があります。その理由は、where句と一致するセッションをメタ データベースから個別に取得しなければならないためです。このような処理により、クエリーの大部分がメタDBボリュームのI/Oに依存することになります。集計関数を使用したvaluesの呼び出しを実行するのにかかる時間は、where句と一致するセッションの数に比例します。
min、max呼び出しにより返される最大値と最小値です。これらのパラメータを使用すると、膨大な量の値を反復処理(またはページング)し、1回の呼び出しで返される値よりも多くの値を返します。主に、フラグsort-value,sort-ascendingとともに使用され、その戻り値である最大値は以降の呼び出しでminパラメータ値として使用されます。これらの値は排他的です。min=“rsa"を指定していて、rsaが有効な値の場合、rsaは返されませんが、その次に高い値が返されます。

valuesのフラグ

flagsパラメータは、valuesの呼び出しの演算方法を制御します。flagsパラメータには3つのグループがあり、次の表に示すように、それぞれが各種演算方式に対応しています。

                       
フラグ説明
sessions、size、packetsvaluesを呼び出すと、これらのフラグのいずれかを指定して、値ごとの合計の計算方法を決定できます。フラグがsessionsの場合、valuesの呼び出しにより、それぞれの値を含むセッション数が返されます。フラグがsizeの場合、valuesの呼び出しにより、それぞれの一意の値を含むセッションの合計サイズが返されます。また、それぞれの一意の値の合計サイズがレポートされます。フラグがpacketsの場合、valuesの呼び出しにより、それぞれの一意の値を含むセッションのパケット数が返されます。また、それぞれの一意の値の合計パケット数がレポートされます。
sort-total、sort-valueこれらのフラグは、結果のソート方法を制御します。フラグがsort-totalの場合、収集した合計の順に結果セットがソートされます。フラグがsort-valueの場合、値のソート順で結果が返されます。
order-ascending、order-descendingこれらのフラグは結果セットのソート順序を制御します。たとえば、合計を基準に降順でソートすると、合計が最も大きい値が最初に返されます。

valuesの呼び出し例

valuesの呼び出しは、Security Analyticsの[ナビゲート]ビューで幅広く使用されます。デフォルトのビューでは、次のような呼び出しが実行されます。

 /sdk/values id1=198564099173 id2=1542925695937 size=20 flags=sessions,sort-total,order-descending threshold=100000 fieldName=ip.src where="time=\"2014-May-20 13:12:00\"-\"2014-May-21 13:11:59\"" 

この例では、[ナビゲート]ビューでip.srcの一意の値が要求されています。また、一定期間内におけるip.srcの一意の値が要求されています。さらに、それぞれのip.srcと一致するセッション数が要求され、結果は、セッション数の合計を降順でソートした場合の、上位20件のip.src値となります。最後に、クエリー エンジンに最適化のヒントを与えるために、[ナビゲート]ビューにメタIDの範囲が表示されます。

msearchの呼び出し

インデックスにより、すべてのメタ タイプに対してテキスト検索を実行する、下位レベルのmsearch機能が提供されます。このタイプの検索では、既知のメタ タイプという点からユーザーによるクエリーの定義は必要ありません。代わりに、データベースのすべての部分を検索して照合します。msearchは[イベント]ビューのテキスト検索で使用されます。使用できる検索フォームおよび例については、「InvestigationおよびMalware Analysisガイド」のトピック「[イベント]ビューのフィルタおよび検索結果」を参照してください。

msearchパラメータ:

 msearch-params = search-param, {space, where-param}, {space, limit-param}, {space, flags-param};
search-param = "search=", ? free-form search string ? ;
where-param = "where=", ? optional where clause ? ;
limit-param = "limit=", ? optional session scan limit ? ;
flags = "flags=", {msearch-flag, {"," msearch-flag} };
msearch-flag = "sp" | "sm" | "si" | "ci" | "regex" ;

msearchアルゴリズムは、次のような仕組みです。

  1. 3つのセットの共通部分を検索することによって、インデックスから一連のセッションが識別されます。
    • (セット1)データベース内にあるすべてのセッション
    • (セット2)where句パラメーターと一致するセッション
    • (セット3)siフラグが指定されている場合、検索文字列パラメーターと一致する値をインデックス付けしたセッション。
  2. 検索でsmパラメーターを指定した場合は、ステップ1で識別された一連のセッションからすべてのメタを読み取ってスキャンが実行され、検索文字列パラメーターと一致するかどうか確認されます。検索を実行した位置に最も近いサービスからメタが読み取られます。たとえば、Brokerで検索を実行した場合、Brokerに最も近いConcentratorからメタが読み取られますが、Archiverで検索を実行した場合は、Archiver自体からメタが読み取られます。
  3. 検索でspパラメータを指定した場合は、ステップ1で識別された一連のセッションからすべてのrawパケットまたはrawログのエントリーを読み取ってスキャンが実行され、検索文字列パラメーターと一致するかどうか確認されます。検索を実行した位置に最も近いサービスからパケットが読み取られます。たとえば、Concentratorで検索を実行した場合、Decoderからパケット データが読み取られますが、Archiverで検索を実行した場合は、Archiver自体からパケット データが読み取られます。
  4. 一致が検出されると、limitパラメータの限度まで、ステップ2とステップ3で一致するものが返されます。limitには、メタおよびパケット データをスキャンする最大セッション数を指定します。limitを指定しない場合は、ステップ1で特定されたセッション セット全体がスキャンされます。

msearchのフラグ

                               
フラグ説明
sprawパケット データをスキャンする
smメタ データをすべてスキャンする
siメタをスキャンする前にすべての検索パラメータに対してインデックス ルックアップを実行する
ci大文字小文字を区別しない検索を実行する。返される結果の大文字小文字は維持されます。
regex正規表現として検索パラメーターを処理する。正規表現は1つのみ指定できますが、正規表現によってはその表現が複雑になる場合があります。

msearchインデックス検索モード

siフラグを使用して指定したインデックス検索モードを使用すると、他のどのモードよりも大幅に速く結果が返されます。このモードの主な制限は、値でインデックスづけされたメタ値と一致するテキスト条件が一致するもののみを返す点です。

  • siパラメーターは必ずsmフラグと組み合わせます。siパラメーターは、検索ではインデックス付けされたメタのみが照合されることを意味します。 
  • siパラメーターはregex検索とともに使用できますが、テキストのインデックス値のみが一致します。IPアドレスと数字はregexには一致しません。

msearchのヒント

  • 検索の時間範囲を指定する場合は常にwhere句を使用する。 
  • IPアドレス範囲を検索する場合はwhere句でその範囲を指定する。
  • インデックス検索モードを使用しない場合はlimitパラメーターを使用する。使用しない場合、メタおよびパケットのデータベースによる、非常に大量のデータ読み取りが発生します。

ストアド プロシージャ

queryとvaluesの呼び出しには、さらに下位レベルの検索機能があります。より高度な用途向けに、サーバ側のストアド プロシージャがあります。

クエリー構文での引用符の使用

クエリーParserは、クエリー ステートメントで一重引用符と二重引用符両方の使用を許可します。一重引用符または二重引用符で囲まれた値は、テキスト メタとして処理されます。

クエリー パーサーは、ステートメントに入力されたどのような内容も解釈しようとします。クエリーParserが受け入れる内容に関してはあまり厳密ではありません。

例:

reference.id=4752

この句は、数値4752を持つreference.idメタ値を含んだセッションを識別します。

reference.id='4752'またはreference.id="4752"

この句は、文字列値「"4752"」を持つreference.idメタ値を含んだセッションを識別します。

ただし、クエリー エンジンは数値と、数値のように見える文字列を暗黙的に比較し、値がセマンティック上同じである場合は同等と見なします。このため、どちらの構文でも機能します。

ただし、パフォーマンス効率を最大にするには、クエリー構文がパーサーによって生成されるデータ タイプと一致するようにクエリーを構築することをお勧めします。

たとえば、パーサーがreference.idを数値データ タイプ(uint32、uint64など)として作成している場合、数値構文を使用します。

パーサーがreference.idをテキスト データ タイプとして作成している場合、文字列構文を使用します。

Previous Topic:ロールオーバー
You are here
Table of Contents > クエリー

Attachments

    Outcomes