1. 概述
在进行数据处理时,经常需要对数据进行排序,本文来介绍如何在 FineDataLink 中使用 Spark SQL 进行排序。
2. 全局排序
使用「Spark SQL」 中的 Order by 语句对查询结果集执行一个全局排序,对于大数据量的数据集,这个过程将消耗很大的时间来执行。
desc:降序。
asc:升序。
示例 1:将 NEW_SALESDETAIL 数据中的销售额按照升序排列。
select * from
NEW_SALESDETAIL
order by `销售额` ASC
注:表名为上游节点的名称;语句不能直接复制,例如「NEW_SALESDETAIL 」需点击输入源生成。
预览数据即可看到升序排列的数据,如下图所示:
示例 2:将 NEW_SALESDETAIL 数据中的销售额按照降序排列。
select * from
NEW_SALESDETAIL
order by `销售额` DESC
注:表名为上游节点的名称;语句不能直接复制,例如「NEW_SALESDETAIL 」需点击输入源生成。
预览即可看到降序排列的数据,如下图所示:
3. 局部排序
3.1 SORT BY 和 DISTRIBUTE BY
局部排序一般需要 SORT BY 和 DISTRIBUTE BY 结合使用。
SORT BY 执行局部排序,每个数据是有序的,但是不能保证所有的数据是有序的,除非只有一个组别,好处是执行了局部排序之后可以为接下去的全局排序提高不少的效率。
ditribute by 是按照组别形式进行排序。ditribute by 的功能有点类似 group by。
示例:将 NEW_SALESDETAIL 数据中的销售额按照店号分组进行升序排列。
select * from
NEW_SALESDETAIL
distribute by `店号` sort by `店号`,`销售额` ASC
店号升序排列,销售额按照店号组内升序排列,结果如下图所示:
3.2 CLUSTER BY
cluster by 的功能就是 distribute by 和 sort by 相结合。
示例 1:
select * from
NEW_SALESDETAIL
distribute by `店号` sort by `店号` ASC
示例 2:
select * from
NEW_SALESDETAIL
cluster by `店号`
注:示例 1 和示例 2 的 SQL 语句是等价的,它们返回的结果集也是一样的。
结果即升序排列店号,如下图所示: