继续介绍几个序列函数:
NTILE,ROW_NUMBER,RANK和DENSE_RANK
环境信息:
Hive版本为apache-hive-0.14.0-bin
Hadoop版本为hadoop-2.6.0
Tez版本为tez-0.7.0
数据:
P088888888888,2016-02-10,1
P088888888888,2016-02-11,3
P088888888888,2016-02-12,1
P088888888888,2016-02-13,9
P088888888888,2016-02-14,3
P088888888888,2016-02-15,12
P088888888888,2016-02-16,3
P066666666666,2016-02-10,6
P066666666666,2016-02-11,2
P066666666666,2016-02-12,1
P066666666666,2016-02-13,9
P066666666666,2016-02-14,2
P066666666666,2016-02-15,20
P066666666666,2016-02-16,2
导入数据到Hive表中:
load data localinpath '/home/hadoop/testhivedata/windows_func.txt' overwrite into tablewindows_func
NTILE
NTILE(n),用于将分组数据按照顺序切分成n片,返回当前切片值
NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY polno ORDER BY createtime ROWSBETWEEN 3 PRECEDING AND CURRENT ROW)如果切片不均匀,默认增加第一个切片的分布。
SELECT
polno,
createtime,
pnum,
NTILE(2) OVER(PARTITION BY polno ORDER BY createtime) AS rn1,--分组内将数据分成2片
NTILE(3) OVER(PARTITION BY polno ORDER BY createtime) AS rn2, --分组内将数据分成3片
NTILE(4) OVER(ORDER BY createtime) AS rn3 --将所有数据分成4片
FROM windows_func ORDER BY polno,createtime
在数据拆分有原有的一个单库多表关联查询 *** 作,往往会转变为一个跨库的join查询 *** 作,而现在的针对mysql的daas方案很难真正的支撑到这种类型的 *** 作,即使能够支持估计也很难真正达到一个高性能。在我们原来的设想中这些问题都简单的转化为应用层去解决,这务必是增加了一个应用层开发的复杂度和难度。而针对这种情况最好的方法是构建一个统一的领域服务层来解决,即最终的上层或顶层是关注的领域服务能力,虽然跨库的问题在DaaS层很难解决,但是在领域服务层却比较容易定制开发相应的服务来解决。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)