历史版本4 :SparkSQL语法概述 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

本文介绍常用的 Spark SQL 语法。

注:Spark SQL 算子具体用法请参见:Spark SQL算子

2. 原始数据表编辑

原始数表如下图所示:

1648780022367286.png

示例表下载:示例.xls

ETL 任务设计界面如下图所示:

DB 表输入算子配置界面:

3.png

Spark SQL 算子配置界面:

注:「Spark SQL」算子中,表名为上游节点的名称;本文示例中,在「Spark SQL」中写 SQL 语句时,表名为 ab 。

4.png

3. 常用语法编辑

3.1 group by分组

注:尽量避免使用 DISTINCT 进行排重,特别是大表操作,用 GROUP BY 代替。 

示例:select id from ab group by id

结果如下图所示:

1648718400171534.png

3.2 sum

sum(col):对指定列求和(包含重复值)。 

sum(DISTINCT col):对指定列求和(不包含重复值)。 

示例 1:select id,sum(math) from ab group by id 

示例 2:select id,sum(distinct math) from ab group by id 

结果如下图所示:

1648780249403502.png

3.3 count

个数统计。

count(*):统计检索出的行的个数,包括 NULL 值的行。

count(expr):返回指定字段 expr 的非空值的个数。 

count(DISTINCT expr[, expr_.]):返回 expr 是唯一的且非 NULL 的行的数量。 

示例 1:select count(*) from ab 

示例 2:select count(english) from ab

示例 3:select count(distinct english) from ab

结果如下图所示:

1648776545114172.png

3.4 max

注:数值类型的数据才能使用 max ,所以本节示例需把 math 列改为 int 类型。

max(col):返回指定列的最大值。 

示例:select max(math)  from ab

1648780475420871.png

3.5 min

注:数值类型的数据才能使用 min ,所以本节示例需把 math 列改为 int 类型。

min(col):返回指定列的最小值。 

示例:select min(math) from ab

结果如下图所示:

1648780554702328.png

3.6 union

注:本节只讲 union 语法的使用,ETL 任务完整设计请参见:Spark SQL算子

用于合并两个或多个 SELECT 语句的结果集。

UNION:会去除完全重复的。如果不为了去除重复行,建议使用 UNION ALL,并且效率会更高。

示例: SELECT `name`  FROM a1 UNION SELECT `name`  FROM a2

UNION ALL :对查询的数据集取并集,不会去除重复行。

示例: SELECT `name`  FROM a1 UNION ALL SELECT `name`  FROM a2

3.6.1 数据准备

本节不用本文第二章的表,所使用的表数据如下所示:

1648781783108724.png

示例表数据下载:a1.xlsa2.xls

3.6.2 设计界面

1)新建任务,将一个数据转换节点拖到设计界面。

拖入两个DB表输入算子,重命名为 a1,a2,使用 SQL 与筛选出表a1,a2的全部数据:select * from a1select * from a2

再拖入Spark SQL 算子,与两个DB表输入算子连线。如下图所示:

14.png

2)Spark SQL 算子的 SQL 语句为:SELECT `name`  FROM a1 UNION SELECT `name`  FROM a2 ,效果如下图所示:

注:语句不能直接复制,a1、a2需点击生成。

1648782314749380.png

Spark SQL 算子的 SQL 语句为:SELECT `name`  FROM a1 UNION ALL SELECT `name`  FROM a2,效果如下图所示:

1648782427121910.png

3.7 新增列

本节提供两种方案。

1)方案一:将某个固定的常量定义为一个新字段

新增 type 列,值为测试 。SQL 语句为:select `name` ,'测试' AS type from ab

结果如下图所示:

1648800317352352.png

2)方案二:利用已有字段通过数学计算方式增加一个字段

新增 biaoji 列,数学成绩大于 90 标记为 1,否则标记为 0。SQL 语句为:select `math` ,if(`math` >90,1,0)  AS biaoji from ab

1648864678640303.png

3.8 行转列

详情请参见:Spark SQL算子