在Manange>External Databases下点击NEW进入到"ADD new database"面板,选择MYSQL数据库,将数据库地址,服务端口(3306),数据库名称,用户名和密码!
子查询优化策略
对于不同类型的子查询,优化器会选择不同的策略。
1. 对于 IN、=ANY 子查询,优化器有如下策略选择:
semijoin
Materialization
exists
2. 对于 NOT IN、<>ALL 子查询,优化器有如下策略选择:
Materialization
exists
3. 对于 derived 派生表,优化器有如下策略选择:
derived_merge,将派生表合并到外部查询中(5.7 引入 );
将派生表物化为内部临时表,再用于外部查询。
注意:update 和 delete 语句中子查询不能使用 semijoin、materialization 优化策略
Splunk DB Connect安装与其他SplunkApp有点不同,它需要java环境才可以跑起来,对于MSSQL,HyperSQL可以直接连接,但对于MYSQL和Oracle
JDBC则需要下载相应的drivers,下载地址:
MYSQL:
http://dev.mysql.com/downloads/connector/j/
The archive contains the JDBC driver: mysql-connector-java-*-bin.jar
Oracle JDBC:
ojdbc6.jar from http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-111060-084321.html
需要将下载的jar文件放在 $SPLUNK_HOME/etc/apps/dbx/bin/lib 目录下.
在Splunk
DB Connect configuration里设置本机的JAVA环境:
环境设置完成后既可添加数据库,本实例以MYSQL数据库为例.在Manange>External Databases下点击NEW进入到"ADD new database"面板,选择MYSQL数据库,将数据库地址,服务端口(3306),数据库名称,用户名和密码:
DB
info功能是可以查看以连接的数据库中各个表的结构信息,使用方法也是极其简单,找到选择的表,点击一下就可以看到此表的各种详细信息,包括各个字段,类型,长度等等,具体信息如下图:
而DB query也正如其字面意思,就是运行一句sql语句:
以上都是一些小功能,而其导入database中的各个表的数据才是核心功能.首先提供了两种方式来export
data,dump方式和tail方式,两种方式都可以以选择整张表或运行sql语句的方式来export.
dump方式即为一次性的将表的内容全部export出来,然后索引到splunk中.如下图.
tail方式类似于linux的tail -f命令,即为对特定表内的数据进行追加索引,这样可以时时同步splunk与database内的数据.导入方法与dump方式类似,只是在指定sql语句时,对于where的条件要确定
database内的数据在索引后,字段的名字也会自动按sql语句或是表的字段名提取出来,非常的方便
以下是一些个人的使用心得:
1.对于数据库内存储的时间戳,最好使用FROM_UNIXTIME换成日期格式这样对于一次性dump的数据可以按时间排列,暂时未找到数据在export时使用一个字段的时间作为_time.
2.我在export中,发现对于表内记录一些使用整数来记录stats字段时对于非bool型字段,针对0和1,在export到splunk时该字段全部都被认作了false/true,解决办法为使用cast函数把该数值转换成字符型,例如cast(
`statsitem` AS char ) AS statsitem.
3.Splunk
DB Connect是可以lookup字段的,不过我比较爱偷懒,在sql语句内用了两个inner
join来直接lookup字段,虽然流程,数据正确性都没问题,但悲剧的是,由于这两个inner join
对于一个70w数据的表的tail导入,不到6个小时就成功的将database拖垮掉-_-!.所以老老实实去用lookup吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)