ES|QLことはじめ
shinobe179.icon用の「Learning ES|QL」のまとめです。
あるデータソースに対して、パイプ|で繋いだ処理でアウトプットを加工できるクエリ言語
8.11から追加された
基本
加工するデータソースを指定するsource commandと、それを加工するためのprocessing commandからできている
processing commandはパイプ(|)で繋ぐ
source-command
| processing-command1
| processing-command2
source command
FROM
index、data stream、aliasを指定する
ROW
任意の列を生成できる。テストに有用
code:sample
SHOW
SHOW INFO:デプロイメントのバージョンとか
SHOW FUNCTIONS:ES|QLの関数一覧
processing command
DISSECT、GROK
構造化データを加工して列を生成する
基本はDISSECTを使う。正規表現が必要ならGROKを使う
EVAL
式、関数でデータを加工して列を生成する
ENRICH
enrich policyに基づいてデータ(列)を追加する
ややこしいので別途説明
STATS...BY
指定した列に基づいてグループ化
code:sample
FROM employees
| STATS count = COUNT(emp_no) BY languages
| SORT languages
WHERE
データの絞り込み(以下、便利そうな条件だけ抜粋)
RLIKE:正規表現でLIKE
START_WITH / END_WITH
CIDER_MATCH
KEEP
出力に残す列名を指定する
SORT
DROP
LIMIT
MV_EXPAND
RENAME
data enrichment
enrich policyを作る
source indexのリスト
照合のタイプ
ES|QLのENRICHではmatchしか使えない
入力されたデータとの照合に使うフィールド名
マッチした時に入力に追加するフィールド名
enrich policyを実行すると、source indexのリストからenrich indexができる
ENRICHコマンドでenrich policyを指定すると、ポリシーの通り照合、行の追加が実行される
shinobe179.iconあんまり分かってないこと
enrich indexって定期的に更新されたりするのか?
そうじゃないと、脅威インテリジェンスをインデックスするためのintegrationがあるけど、これとログとの突き合わせにdata enrichmentを使えない気がする
要するに純粋なJOINが求められているのだと思う
ハマりそうな仕様
ES|QLはLIMITを指定しない場合、暗黙的にLIMIT 500がかかる
LIMITは出力されるデータに対してかかる
クエリの処理自体は、クエリ内で抽出された全データセットに対してかかる
クエリの処理負荷を減らしたい場合は、WHEREで絞る
一部の型のmulti valued fieldは重複排除される
enrich policyは更新できない
新しいものを作って、差し替え、元のものを削除する