字段英文名 | 字段中文名 |
---|---|
usernum | 手机号 |
cp | 分区日期,格式如:yyyyMMdd00 |
假设我们现在每天都要定时执行包含这样一条SQL的demo,统计1周的用户数(需对手机号进行去重),我们这里仅列以下3种写法:
第一种写法:
select count(t.usernum)
from (select usernum
from tb_test
where cp <= 2020040500
and cp >= 2020033000
group by usernum) t;
第二种写法:
select count(t.usernum)
from (select usernum
from tb_test
where cp <= 2020040500
and cp >=
from_unixtime((unix_timestamp('2020040500', 'yyyyMMddHH') -
6 * 24 * 60 * 60),
'yyyyMMddHH')
group by usernum) t;
第三种写法:
select count(t.usernum)
from (select usernum
from tb_test
where cp <= 2020040500
and cp >= concat(substr(date_add('2020-04-05', -6), 0, 4),
substr(date_add('2020-04-05', -6), 6, 2),
substr(date_add('2020-04-05', -6), 9, 2),
'00')
group by usernum) t;
对于第一种写法,想必小伙伴们都知道,这样查询时是不会扫描hive表所有的分区的,查询速度也比较快。但是对于第2种写法,我们就要注意了,该方法经过测试发现,是会扫描所有分区,所以当你查询的时间段之外的分区对应的hdfs文件有损坏或空文件时,将会报code2错误(具体位置大家可以去yarn界面查看)。但是,对于第三种写法则不会出现全表扫描情况,查询效果和第一种类似。如有问题,欢迎关注公众号后留言,谢谢!、
阅读本文的人还看了:
Spark2.2.0源码分析之通信框架
语音识别(LSTM+CTC)
大数据hive利器
BP神经网络
初识TensorFlow
GAN模型生成手写字
用TensorFlow教你做手写字识别(准确率94.09%)
OpenCV+TensorFlow实现自定义手写图像识别
深度学习(Deep Learning)资料大全(不断更新)
Storm环境搭建(分布式集群)