1. 概述
本文来介绍 SparkSQL 中的一些常用操作符合语法。
2. 常用操作符
操作符 | 含义 | 详情 |
---|---|---|
= | 等值比较 | A=B。如果表达式 A 与表达式 B 相等,则为TRUE;否则为 FALSE 在 FineDataLink 中可以用 数据过滤 实现 |
<> | 不等值比较 | A <> B。如果表达式 A 为 NULL,或者表达式 B 为 NULL,返回 NULL;如果表达式 A 与 表达式 B 不相等,则为 TRUE;否则为 FALSE 在 FineDataLink 中可以用 数据过滤 实现 |
< | 小于 | A < B。 如果表达式 A 为 NULL,或者表达式 B 为 NULL,返回 NULL;如果表达式 A 小 于表达式 B,则为 TRUE;否则为 FALSE 在 FineDataLink 中可以用 数据过滤 实现 |
<= | 小于等于 | A <= B。如果表达式 A 为 NULL,或者表达式 B 为 NULL,返回 NULL;如果表达式 A 小 于或者等于表达式 B,则为 TRUE;否则为 FALSE 在 FineDataLink 中可以用 数据过滤 实现 |
>= | 大于等于 | A >= B。如果表达式 A 为 NULL,或者表达式 B 为 NULL,返回 NULL;如果表达式 A 大 于或者等于表达式 B,则为 TRUE;否则为 FALSE 在 FineDataLink 中可以用 数据过滤 实现 |
IS NULL | 空值判断 | A IS NULL。如果表达式 A 的值为 NULL,则为 TRUE;否则为 FALSE 在 FineDataLink 中可以用 数据过滤 实现 |
IS NOT NULL | 非空值判断 | A IS NOT NULL。 如果表达式 A 的值为 NULL,则为 FALSE;否则为TRUE 在 FineDataLink 中可以用 数据过滤 实现 |
LIKE | 模糊匹配 | A[NOT] LIKE B。 如果字符串 A 或者字符串 B 为 NULL,则返回 NULL;如果字符串 A 符 合表达式 B 的正则语法,则为 TRUE;否则为 FALSE。B 中字符”_”表示任意单个字符,而字 符”%”表示任意数量的字符。 FineDataLink 通过更简便的可视化方式实现模糊查询和筛选,提升用户的处理效率。详情参见:字段模糊查询/筛选 |
AND | 逻辑与 | A AND B 如果 A 为 TRUE,B 为 TRUE,则为 TRUE,否则 FALSE。 |
OR | 逻辑或 | A OR B 如果 A,B 至少有一个为 TRUE,则为 TRUE,否则 FALSE |
3. AS-新增列/更改字段名
示例:
新增 type 列,值为测试 。SQL 语句为:select `name` ,'测试' AS type from ab
新增 biaoji 列,数学成绩大于 90 标记为 1,否则标记为 0。SQL 语句为:select `math` ,if(`math` >90,1,0) AS biaoji from ab
推荐您使用更简便的方案:「新增列条件赋值」
若使用需要定义新增列为中文,则需要对列名加 `,例如:select "测试" as `字段`
4. GROUP BY-数据去重
详情参见:数据去重
5. 排序
6. LIMIT-约束返回行数
示例:select * from DB表输入 limit 3
7. BETWEEN ... AND-约束返回行数
注:BETWEEN ... AND 用于行区间选择的前提是有自增序列号的时候。
说明:会选取介于两个值之间的数据范围,可用于对有序列号的数据集进行 行区间选择。
示例:
select * FROM
DB表输入
where `产品id` between 2 and 3
8. 表连接和联合
LEFT JION(左连接)
LEFT OUTER JION(左外连接)
LEFT SEMI JOIN(左半连接)
INNER JOIN 或 JOIN
RIGHT JION(右连接)
RIGHT OUTER JION(右外连接)
FULL JOIN(全连接)
FULL OUTER JOIN(全外连接)
UNION
UNION ALL 联合
详情参见:表连接与联合
9. HAVING-分组后条件筛选
根据 Having 关键字后面指定的筛选条件,将分组后不满足条件的记录筛选掉。
示例:
select `产品id` FROM
DB表输入
group by `产品id` having `产品id` > 400
10. PIVOT-行转列
推荐您直接使用行转列算子。
11. Stack-列转行
推荐您直接使用列转行算子。
12. to_json、struct函数
4.1.6.4 及之后版本,支持 to_json、struct 函数。
to_json 函数与 JSON 生成算子区别
JSON生成 算子可以将一个二维表转换为一个 json 对象,或者将一个二维表转换为多行单列的二维表(每行都是json对象),但无法构建一个有普通文本+json对象+json数组的二维表;to_json 函数更加灵活。
JSON生成 算子可与 API 输出 算子配合,先将数据生成 JSON 格式,再输出到 API ;to_json 函数可用来构建 MongoDB、简道云输出 的 json 字段。
to_json 函数
可将数据转换为 json 格式的字符串。
「Spark SQL」算子中输入语句 | 结果 |
---|---|
SELECT to_json(named_struct('a', 1, 'b', 2)); | {"a":1,"b":2} |
SELECT to_json(map('a', named_struct('b', 1))); | {"a":{"b":1}} |
SELECT to_json(array(map('a', 1))); | [{"a":1}] |
将文本转为 json 数组: SELECT to_json(split('a,b,c', ',')) AS jsonArray | ["a", "b", "c"] |
struct 函数
用于将多个列或字段组合成一个结构化的数据对象。
示例一:将二维表的多个字段拼成一个 json 对象
示例二:通过struct、to_json、collect_list、concat_ws、concat、group by,可以将一个二维表的多个字段拼成一个 json 对象数组。具体情况参见:MongoDB输出