kiwiz/ecl

此包的最新版本(v1.0.0)没有可用的许可证信息。

ECL

v1.0.0 2018-11-07 21:02 UTC

This package is not auto-updated.

Last update: 2024-09-23 07:16:15 UTC


README

Build Status Code Climate Test Coverage

ECL 是一种简单的查询语言,旨在与生成表格数据的源一起使用。它允许您查询这些源中的数据并进行一些有限的操作。它支持条件语句、循环、变量和注释。几乎肯定存在错误。请报告!

语法

ECL 基于 bash 的 shell 语法。您在这里会发现类似的想法

  • 注释(例如:# HACK)。
  • 变量(布尔值、整数、浮点数、字符串、数组)。
  • 字符串连接(例如:"app"'le'”)。
  • 通过 >| 进行输出重定向。
  • 控制流(iffor)。还有我忘记的一些其他内容。

关于语法的权威来源是语法。为了更容易地了解,可以尝试查看下面的示例。

示例程序

set type="access_log"; # Define the type we want to query
es:logstash _type:$type > res_a; # Query ES for data and store the results into a variable
if `count(res_a) > 0` { # If we got results...
    # Load up our results and use it in a follow up query.
    # Look for any info_log documents that match any of the `request_uaid`s in our first result set.
    load res_a | es:logstash _type:info_log request_uaid:$_.request_uaid;
}
set list=["one","two","three"];
for list {
    es:logstash a:$_.value;
}

参考

注释

# This is a comment

语句

集合

set VAR=VALUE

集合语句允许您将基本值分配给变量。没有返回值。

VAR:变量的名称。VALUE:设置变量的值。支持布尔值、整数、浮点数、字符串和数组。

示例:set num=10

条件

if `COND` {
    BRANCH_A
}
if `COND` {
    BRANCH_A
} else {
    BRANCH_B
}

if 语句允许您分支执行。它接受一个 ECL 表达式,允许您访问任何全局变量。返回获胜分支的值。

COND:一个 SEL 表达式。BRANCH_A:真实分支。BRANCH_B:虚假分支。

示例:if true { es:logstash url:"/" } else { es:logstash -url:"/" }

循环

for VAR {
    CODE
}

循环语句允许您遍历结果。循环体的每次迭代都会设置 _ 变量。返回循环体的值。

VAR:要遍历的结果。CODE:要执行的代码块。

示例:for res { count }

命令列表

AAA
AAA | BBB | ...
AAA | BBB | > VAR_A | CCC | DDD > VAR_B

命令列表是一系列要执行的命令。每个命令的输出流向下一个命令,直到到达末尾。您可以将几乎所有命令的输出复制到变量中。如果最终命令的输出没有重定向到变量,则返回最终命令的输出。

AAABBBCCCDDD:命令

命令

计数

count

返回结果集的结果计数。

过滤器

filter `EXPR`

使用提供的表达式过滤结果集。

EXPR:一个 SEL 表达式。

示例:filter _['level'] == 'info'``

头部

head NUM

返回前 n 个结果。

NUM:要返回的最大结果数。

示例:head 5

尾部

tail NUM

返回最后 n 个结果。

NUM:要返回的最大结果数。

示例:tail 5

连接

join:TYPE RES=FIELD+FIELD+...

对两个结果集执行内部连接。

TYPE:连接类型(内部)。 RES:要连接的结果集。FIELD:连接的字段。

示例:join res_a=request_uaid

映射

map -FIELD
map AAA+BBB=CCC
map FIELD=`EXPR`
map [AAA,BBB,CCC]

映射结果集中的字段名称和值。您可以在单个命令中指定多个子句,并将按顺序执行。

示例:map count=_ + 3 _type=type -_type

搜索

es:SRC QUERY
es:SRC OPTS QUERY | agg:ATYPE AFIELD AOPTS

返回 ES 的数据。支持 ES2.x-ES6.x

SRC:源(通常为 logstash)。OPTS:搜索选项。QUERY:查询。ATYPE:聚合类型。AOPTS:聚合选项。

支持大多数标准ES语法和一些额外功能

示例:es:logstash _type:info_log | agg:terms ip_addr

排序

sort FIELD,ORD ...

返回排序后的结果。

FIELD:排序的字段名。ORDasc(升序)或 desc(降序)。

示例:sort request_time,asc

加载

load AAA
load AAA,BBB,...

加载结果集。

AAABBB:变量。