Impala函数语法
Impala常用函数语法
- Impala是基于Hadoop的一种高性能分布式SQL查询引擎,它支持使用SQL语言对大规模数据进行分析和查询
数学函数
| 函数 | 说明 | 举例 |
|---|---|---|
| ABS(x) | 绝对值函数,返回一个数的绝对值 | SELECT ABS(-10) AS result; |
| CEIL(x) | 向上取整函数,返回大于等于给定数的最小整数 | SELECT CEIL(3.14) AS result; |
| FLOOR(x) | 向下取整函数,返回小于等于给定数的最小整数 | SELECT FLOOR(3.14) AS result; |
| MOD(x,y) | 求余函数,返回两个数相除的余数 | SELECT MOD(10, 3) AS result; |
| POW(x,y) | 幂函数,返回一个数x的指定次幂y | SELECT POW(2, 3) AS result; |
| ROUND(x,y) | 四舍五入函数,返回一个数x的指定精度(y位数,可选,默认为0)的近似值 | SELECT ROUND(3.14159, 2) AS result; |
| SQRT(x) | 平方根函数,返回一个数的平方根 | SELECT SQRT(9) AS result; |
| LOG(x) | 对数函数,返回一个数的对数 | SELECT LOG(100) AS result; |
字符串函数
| 函数 | 说明 | 举例 |
|---|---|---|
| LENGTH(str) | 字符串长度函数,返回一个字符串的长度 | SELECT LENGTH('Hello') AS result; |
| CONCAT(str1,str2,...) | 字符串连接函数,将多个字符串连接成一个字符串 | SELECT CONCAT('Hello', ' ', 'World') AS result; |
| SUBSTRING(str,pos,len) | 子串函数,返回一个字符串的子串,pos是子串的起始位置,len是子串的长度(可选,默认是到字符串末尾) | SELECT SUBSTRING('Hello World', 7, 5) AS result; |
| LOWER(str) | 大写转小写函数,将一个字符串中的大写字母转换为小写字母 | SELECT LOWER('Hello World') AS result; |
| UPPER(str) | 小写转大写函数,将一个字符串中的小写字母转换为大写字母 | SELECT UPPER('Hello World') AS result; |
| REPLACE(str,search_str,replace_str) | 替换函数,将一个字符串中的指定子串替换为另一个子串 | SELECT REPLACE('Hello World', 'World', 'Impala') AS result; |
| TRIM(str) | 去除空格函数,去除一个字符串中的前导和尾随空格 | SELECT SELECT TRIM(' Hello World ') AS result; |
| SPLIT(str,delimiter) | 字符串分割函数,将一个字符串按指定的分隔符分割成多个子串 | SELECT SPLIT('Hello,World', ',')[0] AS result; |
日期和时间函数
| 函数 | 说明 | 举例 |
|---|---|---|
| CURRENT_DATE() | 当前日期函数,返回当前的日期 | SELECT CURRENT_DATE() AS result; |
| CURRENT_TIMESTAMP() | 当前时间函数,返回当前的日期和时间 | SELECT CURRENT_TIMESTAMP() AS result; |
| DATE_FORMAT(date,format) | 日期格式化函数,将一个日期按指定的格式进行格式化 | SELECT CURRENT_TIMESTAMP() AS result; |
| DATE_ADD/DATE_SUB(date,interval unit) | 日期加减函数,将一个日期加上或减去指定的时间间隔 | SELECT DATE_ADD('2022-01-01', INTERVAL 1 MONTH) AS result; |
| DATEDIFF(enddate,startdate) | 日期差函数,返回两个日期之间的天数差 | SELECT DATEDIFF('2022-01-01', '2021-01-01') AS result; |
| UNIX_TIMESTAMP(date) | 日期时间戳函,数将一个日期转换为对应的时间戳 | SELECT UNIX_TIMESTAMP('2022-01-01') AS result; |
条件判断函数
| 函数 | 说明 | 举例 |
|---|---|---|
| IF(condition,true_value,flase_value) | 根据指定的条件进行判断,返回指定条件成立时的值 | SELECT IF(1 > 0, 'true', 'false') AS result; |
| CASE函数 | 根据指定的条件进行判断,返回满足条件的分支对应的值 | SELECT CASE WHEN 1 > 0 THEN 'true' ELSE 'false' END AS result; |
| NULL判断函数 | 判断一个值是否为NULL | SELECT CASE WHEN NULL IS NULL THEN 'true' ELSE 'false' END AS result; |
自定义函数
- Impala还支持自定义函数(User-Defined Functions,简称UDF),允许用户根据自己的需求编写自定义的函数
创建自定义函数
- 创建自定义函数需要编写一个Java或C++程序,并将其编译成动态链接库(DLL)或共享对象
- 以Java为例,首先需要定义一个类,实现Impala的UDF接口,接着编写函数逻辑,即实现UDF接口的evaluate方法
import org.apache.impala.udf.UDF;
public class MyUDF extends UDF {
public String evaluate(String str) {
// 自定义函数逻辑
return str.toUpperCase();
}
}
- 使用Impala提供的UDF编译器将Java代码编译成动态链接库
impala-udf-compiler.sh MyUDF.java
注册自定义函数
- 需要在Impala中执行CREATE FUNCTION语句
CREATE FUNCTION my_udf(STRING) RETURNS STRING
LOCATION '/path/to/my_udf.so' SYMBOL='MyUDF';
使用自定义函数
SELECT my_udf('Hello World') AS result;