GBase 8s OLAP 函数之分片函数
GBase 8s GDCA 认证课程在《07.GBase 8s 内置函数》教材中提及窗口函数。窗口函数也称为OLAP函数。OLAP是OnLine Analytical Processing的简称,意思是对数据库数据进行实时分析处理。例如,市场分析、创建财务报表、创建计划等日常性商务工作。窗口函数就是为了实现 OLAP 而添加的标准 SQL 功能。
OLAP 函数可以针对一个结果集分组,组内再进行特定行数据的选择、对比、聚合等操作,每组数据集就是一个窗口,而且这个过程 SQL 是不需要子查询结构。本片文章介绍分片函数。这是GBase 8s GDCA 认证学员在项目中遇到的一个需求:“gbase怎么获取前10%数据”。实质是数据抽样。
SQL Server 可以这样实现:SELECT * FROM students TABLESAMPLE (10 PERCENT);
MySQL 使用一般 SQL,可能你有这样设计:SELECT * FROM students ORDER BY score DESC LIMIT (SELECT COUNT(*) * 0.1 FROM students);
8s 没有 抽样函数 TABLESAMPLE,MySQL 的方案在 8s 中不支持 limit 后面的子查询,因为这种方案影响数据库性能的。
8s 的方案:select * from(
比如:SELECT year, month, value, ntile(10) over(ORDER BY 1) as tile
FROM fact)as T
where tile=1
ntile 是分片函数,over 是开窗函数。over 后面是没有分区,就是整个结果集就是一个窗口,排序规则是随机的。SELECT year, month, value, ntile(10) over(ORDER BY 1) as tile from fact 将 fact 表分隔为 10 片数据。最外层的 select 取分片号是 1 的即可得到 10% 的抽样数据。应用程序中可以针对 title 生成 1 ~ 10 的随机数,则 tile 可以为 1 ~ 10 的任意证书,从而随机获得数据集的 10% 的抽样数据。
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526