添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Spark SQL和Hive中的函数(一):字符串函数

本系列文章主要介绍Spark SQL/Hive中常用的函数,主要分为字符串函数、JSON函数、时间函数、开窗函数以及在编写Spark SQL代码应用时实用的函数算子五个模块。

1. concat

对字符串进行拼接:concat(str1, str2, ..., strN) ,参数:str1、str2...是要进行拼接的字符串。

-- return the concatenation of str1、str2、..., strN
-- SparkSQL
select concat('Spark', 'SQL');

2. concat_ws

在拼接的字符串中间添加某种分隔符:concat_ws(sep, [str | array(str)]+)。

参数1:分隔符,如 - ;参数2:要拼接的字符串(可多个)

-- return the concatenation of the strings separated by sep
-- Spark-SQL
select concat_ws("-", "Spark", "SQL");

3. encode

设置编码格式:encode(str, charset)。

参数1:要进行编码的字符串 ;参数2:使用的编码格式,如UTF-8

-- encode the first argument using the second argument character set
select encode("HIVE", "UTF-8");

4. decode

转码:decode(bin, charset)。

参数1:进行转码的binary ;参数2:使用的转码格式,如UTF-8

-- decode the first argument using the second argument character set
select decode(encode("HIVE", "UTF-8"), "UTF-8");

5. format_string / printf

格式化字符串:format_string(strfmt, obj, ...)

-- returns a formatted string from printf-style format strings
select format_string("Spark SQL %d %s", 100, "days");

6. initcap / lower / upper

initcap:将每个单词的首字母转为大写,其他字母小写。单词之间以空白分隔。

upper:全部转为大写。

lower:全部转为小写。

-- Spark Sql
select initcap("spaRk sql");
-- SPARK SQL
select upper("sPark sql");
-- spark sql
select lower("Spark Sql");

7. length

返回字符串的长度。

-- 返回4
select length("Hive");

8. lpad / rpad

返回固定长度的字符串,如果长度不够,用某种字符进行补全。

lpad(str, len, pad):左补全

rpad(str, len, pad):右补全

注意:如果参数str的长度大于参数len,则返回的结果长度会被截取为长度为len的字符串

-- vehi
select lpad("hi", 4, "ve");
-- hive
select rpad("hi", 4, "ve");
-- spar
select lpad("spark", 4, "ve");

9. trim / ltrim / rtrim

去除空格或者某种字符。

trim(str) / trim(trimStr, str):首尾去除。

ltrim(str) / ltrim(trimStr, str):左去除。

rtrim(str) / rtrim(trimStr, str):右去除。

-- hive
select trim(" hive ");
-- arkSQLS
SELECT ltrim("Sp", "SSparkSQLS") as tmp;

10. regexp_extract

正则提取某些字符串

-- 2000
select regexp_extract("1000-2000", "(\\d+)-(\\d+)", 2);

11. regexp_replace

正则替换

-- r-r
select regexp_replace("100-200", "(\\d+)", "r");

12. repeat

repeat(str, n):复制给定的字符串n次

-- aa
select repeat("a", 2);

13. instr / locate

返回截取字符串的位置。如果匹配的字符串不存在,则返回0

-- returns the (1-based) index of the first occurrence of substr in str.

-- 6
select instr("SparkSQL", "SQL");
select locate("A", "fruit");

14. space

在字符串前面加n个空格

select concat(space(2), "A");

15. split

split(str, regex):以某字符拆分字符串 split(str, regex)

-- ["one","two"]
select split("one two", " ");

16. substr / substring_index

-- k SQL
select substr("Spark SQL", 5);
-- 从后面开始截取,返回SQL
select substr("Spark SQL", -3);