在昨天的文章中,我们讲述了如何使用Python来访问Java程序,在今天我们继续聊聊脚本的知识。最近由于业务的需要,给数据运维人员搞了个先进的数据查询引擎-Infobright,有关infobright的鼎鼎大名早已经是如雷贯耳,数据压缩上确实很牛叉,可以参考《Infobright数据仓库搭建》和《Infobright的数据类型以及优化相关》。这几篇都跟mysql优化类似,但是略有不同还是注意的好,为了更好的优化效果,比如我在创建数据库表的时候就把原来的Varchar类型的字段创建成了Char,因为varchar的效率很低。
数据引擎搭建起来了,接下来我们需要自动的把数据加载到我们的数据库,由于众所周知的原因,目前社区办的ICE只支持load加载数据,所以我们得把我们的日志文件先处理成Infobright能够接受的类型,比如常见的csv格式。然后使用脚本自动的把我们的结果数据搞到数据库里面就可以了。
第一个脚本,完成日志目录的创建,日志合并,日志处理
#!/bin/sh
export LOG_DIR=/data1/remote-log-server/log/
today=`date "+%Y-%m-%d"`
yestoday=`date -d '1 days ago' "+%Y-%m-%d"`
GameLoginPath=$LOG_DIR/gamelogin/$today
#merge yesterday log
/bin/cat $LOG_DIR/gamelogin/$yestoday/gamelogin.log.* > $LOG_DIR/gamelogin/$yestoday/gamelogin.log
#use python script deal with access log to infobright data format
/usr/bin/python /data1/weige/python/gamelogin_weige.py $yestoday 99
#auto load data which can be accepted by infobright engine
/bin/sh /data1/remote-log-server/update_data_to_db.sh $yestoday
#create today log dir
if [ ! -d "$GameLoginPath" ]; then
/bin/mkdir -p "$GameLoginPath"
fi
接下来的章节,我们将详细分拆解释我们这个脚本中间运行的这三个脚本,同时进一步对resin容器进行优化。
以前工作中会有比较多的SQL,但一直没有总结~ 很多都忘记了…在此做个笔记备忘
查询当前节点以及所有的下一节点的ID
表结构:
Field Type Collation Null Key Default Extra Privileges Comment
——— —————- ————— —— —— ——- ————– ——————————- ——-
id int(10) unsigned (NULL) NO PRI (NULL) auto_increment select,insert,update,references
parent_id int(10) unsigned (NULL) YES (NULL) select,insert,update,references
name varchar(255) utf8_general_ci YES (NULL) select,insert,update,references
form_id int(11) (NULL) YES (NULL) select,insert,update,references
path varchar(255) utf8_general_ci YES (NULL) select,insert,update,references
- select a.*,group_concat(b.id) as next from category a left join category b on a.id=b.parent_id group by a.id

查询每个分类的前N条记录
早上朋友从CSDN上介绍我看的一个帖子~ 很巧妙的解决办法~ 本来我打算用子查询limit来做…可是MYSQL不支持子查询使用limit 再仔细看这位高人的解决办法~ 确实赞~
mysql> -- -------------------------------
mysql> -- Author: liangCK
mysql> -- -------------------------------
mysql>
mysql> -- > 生成测试数据: @T
mysql> DROP TABLE IF EXISTS tb ;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE tb(录象文件编号 INT,录象文件级别 INT,录象文件时间 TIME);
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO tb
-> SELECT 1,1,'12:00:01' UNION ALL
-> SELECT 2,1,'12:00:02' UNION ALL
-> SELECT 3,1,'12:00:03' UNION ALL
-> SELECT 4,2,'12:00:01' UNION ALL
-> SELECT 5,2,'12:00:02' UNION ALL
-> SELECT 6,2,'12:00:03' UNION ALL
-> SELECT 7,3,'12:00:01' UNION ALL
-> SELECT 8,3,'12:00:02' UNION ALL
-> SELECT 9,3,'12:00:03';
Query OK, 9 rows affected (0.09 sec)
Records: 9 Duplicates: 0 Warnings: 0
mysql>
mysql> -- SQL查询如下:
mysql>
mysql> SELECT *
-> FROM tb AS A
-> WHERE 2>(SELECT COUNT(*) FROM tb
-> WHERE A.录象文件级别=录象文件级别
->; AND 录象文件时间