Spark SQL语法

  • Last update:  2022-06-28
  • 1. 概述

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

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

    2. 原始数据表

    原始数表如下图所示:

    示例表下载:示例.xls

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

    DB 表输入算子配置界面:

    Spark SQL 算子配置界面:

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

    3. 常用语法

    3.1 group by分组

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

    示例:select id from ab group by id

    结果如下图所示:

    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 

    结果如下图所示:

    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

    结果如下图所示:

    3.4 max

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

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

    示例:select max(math)  from ab

    3.5 min

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

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

    示例:select min(math) from ab

    结果如下图所示:

    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 数据准备

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

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

    3.6.2 设计界面

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

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

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

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

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

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

    3.7 新增列

    本节提供两种方案。

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

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

    结果如下图所示:

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

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

    3.8 行转列

    详情请参见:Spark SQL算子


    Attachment List


    Theme: 数据开发
    前の記事
    次の記事
    • いいね
    • 良くない
    • 閲覧しただけ

    フィードバック

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    反馈已提交

    网络繁忙