OPERATORS
日期函数
| 函数名 | 返回类型 | 描述 |
| add_months(date,integer) |
String |
返回date加上integer个月后的日期。 |
说明与解释:
参数date应该是datetime value,或者可以隐性转换成
DATE类型;参数integer应该是整数型,或者可以隐形转换成整数型。
举例:
SELECT add_months('201501',1) FROM src LIMIT 1;
Result: 201502
| 函数名 | 返回类型 | 描述 |
| extract(date,integer) |
String |
抽取日期类型中的年/月/日 |
说明与解释:
参数date应该是datetime value,或者可以隐性转换成
DATE类型;参数integer应该是整数型,或者可以隐形转换成整数型。
举例:
SELECT EXTRACT(year from '2015-01-15') FROM src LIMIT 1;
Result: 2015
| 函数名 | 返回类型 | 描述 |
| to_unix_timestamp(date[, pattern]) |
BigInt |
把日期格式转化为UNIX时间戳 |
说明与解释:
返回从"1970-01-01 8:00:00"开始,到指定时间为止的秒数。
参数一最好是date类型,也支持其他字符类型;
参数二可选,作用是指定参数一的格式,如'yyyy-MM-dd HH:mm:ss',如果参数二指定的格式和参数一不匹配,则返回null。
举例:
select to_unix_timestamp("2015-01-15",'yyyy-MM-dd') from src limit 1;
Result: 1421251200
| 函数名 | 返回类型 | 描述 |
| unix_timestamp([date[, pattern]]) |
BigInt |
把日期格式转化为UNIX时间戳 |
说明与解释:
返回从"1970-01-01 8:00:00"开始,到指定时间为止的秒数。
如果不加参数,则返回当前系统时间的UNIX时间戳。
参数一最好是date类型,也支持其他字符类型;
参数二可选,作用是指定参数一的格式,如'yyyy-MM-dd HH:mm:ss',如果参数二指定的格式和参数一不匹配,则返回null。
举例:
select unix_timestamp("2015-01-15",'yyyy-MM-dd') from src limit 1;
Result: 1421251200
| 函数名 | 返回类型 | 描述 |
| to_timestamp([date[, pattern]]) |
BigInt |
把日期格式转化为UNIX时间戳 |
说明与解释:
和unix_timestamp用法完全一致
举例:
select to_timestamp("2015-01-15",'yyyy-MM-dd') from src limit 1;
Result: 1421251200
| 函数名 | 返回类型 | 描述 |
| from_unixtime(unix_time[, format]) |
String |
把UNIX时间戳转化为时间格式 |
说明与解释:
参数一是
long类型,或者可以隐性转换成
long类型的UNIX时间戳;
参数二可选,是字符类型,指定了返回的时间格式。当没有参数二时,返回标准的'yyyy-MM-dd HH:mm:ss'时间格式。
举例:
SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss') FROM src LIMIT 1;
Result: 1970-01-01 08:00:00
| 函数名 | 返回类型 | 描述 |
| to_date(date) |
String |
把字符串或者日期字符转化为yyyy-MM-dd的日期格式 |
说明与解释:
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。
举例:
SELECT to_date('2015-01-15 04:17:52') FROM src LIMIT 1;
Result: 2015-01-15
| 函数名 | 返回类型 | 描述 |
| tdh_todate(date[,originformat,targetformat]) |
String |
把字符按照给定的格式,转化为标准日期格式,或者指定格式 |
说明与解释:
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。如果只提供日期一个参数,系统会自动识别yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd格式的字符或日期,然后返回yyyyMMdd格式的日期字符,其他返回NULL。当指定了第二个可选参数(String类型的原始日期格式)时,会根据指定的格式去解析日期,如果格式和日期参数不匹配也返回NULL,建议手动指定第二个参数。第三个可选参数也是String类型,指定返回的日期格式,如yyyy*MM*dd。
举例:
SELECT EXTRACT(year from '2015-01-15') FROM src LIMIT 1;
Result: 2015
| 函数名 | 返回类型 | 描述 |
| day(date) |
Int |
返回指定时间是该月的第几天 |
说明与解释:
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。另外date必须是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则也返回NULL。
举例:
SELECT day('2015-01-15') FROM src LIMIT 1;
Result: 15
| 函数名 | 返回类型 | 描述 |
| dayofmonth(date) |
Int |
返回指定时间是该月的第几天 |
说明与解释:
用法和函数day完全一致。
举例:
SELECT dayofmonth('2015-01-15') FROM src LIMIT 1;
Result: 15
| 函数名 | 返回类型 | 描述 |
| dayofyear(date[,formatt]) |
Int |
返回指定日期是该年的第几天 |
说明与解释:
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。如果只提供日期一个参数,系统会自动识别yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd三种格式的字符或日期,然后返回日期是该年的第几天,其他格式返回NULL。当指定了第二个可选参数(String类型的日期格式)时,会根据指定的格式去解析日期,如果格式和日期参数不匹配也返回NULL,建议手动指定第二个参数。
举例:
SELECT dayofyear('2015|01|15','yyyy|MM|dd') FROM src LIMIT 1;
Result: 166
| 函数名 | 返回类型 | 描述 |
| quater(date[,formatt]) |
Int |
返回指定日期是该年的第几季度 |
说明与解释:
参数date必须是字符类型或者是日期类型、Timestamp类型,否则返回为NULL。如果只提供日期一个参数,系统会自动识别yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd三种格式的字符或日期,然后返回日期是该年的第几季度,其他格式返回NULL。当指定了第二个可选参数(String类型的日期格式)时,会根据指定的格式去解析日期,如果格式和日期参数不匹配也返回NULL,建议手动指定第二个参数。
举例:
SELECT quater('2015|06|15','yyyy|MM|dd') FROM src LIMIT 1;
Result: 2
| 函数名 | 返回类型 | 描述 |
| hour(date) |
Int |
返回指定时间是该日的第几个小时 |
说明与解释:
参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。
举例:
SELECT hour('2015-01-30 22:58:59') FROM src LIMIT 1;
Result: 22
| 函数名 | 返回类型 | 描述 |
| minute(date) |
Int |
返回指定时间是该小时的第多少分钟 |
说明与解释:
参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。
举例:
SELECT minute('2015-01-30 22:58:59') FROM src LIMIT 1;
Result: 58
| 函数名 | 返回类型 | 描述 |
| second(date) |
Int |
返回指定时间是该分钟的第多少秒 |
说明与解释:
参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。
举例:
SELECT second('2015-01-30 22:58:59') FROM src LIMIT 1;
Result: 59
| 函数名 | 返回类型 | 描述 |
| weekofyear(date) |
Int |
返回指定日期是该年的第几周 |
说明与解释:
参数date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。我们把周一作为一周的开始,同时第一个有着4天及以上的周,是第一周。
举例:
SELECT weekofyear('2015-01-15 22:58:59') FROM src LIMIT 1;
Result: 3
| 函数名 | 返回类型 | 描述 |
| datediff(date1, date2) |
Int |
返回两个日期的相差天数 |
说明与解释:
参数date1/date2必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。返回值为正说明date1较晚。
举例:
SELECT datediff('2015-01-15', '2015-02-08') FROM src LIMIT 1;
Result: -24
| 函数名 | 返回类型 | 描述 |
| date_add(start_date, num_days) |
Int |
返回指定时间之后的第num_days天的时间 |
说明与解释:
参数start_date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。参数num_days必须是
Int类型或者可以隐式转化为
Int类型
举例:
SELECT date_add('2015-01-15', 1) FROM src LIMIT 1;
Result: 2015-01-16
| 函数名 | 返回类型 | 描述 |
| date_sub(start_date, num_days) |
Int |
返回指定时间之前的第num_days天的时间 |
说明与解释:
参数start_date必须是字符类型或者是日期类型、Timestamp类型,同时必须是是yyyy-MM-dd或者yyyy-MM-dd HH:MM:SS的格式,否则返回NULL。参数num_days必须是
Int类型或者可以隐式转化为
Int类型
举例:
SELECT date_sub('2015-01-15', 1) FROM src LIMIT 1;
Result: 2015-01-14
| 函数名 | 返回类型 | 描述 |
| date_format(dateText,pattern) |
DATE |
把时间转化为指定的格式 |
说明与解释:
参数date必须是'yyyy-MM-dd HH:mm:ss'的字符或者Date、Timestamp格式,否则返回值为NULL;参数二必须是字符格式,指定了返回日期的格式。
举例:
select date_format('2015-01-15 00:00:00','yyyyMMdd') from src limit 1;
Result: 20150115
| 函数名 | 返回类型 | 描述 |
| str_to_date(dateText,pattern) |
String |
根据指定的格式来解析日期并转化为标准格式 |
说明与解释:
参数date必须是字符或者Date、Timestamp格式,否则返回值为NULL;参数二必须是字符格式,指定了dateText的日期格式。最后返回的是标准的'yyyy-MM-dd HH:mm:ss'格式的时间。
举例:
select str_to_date('2015|01|15','yyyy|MM|dd') from src limit 1;
Result: 2015-01-15 00:00:00
| 函数名 | 返回类型 | 描述 |
| sysdate |
String |
返回当前系统时间 |
说明与解释:
返回的时间是'yyyy-MM-dd HH:mm:ss'格式
举例:
SELECT EXTRACT(year from '2009-30-07') FROM src LIMIT 1;
Result: 2009
关系运算符(13)
<, <=, <=>, <>, =, ==, >, >=, isnull, isnotnull, like, rlike, regexp
| 操作符 | 返回类型 | 描述 |
| A < B |
Boolean |
判断A是否小于B |
说明与解释:
A和B可以为任何基本类型,如果A小于B,则返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。
举例:
select 1 < 2 from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A > B |
Boolean |
判断A是否大于B |
说明与解释:
A和B可以为任何基本类型,如果A大于B,则返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。
举例:
select 1 > 2 from src limit 1;
Result: false
| 操作符 | 返回类型 | 描述 |
| A = B |
Boolean |
判断A是否等于B |
说明与解释:
A和B可以为任何基本类型,如果A与B相等,则返回TRUE,否则返回FALSE。
举例:
select 1 = 1 from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A == B |
Boolean |
判断A是否等于B |
说明与解释:
和 = 用法一致
举例:
select 1 == 1 from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A >= B |
Boolean |
判断A是否大于或者等于B |
说明与解释:
A和B可以为任何基本类型,如果A大于或者等于B,则返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。
举例:
select 1 >= 2 from src limit 1;
Result: false
| 操作符 | 返回类型 | 描述 |
| A <= B |
Boolean |
判断A是否小于或者等于B |
说明与解释:
A和B可以为任何基本类型,如果A小于或者等于B,则返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。
举例:
select 1 <= 2 from src limit 1;
Result: false
| 操作符 | 返回类型 | 描述 |
| A <> B |
Boolean |
判断A是否不等于B |
说明与解释:
A和B可以为任何基本类型,如果A不等于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。
举例:
select 1 <> 2 from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A <=> B |
Boolean |
判断A是否等于B |
说明与解释:
A和B可以为任何基本类型,当A和B都不为null的时候,用法和 "=" 一致, 但是当A和B都为NULL的时候返回true,而A和B只有一个为NULL的时候返回NULL。
举例:
select 1 = 1 from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A IS NULL |
Boolean |
判断A是否为空 |
说明与解释:
A可以为任何基本类型,如果A为空,则返回TRUE,否则返回FALSE。
举例:
select 1 IS NULL from src limit 1;
Result: false
| 操作符 | 返回类型 | 描述 |
| A is not null |
Boolean |
判断A是否等于B |
说明与解释:
A和B可以为任何基本类型,如果A与B相等,则返回TRUE,否则返回FALSE。
举例:
select 1 = 1 from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A like B |
Boolean |
判断A是否满足sql中的模式B |
说明与解释:
如果A或B值为”NULL”,结果返回”NULL”。字符串A与B通过sql进行匹配,如果相符返回TRUE,不符返
回FALSE。B字符串中的”
”代表任一字符,”%”则代表多个任意字符。例如: (‘foobar’ like ‘foo’)返回FALSE,
( ‘foobar’ like ‘foo ’或者 ‘foobar’ like ‘foo%’)则返回TURE
举例:
select 'foobar' like 'foo_' from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A rlike B |
Boolean |
判断A是否符合正则表达式B |
说明与解释:
如果A或B值为”NULL”,结果返回”NULL”。字符串A与B通过java进行匹配,如果相符返回TRUE,不符返
回FALSE。例如:( ‘foobar’ rlike ‘foo’)返回FALSE,(’foobar’rlike ‘^f.
r$’ )返回TRUE。
举例:
select 'foobar' rlike 'foo
' from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A regexp B |
Boolean |
判断A是否符合正则表达式B |
说明与解释:
用法和 "rlike" 完全一致
举例:
select 'foobar' regexp 'foo*' from src limit 1;
Result: true
算术运算符(9)
+, -, *, /, %, &, |, ^, ~
| 操作符 | 返回类型 | 描述 |
| A + B |
A和B的公有类型 |
返回A和B的和 |
说明与解释:
A和B可以为除了Boolean以外,任何基本类型。如果A和B都是Interval,可隐式转化规则为:tinyint->Int->bigint ->Float->Double,也就是说Int和Float的相加结果为Float。另外String和任何Interval相加结果,如果String可以转化为Double类型,则结果是double类型,否则结果为NULL,比如1+'1|1'的结果为NULL,1+'1'的结果则是2.0。
举例:
select 1 + 0.1 from src limit 1;
Result: 1.1
| 操作符 | 返回类型 | 描述 |
| A - B |
A和B的公有类型 |
返回A和B的差 |
说明与解释:
A和B可以为除了Boolean以外,任何基本类型。如果A和B都是Interval,可隐式转化规则为:tinyint->Int->bigint ->Float->Double,也就是说Int和Float的相减结果为Float。另外String和任何Interval相减结果,如果String可以转化为Double类型,则结果是double类型,否则结果为NULL,比如1-'1|1'的结果为NULL,1-'1'的结果则是0.0。
举例:
select 1 - 0.1 from src limit 1;
Result: 0.9
| 操作符 | 返回类型 | 描述 |
| A * B |
A和B的公有类型 |
返回A和B的和 |
说明与解释:
A和B可以为除了Boolean以外,任何基本类型。如果A和B都是Interval,可隐式转化规则为:tinyint->Int->bigint ->Float->Double,也就是说Int和Float的相乘结果为Float。另外String和任何Interval相乘结,如果String可以转化为Double类型,则结果是double类型,否则结果为NULL,比如1 * '1|1'的结果为NULL,1 * '1'的结果则是1.0。需要说明的是,如果乘法造成溢出,将选择更高的类型。
举例:
select 1 * 0.1 from src limit 1;
Result: 0.1
| 操作符 | 返回类型 | 描述 |
| A / B |
A和B的公有类型 |
返回A和B的和 |
说明与解释:
A和B可以为任何数字类型或者字符串类型。如果A和B都是数字类型,则返回double类型。另外字符类型和数字类型相除,字符类型如果可以转化为double类型则结果也是double类型,否则返回NULL。
举例:
select 1 / 1 from src limit 1;
Result: 1.0
| 操作符 | 返回类型 | 描述 |
| A % B |
A和B的公有类型 |
返回A被B除的余数 |
说明与解释:
A和B可以为任何数字类型或者字符串类型。如果A和B都是数字类型,则返回二者的共同类型。如果是字符类型和数字类型,字符类型如果可以转化为double类型则结果也是double类型,否则返回NULL。
举例:
select '10' % 3 from type limit 1;
Result: 1.0
| 操作符 | 返回类型 | 描述 |
| A & B |
A和B的公有类型 |
返回A和B的二进制值的按位与结果 |
说明与解释:
A和B可以为TinyInt,Int,BitInt类型。运算符查看两个参数的二进制表示法的值,并执行按位”与”操作。两个表达式的一位均为1时,则结果的该位为 1。否则,结果
的该位为 0。
举例:
select 1&2 from src limit 1;
Result: 0
| 操作符 | 返回类型 | 描述 |
| A | B |
A和B的公有类型 |
返回A和B的二进制值的按位或结果 |
说明与解释:
A和B可以为TinyInt,Int,BitInt类型。运算符查看两个参数的二进制表示法的值,并执行按位”或”操作。只要任一表达式的一位为 1,则结果的该位为 1。否则,结果的该位为 0。
举例:
select 1|2 from src limit 1;
Result: 3
| 操作符 | 返回类型 | 描述 |
| A ^ B |
A和B的公有类型 |
返回A和B的二进制值的按位或结果 |
说明与解释:
A和B可以为TinyInt,Int,BitInt类型。运算符查看两个参数的二进制表示法的值,并执行按位”异或”操作。当且仅当只有一个表达式的某位上为 1 时,结果的该位才为 1。否则结果的该位为 0。
举例:
select 1^1 from src limit 1;
Result: 0
| 操作符 | 返回类型 | 描述 |
| ~A |
和A类型相同 |
返回把A的二进制表达式按位取反的值 |
说明与解释:
A可以为TinyInt,Int,BitInt类型。对表达式 A 执行按位”非”(取反)。
举例:
select ~1 from src limit 1;
Result: -2
逻辑运算符(8)
AND, OR, |, NOT, !, IN, NOT IN, [NOT] EXISTS
| 操作符 | 返回类型 | 描述 |
| A AND B |
Boolean |
返回A和B逻辑与的结果 |
说明与解释:
A和B必须是Boolean类型,返回二者的逻辑与的结果。即A和B同时正确时,返回TRUE,否则FALSE。如果A或B值为NULL,返回NULL。
举例:
select 1==1 and true from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A OR B |
Boolean |
返回A和B逻辑或的结果 |
说明与解释:
A和B必须是Boolean类型,返回二者的逻辑或的结果。即A或B正确,或两者同时正确返返回TRUE,否则FALSE。如果A和B值同时为NULL,返回NULL。
举例:
select 1==1 or true from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| NOT A |
Boolean |
对A的逻辑布尔值求反 |
说明与解释:
A必须是Boolean类型,如果A为NULL或错误的时候返回TURE,否则返回FALSE。
举例:
select not true from src limit 1;
Result: false
| 操作符 | 返回类型 | 描述 |
| !A |
Boolean |
对A的逻辑布尔值求反 |
说明与解释:
用法和'NOT'一致。
举例:
select !true from src limit 1;
Result: false
| 操作符 | 返回类型 | 描述 |
| A IN (val1, val2, ...) |
Boolean |
判断A是否是指定值中的一个 |
说明与解释:
A可以是除了Boolean之外的所有基本类型。如果A和指定值中的任何一个相等,即返回true,反之返回false。
举例:
select '1' in (1,2,3) from src limit 1;
Result: true
| 操作符 | 返回类型 | 描述 |
| A NOT IN (val1, val2, ...) |
Boolean |
判断A是否不是指定值中的一个 |
说明与解释:
A可以是除了Boolean之外的所有基本类型。如果A和指定值中的任何值都不相等,返回true,反之返回false。
举例:
select '1' not in (1,2,3) from src limit 1;
Result: false
| 操作符 | 返回类型 | 描述 |
| [NOT] EXISTS (subquery) |
Boolean |
判断子查询中是否有结果 |
说明与解释:
只要子查询返回了至少一列的值,返回true,反之返回false。
举例:
select 1 from src s1 where exists (select 1 from src s2 where s1.a=s2.a) limit 1;
Result: 1
复杂类型构造函数(3)
map,struct,named_struct,array
| 操作符 | 返回类型 | 描述 |
| map(key1, value1, key2, value2, …) |
map类型 |
创建键值对 |
说明与解释:
通过指定的键/值对,创建一个map类型。所指定的所有key必须有公共类型,所有的value也必须有公共类型,得到的map的key类型即所有key的公共类型。map(int,string,double,string)得到的类型是map<double,string>,而map(int,string,boolean,string)是不合法的,因为在这里Int和Boolean是没有公共类型的。
举例:
select map(1,2,'3',4) from src limit 1;
Result: {"1":2,"3":4}
| 操作符 | 返回类型 | 描述 |
| struct(val1, val2, val3, …) |
struct类型 |
创建struct结构体 |
说明与解释:
val[1-n]是相同类型的变量,或者是有公共类型的。得到的是val[1-n]的公共类型的struct结构体。
举例:
select struct(1,2,3) from src limit 1;
Result: {"col1":1,"col2":2,"col3":3}
| 操作符 | 返回类型 | 描述 |
| named_struct(name1, val1, name2, val2, ...) |
struct类型 |
创建自定义字段名称的struct结构体 |
说明与解释:
val[1-n]是相同类型的变量,或者是有公共类型的,name[1-n]是字符类型。得到的是以name[1-n]为名字,以val[1-n]为对应值的的struct结构体,每个名字有自己的类型。比如named_struct('name1',1,'name2','1')得到的是
举例:
select named_struct('name1',100,'name2','200') from src limit 1;
Result: {"name1":100,"name2":"200"}
| 操作符 | 返回类型 | 描述 |
| array(val1, val2, …) |
Array类型 |
创建键值对 |
说明与解释:
通过指定的元素,创建一个数组。Array的类型是所有元素的公共类型。
举例:
select array(1,'1',1.1) from src limit 1;
Result: ["1","1","1.1"]
复杂类型操作符(3)
A[n], M[key], S.x
| 操作符 | 返回类型 | 描述 |
| A[n] |
数组的类型 |
返回数组的第n个元素 |
说明与解释:
只要子查询返回了至少一列的值,返回true,反之返回false。
举例:
select array(1,2,3)[0] from src ;
Result: 1
| 操作符 | 返回类型 | 描述 |
| M[key] |
Map元素中的类型 |
返回map中对应key的value |
说明与解释:
返回关键值对应的值,例如mapM为 {‘f’ -> ‘foo’, ‘b’ -> ‘bar’, ‘all’ -> ‘foobar’},则M['all'] 返回’foobar’。
举例:
select map('k1',100,'k2',200)['k1'] from src ;
Result: 100
| 操作符 | 返回类型 | 描述 |
| S.x |
Struct的类型 |
返回Struct的第x个元素 |
说明与解释:
返回结构x字符串在结构S中的存储位置。如 foobar {int foo, int bar} foobar.foo的领域中存储的整数。
举例:
select named_struct('name1',100,'name2','200').name1 from src limit 1;
Result: 100
字符串函数
| 函数名 | 返回类型 | 描述 |
| ascii(A) |
Int |
返回A第一个字符的ascii值 |
说明与解释:
A可以是除了Boolean之外的任何基本类型,返回A第一个字符的ascii值。
举例:
select ascii('20') from src;
Result: 50
| 函数名 | 返回类型 | 描述 |
| base64(A) |
Int |
把binary转化为Base64字符 |
说明与解释:
A可以是除了Boolean之外的任何基本类型,返回A的Base64编码格式的值。
举例:
select base64(binary('1')) from src;
Result: MQ==
| 函数名 | 返回类型 | 描述 |
| concat(a,b,c……) |
String |
合并输入的所有项 |
说明与解释:
A可以是除了Boolean之外的任何基本类型,连接多个字符串,合并为一个字符串,可以接受任意数量的输入字符串,返回字符串类型。
举例:
select concat(1,2,3) from src limit 1;
Result: 123
| 函数名 | 返回类型 | 描述 |
| context_ngrams(array>,
array, int K, intpf) |
String |
返回字符串中的 Top-K 和 N-grams |
说明与解释:
从给定一个字符串上下文中,返回从一组标记的句子的Top-k和n-grams结果。
举例:
SELECT ngrams(sentences(lower(tweet)), 2, 100 [, 1000]) FROM twitter;
| 函数名 | 返回类型 | 描述 |
| concat_ws(string SEP, string A, string
B…) |
String |
以SEP为分隔把A、B……合并起来 |
说明与解释:
所有输入参数都必须是字符类型
举例:
select concat_ws('|','1','2','3') from src;
Result: 1|2|3
| 函数名 | 返回类型 | 描述 |
| encode(A,B) |
Int |
返回A的长度 |
说明与解释:
AB都是字符类型,用B指定的编码格式来对A编码。
举例:
select encode('transwarp','gbk') from src;
Result: transwarp
| 函数名 | 返回类型 | 描述 |
| find_in_set(string str, string strList) |
Int |
返回字符串str第一次在strlist出现的位置 |
说明与解释:
参数str以','分隔。函数返回字符串str第一次在strlist出现的位置。如果任一参数为NULL,返回NULL;如果第一个参数包含逗号,返回0。
举例:
select find_in_set('4','1,2,3,4') from src;
Result: 4
| 函数名 | 返回类型 | 描述 |
| format_number(number,format) |
Double |
返回指定格式的number |
说明与解释:
A必须是数字类型,format必须是Int、TinyInt、BigInt的一种,指定了number的精度。
举例:
select format_number(100,2) from src;
Result: 100.00
| 函数名 | 返回类型 | 描述 |
| get_json_object(string json_string,
string path) |
Int |
从指定地址获取json对象 |
说明与解释:
从指定地址获取json对象。
举例:
select a.timestamp, get_json_object(a.appevents, ‘$.eventid’),
get_json_object(a.appenvets, ‘$.eventname’) from log a;
| 函数名 | 返回类型 | 描述 |
| in_file(str,filepath) |
Boolean |
判断指定字符是否在文件中出现 |
说明与解释:
str为String类型,filepath必须是存在的文件路径。
举例:
select in_file('123','/etc/hosts') from src;
Result: false
| 函数名 | 返回类型 | 描述 |
| instr(string str, string substr) |
Int |
返回substr在str中出现的位置 |
说明与解释:
返回substr在str中出现的位置,不曾出现则返回0。
举例:
select instr('001122','1') from src;
Result: 3
| 函数名 | 返回类型 | 描述 |
| length(A) |
Int |
返回A的长度 |
说明与解释:
A可以是除了Boolean之外的任何基本类型,返回A的长度。
举例:
select length(1.1) from src;
Result: 3
| 函数名 | 返回类型 | 描述 |
| locate(string substr, string str[, int pos]) |
Int |
定位substr第一次在str中出现的位置 |
说明与解释:
如果指定了pos值,则返回从str的第pos个位置之后,第一次出现substr的位置。
举例:
select locate('123','456789123') from src;
Result: 7
| 函数名 | 返回类型 | 描述 |
| lower(string A) |
String |
把A中字母都转化为小写 |
说明与解释:
把A中字母都转化为小写。
举例:
select lower('A') from src;
Result: a
| 函数名 | 返回类型 | 描述 |
| lcase(string A) |
String |
把A中字母都转化为小写 |
说明与解释:
用法和 'lower' 一致。
举例:
select lower('A') from src;
Result: a
| 函数名 | 返回类型 | 描述 |
| lpad(string str, int len, string pad) |
String |
用pad补全字符到指定长度 |
说明与解释:
用pad参数的值,在左方补全str为len长度。如果len的值小于str的长度,则返回从左截取len长度的字符。
举例:
select lpad('123456789',11,'a') from src;
Result: aa123456789
| 函数名 | 返回类型 | 描述 |
| ltrim(string A) |
String |
去掉字符左侧的空格 |
说明与解释:
只去掉字符左侧的空格,返回字符类型。
举例:
select ltrim(' transwarp ') from src limit 1;
Result: 'transwarp '
| 函数名 | 返回类型 | 描述 |
| ngrams(array>, int N, int K, int pf) |
Int |
返回字符序列中的Top-K和N-grams值 |
说明与解释:
返回字符序列中的Top-K和N-grams值。
举例:
SELECT ngrams(sentences(lower(tweet)), 2, 100 [, 1000]) FROM twitter;
| 函数名 | 返回类型 | 描述 |
| parse_url(string urlString, string part |
Int |
返回URL中指定的部分 |
说明与解释:
字符类型的part指定了返回URL的部分,可以是:'HOST', 'PATH', 'QUERY', 'REF', 'PROTOCOL', 'AUTHORITY', 'FILE', and 'USERINFO'中的一个。
举例:
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST') from src limit 1;
Result: facebook.com
| 函数名 | 返回类型 | 描述 |
| printf(String format, Obj... args) |
String |
返回指定输出格式的字符 |
说明与解释:
A可以是除了Boolean之外的任何基本类型,返回A的长度。
举例:
SELECT printf("Hello World %d %s", 100, "days")FROM src LIMIT 1;
Result: Hello World 100 days
| 函数名 | 返回类型 | 描述 |
| regexp_extract(string subject, string pattern, int index) |
String |
返回指定部分的正则表达式 |
说明与解释:
通过下标返回正则表达式指定的部分。
举例:
select regexp_extract('foothebar', 'foo(.*?)(bar)', 0) from src;
Result: the
| 函数名 | 返回类型 | 描述 |
| regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT) |
Int |
替换符合正则表达式的部分 |
说明与解释:
把INITIAL_STRING中符合正则表达式PATTERN的部分替换为REPLACEMENT。
举例:
SELECT regexp_replace('foothebarfoobar', 'foo(.*?)(bar)', 'num') FROM src LIMIT 1;
Result: numnum
| 函数名 | 返回类型 | 描述 |
| repeat(string str, int n) |
String |
返回A的长度 |
说明与解释:
A可以是除了Boolean之外的任何基本类型,返回n个str连在一起的字符串。
举例:
select repeat(1, 10) from src;
Result: 1111111111
| 函数名 | 返回类型 | 描述 |
| reverse(A) |
String |
把字符A转置 |
说明与解释:
返回转置的字符。
举例:
select reverse('transwarp') from src limit 1;
Result: prawsnart
| 函数名 | 返回类型 | 描述 |
| rpad(string str, int len, string pad) |
String |
用pad在右侧补全字符到指定长度 |
说明与解释:
用pad参数的值,在右方补全str为len长度。如果len的值小于str的长度,则返回从右截取len长度的字符。
举例:
select rpad('123456789',11,'a') from src;
Result: 123456789aa
| 函数名 | 返回类型 | 描述 |
| rtrim(string A) |
String |
去掉字符右侧的空格 |
说明与解释:
只去掉字符右侧的空格,返回字符类型。
举例:
select rtrim(' transwarp ') from src limit 1;
Result: 'transwarp '
| 函数名 | 返回类型 | 描述 |
| sentences(str, lang, country) |
Array<Array<String>> |
把自然语言分成句子和词组 |
说明与解释:
给一个包含自然语言句子的字符类型,在合适的位置分词,返回一些包含词组的数组。
举例:
select sentences('Hello there! How are you?') from src limit 1;
Result: [["Hello","there"],["How","are","you"]]
| 函数名 | 返回类型 | 描述 |
| space(int n) |
String |
返回n个空格的字符 |
说明与解释:
返回n个空格的字符。
举例:
select space(5) from src limit 1;
Result: ' '
| 函数名 | 返回类型 | 描述 |
| split(string str, string pat) |
Array<string> |
按指定分隔符分割字符 |
说明与解释:
把字符串str按pat分隔,返回String数组。
举例:
select split('TDH-Inceptor','-') from src;
Result: ["TDH","Inceptor"]
| 函数名 | 返回类型 | 描述 |
| str_to_map(text[, delimiter1, delimiter2]) |
Map |
把字符转化为map |
说明与解释:
第一个分隔符用于分隔不同组的K-V,第二个分隔符用于分隔每一组K-V。
举例:
select str_to_map('a-b=c-d','=','-') from src;
Result: {"a":"b","c":"d"}
| 函数名 | 返回类型 | 描述 |
| substr(string A, int start [, lenth]) |
String |
获取子字符串 |
说明与解释:
返回A从start位置开始的子字符串,若指定length则返回从start开始,长度为length的子字符串。
举例:
select substr('Transwarp',6,3) from src limit 1;
Result: war
| 函数名 | 返回类型 | 描述 |
| substring(string A, int start [, lenth]) |
String |
获取子字符串 |
说明与解释:
用法和 'substr' 一致
举例:
select substring('Transwarp',6,3) from src limit 1;
Result: war
| 函数名 | 返回类型 | 描述 |
| translate(string|char|varchar input, string|char|varchar from, string|char|varchar to) |
String |
用指定字符替换目标 |
说明与解释:
translate方法作用于input string(第一个参数)的字符上,规则为出现在from_string中的字符用to_string中对应位置的字符来替换。如果to_string的长度
比from_string短,那么from_string中多出来的位置的字符会在output中被移除。
举例:
select translate('abcdef', 'adc', '19') from src limit 1;
Result: 1b9ef
| 函数名 | 返回类型 | 描述 |
| trim(string s) |
String |
去掉字符左右的空格 |
说明与解释:
去掉字符左右的空格。
举例:
select trim(' transwarp ') from src limit 1;
Result: 'transwarp'
| 函数名 | 返回类型 | 描述 |
| unbase64(string str) |
Binary |
把base64格式转化为binary |
说明与解释:
把base64格式转化为binary。
举例:
select unbase64(base64(binary('Transwarp'))) from src limit 1;
Result: Transwarp
| 函数名 | 返回类型 | 描述 |
| upper(string A) |
String |
把字符中的字母都转化为大写 |
说明与解释:
把字符中的字母都转化为大写,其他字符不变。
举例:
select upper('transwarp') from src limit 1;
Result: TRANSWARP
| 函数名 | 返回类型 | 描述 |
| ucase(string A) |
String |
把字符中的字母都转化为大写 |
说明与解释:
用法和upper一致。
举例:
select ucase('transwarp') from src limit 1;
Result: TRANSWARP
| 函数名 | 返回类型 | 描述 |
| chr(A) |
String |
返回整型的char值 |
说明与解释:
chr(number_code):只能传入int,转为String.valueof((char) number_code),字符编码格式为内置的unicode。
举例:
select chr(123) from src;
Result: {
| 函数名 | 返回类型 | 描述 |
| oracle_instr(string1, string2 [, start_position [, nth_appearance ]]) |
String |
返回子字符第一次出现的下标 |
说明与解释:
新增四个参数,遵守Oracle的函数定义。
举例:
SELECT oracle_instr('Transwarp', 'warp') FROM src LIMIT 1;
Result: 6
| 函数名 | 返回类型 | 描述 |
| to_number(value, format_mask) |
Int |
把string转化为number |
说明与解释:
按照指定的格式来格式化字符。
举例:
select to_number('1239.0') from src limit 1;
Result: 1239
| 函数名 | 返回类型 | 描述 |
| trunc(date, format) |
String |
返回日期的指定格式 |
说明与解释:
支持string类型的date字段按format返回特定的日期。format='yyyy'/'yy',返回该年第一天的日期;format='mm',返回该月第一天;format='dd',得到日期;format='d',得到该周第一天的日期;format='hh',得到精确到小时的时间;format='mi',得到精确到分钟的时间。
举例:
select trunc('2015-01-30 11:11:11','hh') from src limit 1;
Result: 2015-01-30 11:00:00
| 函数名 | 返回类型 | 描述 |
| to_char(date, pattern) / to_char(number [,format]) |
String |
返回指定格式的日期(数字)字符 |
说明与解释:
输入的第一个参数为date的时候,把yyyy-MM-dd HH:mm:ss形式的string转化为输入pattern形式的string;第一个参数为数字时,则把数字转成string或按照一定format转string
举例:
select to_char('2015-01-30','yyyyMMdd') from src;
Result: 20150130
| 函数名 | 返回类型 | 描述 |
| to_semiangle(string) |
String |
把全角字符转化为半角字符 |
说明与解释:
把全角字符转化为半角字符。
举例:
select to_semiangle('transwarp') from src limit 1;
Result: 2015-01-30 11:00:00
| 函数名 | 返回类型 | 描述 |
| nvl(eExpr1, eExpr2) |
String |
替换null为其他字符 |
说明与解释:
eExpr1为空时返回eExpr2的值,仅支持基本类型(包括string)。
举例:
select nvl(null,'Transwarp') from src limit 1;
Result: Transwarp
| 函数名 | 返回类型 | 描述 |
| nvl2(string1, value_if_not_null, value_if_null) |
String |
根据字符是否为null返回不同的值 |
说明与解释:
若string1为null,返回value_if_not_null,否则返回value_if_null。
举例:
select nvl2(null,'Transwarp','TDH') from src limit 1;
Result: 2015-01-30 11:00:00
| 函数名 | 返回类型 | 描述 |
| lnnvl(condition) |
String |
处理判断条件中有null值出现的情况 |
说明与解释:
condition是一个表达式,所得值是Boolean类型。condition为null时,返回true;condition为true时返回false;condition为false时返回true。
举例:
select lnnvl(true), lnnvl(false), lnnvl(null) from src limit 1;
Result: false true true
| 函数名 | 返回类型 | 描述 |
| decode(value1, value2, value3, .... defaultValue) |
String |
根据字符是否相等选择不同返回值 |
说明与解释:
返回当value1=value2的时候返回value3,否则返回defaultValue。
举例:
select decode(1,1,'transwarp','TDH') from src;
Result: transwarp
| 函数名 | 返回类型 | 描述 |
| range_decode(value, isLeftClose, isRightClose,left1, right1, value1, left2, right2, value2, defaultValue) |
String |
根据字符是否相等选择不同返回值 |
说明与解释:
返回当value1=value2的时候返回value3,否则返回defaultValue。
举例:
SELECT range_decode('dep', false, true,"ACCOUNT", "HR", "NO-DEP") FROM src LIMIT 1;
Result:NO-DEP
| 函数名 | 返回类型 | 描述 |
| greatest(value1, value2, value3, ....) |
value的共有类型 |
返回value中最大的值 |
说明与解释:
如果是数字类型比较,返回类型所有参数的公共类型,返回其中的最大值。如果是字符类型比较,则是逐位比较。
举例:
select greatest('10','9') from src limit 1;
Result: '9'
条件函数
If, coalesce, CASE a WHEN b THEN c [WHEN d THEN e] [ELSE f] END, CASE WHEN a THEN b [WHEN c THEN d] [ELSE e] END
| 函数名 | 返回类型 | 描述 |
| if(booleantestCondition, T valueTrue, T valueFalseOrNull) |
String |
根据条件真假返回不同的值 |
说明与解释:
如果booleantestCondition为true,返回valueTrue,否则返回TvalueFalseOrNull。
举例:
select if(true,'Transwarp','TDH') from src limit 1;
Result: 'Transwarp'
| 函数名 | 返回类型 | 描述 |
| coalesce(a1, a2, ...) |
String |
返回第一个非null的值 |
说明与解释:
返回第一个非null的值。
举例:
select coalesce(null,'Transwarp','TDH') from src limit 1;
Result: 'Transwarp'
| 函数名 | 返回类型 | 描述 |
| CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END |
相应参数类型 |
根据条件返回不同的值 |
说明与解释:
如果a的值为b则执行c……否则执行f。
举例:
select case 't' when 't' then 'Transwarp' else 'TDH' end from src;
Result: 'Transwarp'
| 函数名 | 返回类型 | 描述 |
| CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END |
相应参数类型 |
根据参数真假返回不同值 |
说明与解释:
a和c 必须是Boolean类型。
举例:
select case when true then 'Transwarp' else 'TDH' end from src;
Result: 'Transwarp'
聚合函数
count, sum, avg, min, max, variance, var_pop, var_samp, stddev_pop, stddev_samp, covar_pop, covar_samp, corr, percentile, percentile_approx, histogram_numeric, collect_set, collect_list, ntile
当前工作位置
| 函数名 | 返回类型 | 描述 |
| count(expr) |
Int |
统计字段数量 |
说明与解释:
返回记录条数。
举例:
select count(1) from transwarp;
Result: 1314
| 函数名 | 返回类型 | 描述 |
| sum(expr) |
Int |
求和 |
说明与解释:
返回某常数或者某一列的平均值。
举例:
select sum(1) from transwarp;
Result: 1314
| 函数名 | 返回类型 | 描述 |
| avg(expr) |
Double |
平均值 |
说明与解释:
返回某常数或者某一列的平均值。
举例:
select avg(price) from transwarp;
Result: 100000
| 函数名 | 返回类型 | 描述 |
| min(expr) |
字段的公共类型 |
最小值 |
说明与解释:
返回某列的最小值。
举例:
select min(price) from transwarp;
Result: 100000
| 函数名 | 返回类型 | 描述 |
| max(expr) |
字段的公共类型 |
最小值 |
说明与解释:
返回某列的最小值。
举例:
select max(price) from transwarp;
Result: 100000
| 函数名 | 返回类型 | 描述 |
| variance(x) |
Double |
求方差 |
说明与解释:
返回某列所有值的方差。
举例:
select variance(price) from transwarp;
Result: 0.0
| 函数名 | 返回类型 | 描述 |
| var_pop(x) |
Double |
求方差 |
说明与解释:
用法同 'variance' 一致。
举例:
select var_pop(price) from transwarp;
Result: 0.0
| 函数名 | 返回类型 | 描述 |
| var_samp(x) |
Double |
求样本方差 |
说明与解释:
返回指定列的样本方差。
举例:
select var_samp(price) from transwarp;
Result: 0.0
| 函数名 | 返回类型 | 描述 |
| std(x) |
Double |
标准差 |
说明与解释:
返回指定列的标准差。
举例:
select std(price) from transwarp;
Result: 0.0
| 函数名 | 返回类型 | 描述 |
| stddev(x) |
Double |
标准差 |
说明与解释:
返回指定列的标准差,用法和 'std' 一致。
举例:
select stddev(price) from transwarp;
Result: 0.0
| 函数名 | 返回类型 | 描述 |
| stddev_pop(x) |
Double |
标准差 |
说明与解释:
返回指定列的标准差,用法和 'std' 一致。
举例:
select stddev_pop(price) from transwarp;
Result: 0.0
| 函数名 | 返回类型 | 描述 |
| stddev_sample(x) |
Double |
标准差 |
说明与解释:
返回指定列的样本标准差。
举例:
select stddev_sample(price) from transwarp;
Result: 7.45430868352036E-12
| 函数名 | 返回类型 | 描述 |
| covar_pop(x,y) |
Double |
总体协方差 |
说明与解释:
返回两列数值的协方差,计算方式是:当x和y都不为null的时候,(SUM(x*y)-SUM(x)*SUM(y)/COUNT(x,y))/COUNT(x,y),否则返回null。
举例:
select covar_pop(1,2) from transwarp;
Result: 0.0
| 函数名 | 返回类型 | 描述 |
| covar_samp(x,y) |
Double |
样本协方差 |
说明与解释:
返回两列的样本协方差。
举例:
select covar_samp(1,1) from transwarp;
Result: 0.0
| 函数名 | 返回类型 | 描述 |
| corr(x,y) |
String |
统计字段数量 |
说明与解释:
返回两列数的皮尔森相关系数。
举例:
select corr(1,1) from transwarp;
Result: NaN
| 函数名 | 返回类型 | 描述 |
| percentile(expr, pc) |
Double |
数值区域的百分比数值点 |
说明与解释:
返回数值区域的百分比数值点。0<=P<=1,否则返回NULL,不支持浮点型数值。
举例:
select percentile(1,1) from src;
Result: 0.0
| 函数名 | 返回类型 | 描述 |
| percentile(BIGINT col, array(p1 [, p2]...)) |
Array<Double> |
数值区域的百分比对应的数值点 |
说明与解释:
返回数值区域的一组百分比值分别对应的数值点。0<=P<=1,否则返回NULL,不支持浮点型数值。
举例:
select percentile(1,array('1')) from src;
Result: [1.0]
| 函数名 | 返回类型 | 描述 |
| percentile_approx(DOUBLE col, p [, B]) |
Double |
数值区域的百分比数值点的近似值 |
说明与解释:
返回数值区域的百分比数值点的近似值。0<=P<=1,否则返回NULL,支持浮点型数值。参数B设置精确
度,越高的B值精确度越高,缺省值为10,000。当列中distinct值的数目小于B时,此时返回准确值。
举例:
SELECT percentile_approx(val, 0.56, 100000) FROM somedata;
Result: 2.26
| 函数名 | 返回类型 | 描述 |
| percentile_approx(col, array(p~1,, [, p,,2_]…) [, B]) |
Array |
数值区域的百分比数值点的近似值 |
说明与解释:
与上个方法相似,除了接受与返回一组百分比数值点,而不是一个。
举例:
SELECT percentile_approx(val, array(0.5, 0.95, 0.98), 100000) FROM somedata;
Result: [0.05,1.64,2.26]
| 函数名 | 返回类型 | 描述 |
| histogram_numeric(expr, nb) |
array |
统计字段数量 |
说明与解释:
用nb的值计算数字类型expr的直方图
举例:
SELECT histogram_numeric(1, 3) FROM transwarp;
Result: [{"x":1.0,"y":500.0},{"x":1.0,"y":499.0}]
| 函数名 | 返回类型 | 描述 |
| collect_set(x) |
Array |
去重 |
说明与解释:
返回没有重复的记录。
举例:
select collect_set(price) from transwarp;
Result: 100000
| 函数名 | 返回类型 | 描述 |
| count(expr) |
Int |
统计字段数量 |
说明与解释:
返回记录条数。
举例:
select count(*) from transwarp;
Result: 999
select module, customer/(sum(customer) over()) from tdh;
类型转换函数:binary, cast(expr as ) (YYY)
UDTF: explode, inline, json_tuple, parse_url_tuple, posexplode, stack, (YYY)
集合函数
size, map_keys, map_values, array_contains, sort_array (YYY)
其他功能函数:to_card_15_to_18(15位身份证号转18位)