用NTILE函数分组并发处理数据

oracle分析函数之NTILE

 
   NTILE函数对一个数据分区中的有序结果集进行划分,将其分组为各个桶,并为每个小组分配一个唯一的组编号。这个函数在统计分析中是很有用的。例如,如果想移除异常值,你可以将它们分组到顶部或底部的桶中,然后在统计分析的时候将这些值排除。ORACLE 数据库统计信息收集也使用NTILE函数来计算直方图信息边界。在统计学术语中,NTILE函数创建等宽直方图信息。
www.2cto.com  
建表语句:
Sql代码  
create table SMALL_CUSTOMERS(CUSTOMER_ID NUMBER,SUM_ORDERS  NUMBER);       
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 10);       
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 20);       
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 30);       
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 5);       
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 10);       
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 1);   
www.2cto.com  
具体用法:
Sql代码  
select customer_id,  
        sum_orders,  
        ntile(3) over(order by sum_orders) ntile  
   from small_customers t;  

 
      NTILE函数在诸如将总工作量在N个并行的进程中进行划分的实际应用中是很有用的,让我们假设你有3个平行的进程,你可以将工作量划分为3个桶并将每个桶放到一个进程当中。


比如删除一个大表:

1)获取匹配的ROWID列表,可用parallel这个hint提高查询速度
2)把ROWID排序并分组(例如分为16组),可以用NTILE函数分组

3)创建多个JOB(例如16个JOB),根据ROWID分别并行删除对应的组的数据。3800W行大概耗时2-3个小时,当然这和磁盘性能有关。


MPP(大规模并行处理)数据库因其高并发、高效的数据处理能力,在大数据分析领域非常受欢迎。以下是几种常见的MPP数据库系统中可能会使用的SQL函数模板,这些函数有助于数据的快速查询与聚合: ### 1. 聚合计算 ```sql SELECT column_name, COUNT(*) AS total_count, SUM(column_value) as sum_of_values, AVG(column_value) as avg_of_values, MAX(column_value) as max_value, MIN(column_value) as min_value FROM table_name GROUP BY column_name; ``` 此模板用于统计每一组记录的数量,并对指定字段求和、平均值以及查找最大最小值。 ### 2. 窗口函数示例 - 排名/排序 ```sql SELECT *, ROW_NUMBER() OVER (PARTITION BY category ORDER BY sales DESC) rn, /*按类别分组按照销量降序排列*/ RANK() OVER (PARTITION BY category ORDER BY sales DESC), /*排名相同的会有相同位次并且跳过后续位置编号 */ DENSE_RANK()OVER (PARTITION BY category ORDER BY sales DESC), /*密集排名 相同的成绩获得连续的位置号码*/ NTILE(4) OVER (ORDER BY date_column ASC) /*将结果集分为四部分 并标记每个分区对应的数字标识符*/ FROM your_table_name; ``` 窗口函数能够帮助我们轻松地完成诸如“每类产品中最畅销的产品”等问题的回答; ### 3. 分布式连接操作 对于超大表之间的JOIN操作,则需要考虑使用分布式算法来加速这一过程,比如采用`DISTRIBUTED JOIN`的方式来进行两表关联: ```sql EXPLAIN ANALYZE SELECT t1.*,t2.* FROM huge_table_1 t1 DISTRIBUTED JOIN huge_table_2 t2 ON t1.id = t2.ref_id WHERE conditions_here ; ``` 通过这种方式可以有效减少单节点内存压力同时提高整体性能效率。 以上只是简单介绍了三种常用的MPP SQL 函数及语句模式,实际应用当中还需要结合业务需求选择最适合自己的方案和技术栈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值