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

目录:

1. 概述编辑

1.1 版本

FineDataLink 版本功能变更
3.6.2
数据转换节点 新增算子「Spark SQL」算子,可实现较灵活的数据转换功能
4.0.17
  • 「Spark SQL」算子支持使用加密相关函数和变

  • 同时支持作为数据源输入参数或常量

1.2 说明

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

其中「编码函数」、「加密函数」、「签名函数」等常用于进行API加密认证取数,文档示例详情参见:API取数-加密身份验证&按页数取数

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

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

推荐您使用更简便的方案:「新增列条件赋值

group by 
数据去重详情参见:数据去重
Order by全局排序详情参见:数据排序
SORT BY 和 DISTRIBUTE BY局部排序
CLUSTER BY 

LIMIT

约束返回行数

示例:select * from DB表输入 limit 3

 

BETWEEN ... AND

注:BETWEEN ... AND 用于行区间选择的前提是有自增序列号的时候

会选取介于两个值之间的数据范围,可用于对有序列号的数据集进行 行区间选择。 

示例:

select * FROM 

DB表输入

where `产品id`   between 2 and 3

LEFT JION(左连接)

 LEFT OUTER JION(左外连接)

表连接
详情参见:表连接与联合
LEFT SEMI JOIN(左半连接)
INNER JOIN 或 JOIN

RIGHT JION(右连接) 

RIGHT OUTER JION(右外连接)

FULL JOIN(全连接)

FULL OUTER JOIN(全外连接)

UNION

UNION ALL 联合

HAVING分组后条件筛选

根据 Having 关键字后面指定的筛选条件,将分组后不满足条件的记录筛选掉。

示例:

select `产品id`  FROM 

DB表输入

group by `产品id`  having `产品id` > 400

PIVOT行转列推荐您直接使用行转列算子
Stack列转行推荐您直接使用列转行算子

4. 条件函数编辑

详情参见:SparkSQL条件函数

5. base64编码和解码函数编辑

1)base64(expr):转换 expr 为 base 64 字符串。

1686041391114946.png

2)unbase64(expr):以二进制形式返回已解码的 base64 字符串。

1686041360262403.png

6. 环境变量编辑

注1:相关函数默认大写。

注2:如需要引入字符串,字符串不区分单双引号:。

名称FDL的SparkSQL算子内用法SparkSQL是否有内置函数SparkSQL的内置函数用法示例
随机字符串

UUID()

示例:SELECT UUID()

SELECT uuid()

注:不支持改变长度

时间戳(Timestamp)

UNIX_TIMESTAMP()

示例:SELECT UNIX_TIMESTAMP()

SELECT unix_timestamp()

示例:

例如,用户需要使用「沃丰接口」取数,接口鉴权方式需要使用 unix time,nonce 为请求的唯一标识,值是由调用者提供的任意字符串,15分钟内此字符串只能被使用一次;在这里我们使用 SQL 的 uuid 函数生成。因此需要使用上述两个环境变量。

直接将 SparkSQL 作为输入源,输入 SQL 语句:

SELECT	UNIX_TIMESTAMP(now()) AS time_str,	
UUID() AS uuid_str;

即可使用环境变量,取出两个指定的值,如下图所示:

7. 编码函数编辑

注1:相关函数默认大写。

注2:如需要引入字符串,字符串不区分单双引号:。

名称FDL的SparkSQL算子内用法
Base16Encode

BASE16(expr)

示例:SELECT BASE16('FineDataLink')

Base64Encode

BASE64(expr)

示例:SELECT BASE64('FineDataLink')

URLEncode

URLENCODE(expr)

示例:SELECT URLENCODE('FineDataLink')

8. 加密函数编辑

注1:相关函数默认大写。

注2:如需要引入字符串,字符串不区分单双引号:。

名称FDL的SparkSQL算子内用法
MD5

MD5(expr)

示例:SELECT MD5('FineDataLink')

SHA

SHA(expr)

示例:SELECT SHA('FineDataLink')

SHA1

SHA1(expr)

示例:SELECT SHA1('FineDataLink')

SHA2

SHA2(expr, bitLength)

注:bitLength为SHA2的位数,支持SHA-224、SHA-256、SHA-384和 SHA-512,默认为SHA256。

示例:SELECT SHA2('FineDataLink',256)

RSA

RSA(expr,secretKey,keyFormat)

注:secretKey为输入的密钥、格式为base64编码,keyFormat为密钥格式、值为'PKCS1'和'PKCS8'(不区分格式的大小写),本函数返回值格式也为base64编码

示例:SELECT RSA( 'FineDataLink' , 'MIIBCgKCAQEAnLdoA3ba57YHBAenYbLGTcdC48VVvVVDXV6N/W+1FztBRjvNPV1D
MOcIJBrveTlgKug2PCVynaIttaNql6p/+Bm4G41kyZYy7RSaUCaJ3ryjcXsKfClt
nG9vCwbIN+bVchxRzj739zIA1tBHn9v22PhFcEfsSAy2G2EwM4bQ38n2UrMse9wb
LUGT0kzyquwPQs7vriU+1XBkrdssoAqbwgW5yUqxDosYB5h7D1YTW0qKkJ6PPNnL
XbMv2Meyjxq1sbWoF/m8uboaKklqal1ep5UqTp9OFNOaTrVyXY4Gkt7wq3OoNvk9
2cJ1fHz9wnriGo+oNut9gQr1WVjOzRkAwwIDAQAB' , 'PKCS1')

示例:

本文第六节中获取了timestamp、nonce 两个值,签名 sign 为 email 、open_api_token、timestamp、nonce、sign_version 共同组合生成 sign=SHA256(email&open_api_token&timestamp&nonce&sign_version),使用了加密函数。

紧接着本文第六节的算子,新增 SparkSQL 并输入

SELECT SHA2(CONCAT("email&open_api_token",time_str,"&",uuid_str,"&v2") ,256) as sign_str,
time_str,
uuid_str 
from SparkSQL

9. 签名函数编辑

注1:相关函数默认大写。

注2:如需要引入字符串,字符串不区分单双引号:。

名称FDL的SparkSQL算子内用法
HMAC-MD5

HMACMD5(expr,secretKey,format)

其中,secretKey为输入的秘钥,format格式值可选为'HEX'或'BASE64'(不区分格式的大小写)

示例:SELECT HMACMD5( 'FineDataLink' , 'Im a secret key' , 'HEX')


HMAC-SHA1

HMACSHA1(expr,secretKey,format)

其中,secretKey为输入的秘钥,format格式值可选为'HEX'或'BASE64'(不区分格式的大小写)

示例:SELECT HMACSHA1( 'FineDataLink' , 'Im a secret key' , 'HEX')


HMAC-SHA256

HMACSHA256(expr,secretKey,format)

其中,secretKey为输入的秘钥,format格式值可选为'HEX'或'BASE64'(不区分格式的大小写)

示例:SELECT HMACSHA256( 'FineDataLink' , 'Im a secret key' , 'HEX')

10. 字符串处理函数编辑

注1:相关函数默认大写。

注2:如需要引入字符串,字符串不区分单双引号:。

名称FDL的SparkSQL算子内用法
小写转大写

UPPER(expr)

示例:SELECT UPPER('FineDataLink')

大写转小写

LOWER(expr)

示例:SELECT LOWER('FineDataLink')

字符串拼接

CONCAT(expr1expr2, ..., exprN)

示例:SELECT CONCAT('Fine','Data','Link')

左截断

LEFT(expr, len)

示例:SELECT LEFT('FineDataLink',4)

右截断

RIGHT(expr, len)

示例:SELECT RIGHT('FineDataLink',8)

字符串截取

SUBSTR(expr, pos, len)

示例:SELECT SUBSTR('FineDataLink',5,4)