面向SQL 用户的 Splunk

以下内容不是 SQL 与 Splunk 搜索命令之间的精确映射,但是,如果您熟悉 SQL,这一快速对比可以帮助您快速熟悉Splunk 的使用。

概念:

从数据库的角度来说,Splunk 是一个具有隐式时间维度的分布式、非关系型、半结构化的数据库。Splunk 不是一个标准意义上的数据库 -  关系数据库要求提前定义所有表列并且不会在只插入新硬件的情况下自动扩展 - 但是,Splunk 中有许多与数据库领域相似的概念。

SQL 查询 与 Splunk 搜索 的关系

Splunk 搜索是对索引数据进行检索,并且可以执行转换和报告操作。可以将搜索所获得的结果通过管道符从一个命令传递或传输到另一个命令,以对这些结果进行过滤、修改、重新排序和分组。

表/视图 与 搜索结果 的关系

可将搜索结果视为数据库视图,一个动态生成的具有行和列的表。

数据库的index和splunk的 index 的关系

在 Splunk 中,会对所有值和字段进行索引,因此不需要手动添加、更新、丢弃,甚至不需要考虑对列建立索引的问题。系统可以自动快速地检索一切内容。

SQL的 row(行)和splunk的 结果/事件

Splunk 中的结果是⼀个包含字段(即,列)值的列表,对应于表格的⾏。事件是指具有时间戳和原始⽂本的结果。通常,事件是⽇志⽂件中的⼀条记录,例如:

173.26.34.223 - - [01/Jul/2009:12:05:27 -0700] "GET /trade/app?action=logout

HTTP/1.1" 200 2953

 

column(纵行)和splunk的 field(字段)

Splunk 中的字段从搜索中动态地返回,这意味着⼀个搜索可能会返回⼀组字段,⽽

另⼀个搜索可能会返回另⼀组字段。在告知 Splunk 如何从原始底层数据提取出更多

字段后,同⼀个搜索将返回⽐之前多的字段。Splunk 中的字段不与数据类型关联。

 

SQL数据库/⽅案和splunk的 索引/应⽤

在 Splunk 中,索引是⼀个数据集合,这与⼀个数据库是⼀个表集合相似。对应数据的域知识、如何提取、运⾏哪些报告等等都存储在 Splunk 应⽤中。

从SQL到splunk

SQL 命令

SQL

 Splunk

GROUP BY

 

SELECT mycolumn, avg(mycolumn)

FROM mytable

WHERE mycolumn=value

GROUP BY mycolumn

source=mytable mycolumn=value

| STATS avg(mycolumn) BY mycolumn

| FIELDS mycolumn, avg(mycolumn)

 

 

HAVING

 

 

SELECT mycolumn, avg(mycolumn)

FROM mytable

WHERE mycolumn=value

GROUP BY mycolumn

HAVING avg(mycolumn)=value

source=mytable  mycolumn=value

| STATS avg(mycolumn) BY mycolumn

|SEARCH avg(mycolumn)=value

| FIELDS mycolumn, avg(mycolumn)

 

 

LIKE

 

 

SELECT mycolumn, avg(mycolumn)

FROM mytable

WHERE mycolumn LIKE  "%some text%"

source=mytable mycolumn="*some text*"

注意:Splunk 中最常见的搜索法实际上在

SQL 中是几乎法实现的 - 即在所有字段中搜

字符串。下的搜索将返回在任意位置包

含 "some text" 的所有

source=mytable "some text"

 

ORDER BY

 

SELECT *

FROM mytable

ORDER BY mycolumn desc

source=mytable 

| SORT=mycolumn

 

 

SELECT DISTINCT

(不同)

 

SELECT DISTINCT mycolumn1, mycolumn2

FROM mytable

source=mytable 

|DEDUP mycolumn1

| FIELDS mycolumn1, mycolumn2

(去重)

 

SELECT TOP

SELECT TOP 5 mycolumn1, mycolumn2

FROM mytable

source=mytable 

|  TOP mycolumn1, mycolumn2

 

INNER JOIN

 

 

SELECT *

FROM mytable1

INNER JOIN mytable2

ON mytable1.mycolumn=mytable2.mycolumn

source=mytable1

| JOIN type=inner mycolumn [ SEARCH

source=mytable2 ]

注意:还可以通过其他两种⽅法来执⾏连接:

使⽤查找命令来添加外部表中的字段:

... | LOOKUP myvaluelookup mycolumn OUTPUT

myoutputcolumn

使⽤⼦搜索:

source=mytable1 [

SEARCH source=mytable2 mycolumn2=myvalue

| FIELDS mycolumn2

]

 

LEFT (OUTER) JOIN

 

 

SELECT *

FROM mytable1

LEFT JOIN mytable2

ON mytable1.mycolumn=mytable2.mycolumn

source=mytable1

| JOIN type=left mycolumn [ SEARCH

source=mytable2 ]

 

SELECT INTO

 

 

SELECT *

INTO new_mytable IN mydb2

FROM old_mytable

source=old_mytable

| EVAL source=new_mytable

| COLLECT index=mydb2

注意:COLLECT 通常于将计算开销极

字段存储回 Splunk 中,以提将来的访问速

度。前列举的例是典型例,仅供

与 SQL 命令对。source 将被重命名为

orig_source

 

TRUNCATE TABLE

TRUNCATE TABLE mytable

(截断)

source=mytable

| DELETE

 

INSERT INTO

 

 

INSERT INTO mytable

VALUES (value1, value2, value3,....)

注意:请参阅 SELECT INTO。如果需要,各

个记录的添加可以不使⽤搜索语⾔,⽽是使⽤

API

 

UNION

(联合)

 

SELECT mycolumn

FROM mytable1

UNION

SELECT mycolumn FROM mytable2

source=mytable1

| APPEND [ SEARCH source=mytable2]

| DEDUP mycolumn

 

UNION ALL

 

 

SELECT *

FROM mytable1

UNION ALL

SELECT * FROM mytable2

source=mytable1

| APPEND [ SEARCH source=mytable2]

 

DELETE

 

DELETE FROM mytable

WHERE mycolumn=5

source=mytable mycolumn=5

| DELETE

 

 

UPDATE

 

 

 

UPDATE mytable

SET column1=value, column2=value,...

WHERE some_column=some_value

注意:在 Splunk 中更新记录时需要考虑几点

事项。⾸先,您可以只将新值添加到 Splunk

中(请参阅 INSERT INTO),⽽不必担⼼删

除旧值,因为 Splunk 会始终⾸先返回最新的

结果。其次,在检索时,您可以始终去除重复

结果,以确保只使⽤最新值(请参阅 SELECT

DISTINCT)。最后,您实际上可以删除旧记

录(请参阅 DELETE)。

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值