1. 概述编辑
1.1 版本
FineDataLink 版本 | 功能变更 |
---|---|
3.6.2 | 数据转换节点 新增算子「Spark SQL」算子,可实现较灵活的数据转换功能 |
4.0.17 |
|
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 | 新增列/更改字段名 | 示例:
推荐您使用更简便的方案:「新增列条件赋值」 |
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 字符串。
2)unbase64(expr):以二进制形式返回已解码的 base64 字符串。
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 |
示例:
本文第六节中获取了timestamp、nonce 两个值,签名 sign 为 email 、open_api_token、timestamp、nonce、sign_version 共同组合生成 sign=SHA256(email&open_api_token×tamp&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(expr1, expr2, ..., 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) |