一、曝光pv ,uv 点击pv , uv
1) PV访问量(Page View),即页面访问量,每打开一次页面PV计数+1,刷新页面也是。
2) UV访问数(UniqueVisitor)指独立访客访问数,一台电脑终端为一个访客。
3) 点击pv 和uv 是一定要有先曝光,才能有点击,所以,要用hive做个连接,并且,在计算点击一天的点击pv和uv时,曝光表连接点击表时,点击表的时间应向后延长一小时,防止有人在11:59近打开网页而没有点击,以防很得点击的pv、uv值偏小。
二、SHELL syntax error:unexpected end of file(window下编辑的脚本在Linux/unix下无法直接运行)
当自己在本地新建一个脚本文件时,上传到Linux下,然后执行时,发现一个错误。
解决思路: DOS下文件和Linux下文件格式差异问题导致的。
DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。
【在windows里,换行用的两个符号,回车\r,换行符号\n,在linux下只需一个符号\n就可以了.】
【解决方案:】
使用下面的命令将文件格式设置为unix格式即可解决上述错误。
vi M.txt
:set fileformat=unix
:wq
三、sql语句执行顺序,最近都在写 HQL~~,呜。。。
SQL Select语句完整的执行顺序:
(8) select
(9) distinct
(11) top 1
(6) Table1.id,COUNT(Table1.name)asnameCount
(1) from Table1
(3) inner join Table2
(2) on Table1.id=Table2.id
(4) where Table1.id<4
(5) group by Table1.id
(7) having Table1.id<3
(10) order by Table1.id desc
1、 from子句组装来自不同数据源的数据;
2、 on 和join
3、where子句基于指定的条件对记录行进行筛选;
4、group by子句将数据划分为多个分组;
5、使用聚集函数进行计算;
6、使用having子句筛选分组;
7、计算所有的表达式;
8、select 集合输出。
9、使用order by对结果集进行排序。
-----------------------------------------------------------------------------------------
红色序号给出了执行的顺序:
(1)from:对Table1和Table2执行笛卡尔积,也就是两个表的行的各种组合,共5*5=25行,生成虚拟表VT1
(2)on:选择VT1中的那些Table1.id=Table2.id的所有行,生成虚拟表VT2。
(3)inner join:这里是内部连接,直接就是VT2,如果是outer join,如left join、right join、full join,那么还需要按照外部连接的规则,把VT1中没有匹配的行添加到VT2,生成VT3.
(4)where:选出VT3中Table1.id<4的表格,给虚拟表VT4.
(5)group by:按照Table1.id进行分组。
(6)COUNT:执行聚合函数,选出对应Table1.id的行数,生成的结果给虚拟表VT5
(7)having:选择VT5中Table1.id<3的所有结果,给虚拟表VT6
(8)select:选择VT6中相应的列,给虚拟表VT7
(9)distinct:将VT7中重复的行去除,生成VT8
(10)order by:将VT8的结果按照Table1.id进行排序, 这里没有生成一个新的表VT9 ,而是生成游标VC9。
(11)top:从游标VC9的开始处选择指定的行数,这里是1行,生成虚拟表VT10.
经过上面的过程,最终的SQL语句将VT10返回给用户使用。
附:Group by
1. Group by子句(利用group by子句分组数据,当select语句中使用到组函数和字段一起连用时会用到group by,否则会出现错误)
Group by 把select查询的结果集分成几个小组,这个group by子句可以跟在where后面且在having前面。
Group by子句也会触发排序操作,会按分组字段排序。
SQL优化参考:http://blog.csdn.net/bjyfb/article/details/7901978
3、SQL Select语句完整的执行顺序:
1)、from子句组装来自不同数据源的数据;
2)、where子句基于指定的条件对记录行进行筛选;
3)、group by子句将数据划分为多个分组;
4)、使用聚集函数进行计算;
5)、使用having子句筛选分组;
6)、计算所有的表达式;
7)、使用order by对结果集进行排序。