Phoenix 常用函数之优雅操作 HBase
Phoenix 常用函数之优雅操作 HBase
-
参考 1: 官方-内置函数文档: http://phoenix.apache.org/language/functions.html
-
参考 4: Phoenix综述(史上最全Phoenix中文文档)
1. 概览
2. 函数注释
2.1 Aggregate Functions
- AVG( X )
平均值。如果没有选择任何行,则结果为NULL。只允许在select语句中使用聚合。返回值的数据类型与参数相同。
- COUNT( * )
所有行或非空值的计数。此方法返回一个long。当使用DISTINCT时,它只计算DISTINCT值。如果没有选择任何行,结果为0。只允许在select语句中使用聚合。
- APPROX_COUNT_DISTINCT(*)
所有行或非空值的近似不同计数。默认情况下,近似的相对误差小于0.00405。如果没有选择任何行,结果为0。只允许在select语句中使用聚合。
- MAX(NAME)
最大的值。如果没有选择任何行,则结果为NULL。只允许在select语句中使用聚合。返回值的数据类型与参数相同。
- MIN(NAME)
最小的值。如果没有选择任何行,则结果为NULL。只允许在select语句中使用聚合。返回值的数据类型与参数相同。
- SUM(NAME)
所有值的总和。如果没有选择任何行,则结果为NULL。只允许在select语句中使用聚合。返回值的数据类型与参数相同。
- PERCENTILE_CONT( 0.9 ) WITHIN GROUP (ORDER BY X ASC)
列中值的第n个百分位数。百分比值可以在0到1之间(含1)。只允许在select语句中使用聚合。返回值为十进制数据类型。
- PERCENTILE_DISC( 0.9 ) WITHIN GROUP (ORDER BY X DESC)
一个逆分布函数,假设一个离散分布模型。它接受一个百分比值和一个排序规范,并从集合中返回一个元素。null值在计算中被忽略。
- PERCENT_RANK( 100 ) WITHIN GROUP (ORDER BY X ASC)
假设值的百分比等级(如果插入到列中)。只允许在select语句中使用聚合。返回值为十进制数据类型。
- FIRST_VALUE( name ) WITHIN GROUP (ORDER BY salary DESC)
每个不同组中的第一个值按照规范的顺序排序。
- LAST_VALUE( name ) WITHIN GROUP (ORDER BY salary DESC)
每个不同组中的最后一个值,按照规范的顺序排序。
- FIRST_VALUES( name, 3 ) WITHIN GROUP (ORDER BY salary DESC)
返回一个数组,最多包含每个不同组中第一个值的给定数值大小,该数组按照规范的顺序排列。
- LAST_VALUES( name, 3 ) WITHIN GROUP (ORDER BY salary DESC)
返回一个数组,最多包含每个不同组中最后一个值的给定数值大小,该数组按照规范的顺序排序。
- NTH_VALUE( name, 2 ) WITHIN GROUP (ORDER BY salary DESC)
每个不同组中的第n个值按照规范的顺序排列。
- STDDEV_POP( X )
所有值的总体标准差。只允许在select语句中使用聚合。返回值为十进制数据类型。
- STDDEV_SAMP( X )
所有值的样本标准差。只允许在select语句中使用聚合。返回值为十进制数据类型。
2.2 String Functions
-
SUBSTR('[Hello]', 2, 5)
-
SUBSTR'Hello World', -5)
返回从基于1的位置开始的字符串的子字符串。
如果使用零,位置是基于零的。如果开始索引是负的,那么开始索引相对于字符串的结尾。长度是可选的,如果没有提供,则返回字符串的其余部分。
-
INSTR('Hello World', 'World')
-
INSTR('Simon says', 'mon')
-
INSTR('Peace on earth', 'war')
返回第二个参数在第一个参数中初始出现的基于1的位置。如果第二个参数不包含在第一个参数中,则返回0。
- TRIM(' Hello ')
从输入字符串中删除前导和尾随空格。
- LTRIM(' Hello')
从输入字符串中删除前导空格。
- RTRIM('Hello ')
从输入字符串中移除尾随空格。
- LPAD('John',30)
用特定的填充字符(默认为空格)填充字符串表达式直到长度参数。
- LENGTH('Hello')
返回字符串的字符长度。
-
REGEXP_SUBSTR('na1-appsrv35-sj35', '[^-]+') evaluates to 'na1'
通过应用正则表达式从基于1的位置的偏移量返回字符串的子字符串。就像SUBSTR一样,如果开始索引为负,那么它相对于字符串的结尾。如果未指定,起始索引默认为1。 -
REGEXP_REPLACE('abc123ABC', '[0-9]+', '#') evaluates to 'abc#ABC'
通过应用正则表达式并将匹配项替换为替换字符串,返回一个字符串。如果未指定替换字符串,则默认为空字符串。 -
REGEXP_SPLIT('ONE,TWO,THREE', ',') evaluates to ARRAY['ONE', 'TWO', 'THREE']
-
REGEXP_SPLIT('ONE!#TWO#,!THREE', '[,!#]+') evaluates to ARRAY['ONE', 'TWO', 'THREE']
使用正则表达式将字符串拆分为VARCHAR数组。如果在正则表达式中具有特殊含义的字符要用作模式字符串中的正则分隔符,则必须使用反斜杠对它们进行转义。 -
UPPER('Hello')
-
UPPER('Hello', 'tr_TR')
返回字符串参数的大写字符串。如果提供了localeString(在Phoenix 4.14中可用),它将标识用于转换的规则的地区。如果没有提供localeString,则使用默认的语言环境。localalestring必须是Java 6实现返回的Java .util. local . tostring()的形式。“zh TW STROKE”或“en US”或“fr fr”。
-
LOWER('HELLO')
-
LOWER('HELLO', 'en_US')
返回字符串参数的小写字符串。如果提供了localeString(在Phoenix 4.14中可用),它将标识用于转换的规则的地区。如果没有提供localeString,则使用默认的语言环境。localalestring必须是Java 6实现返回的Java .util. local . tostring()的形式。“zh TW STROKE”或“en US”或“fr fr”。
- REVERSE('Hello')
返回字符串参数的反向字符串。
-
TO_CHAR(myDate, '2001-02-03 04:05:06')
-
TO_CHAR(myDecimal, '#,##0.###')
将日期,时间,时间戳或数字格式化为字符串。 默认日期格式为yyyy-MM-dd HH:mm:ss,默认数字格式为#,## 0。###。 有关详细信息,请参见java.text.SimpleDateFormat(获取日期/时间值)和java.text.DecimalFormat(获取数字)。 此方法返回一个字符串。
SELECT NAME FROM EMPLOYEE ORDER BY COLLATION_KEY(NAME, 'zh_TW')
计算可用于以自然语言感知的方式对字符串排序的排序键。localalestring必须是Java 6实现返回的Java .util. local . tostring()的形式。“zh TW STROKE”或“en US”或“fr fr”。第三、第四和第五个参数是可选的,它们分别决定是否使用特殊的大写排序器、排序器的强度值和排序器的分解值。(见text。排序器,以了解强度和分解)。
2.3 Time and Date Functions
-
TO_DATE('Sat, 3 Feb 2001 03:05:06 GMT', 'EEE, d MMM yyyy HH:mm:ss z')
-
TO_DATE('1970-01-01', 'yyyy-MM-dd', 'GMT+1')
date
解析字符串并返回日期。 请注意,返回的日期在内部表示为自Java纪元以来的毫秒数。 最重要的格式字符是:y年,M月,d日,H小时,m分钟,s秒。 默认格式字符串是yyyy-MM-dd HH:mm:ss。 有关格式的详细信息,请参见java.text.SimpleDateFormat。 默认情况下,解析日期时,GMT将用作时区。 但是,也可以提供时区ID。 这是一个时区ID,例如“ GMT + 1”。 如果提供“ local”作为时区ID,则将使用本地时区进行解析。 还可以将配置设置phoenix.query.dateFormatTimeZone设置为时区ID,这将导致GMT的默认值被配置的时区ID覆盖。 请参阅数据类型参考指南,以了解Apache Phoenix当前如何定义DATE数据类型。 此外,Phoenix支持ANSI SQL日期文字,其作用类似于单参数TO_DATE函数。
-
TO_TIME('2005-10-01 14:03:22.559')
-
TO_TIME('1970-01-01', 'yyyy-MM-dd', 'GMT+1')
time '2005-10-01 14:03:22.559'
将给定字符串转换为时间实例。如果没有提供日期格式,则默认为yyyy-MM-dd HH:mm:ss。SSS或配置属性phoenix.query.dateFormat定义的任何内容。配置设置phoenix.query。dateFormatTimeZone也可以设置为时区id,这将导致GMT的默认值被配置的时区id覆盖。此外,Phoenix支持ANSI SQL时间文字,其作用类似于时间函数的单参数。
-
TO_TIMESTAMP('2005-10-01 14:03:22.559')
-
TO_TIMESTAMP('1970-01-01', 'yyyy-MM-dd', 'GMT+1')
timestamp '2005-10-01 14:03:22.559'
将给定字符串转换为时间戳实例。如果没有提供日期格式,则默认为yyyy-MM-dd HH:mm:ss。SSS或配置属性phoenix.query.dateFormat定义的任何内容。配置设置phoenix.query。dateFormatTimeZone也可以设置为时区id,这将导致GMT的默认值被配置的时区id覆盖。此外,Phoenix支持ANSI SQL时间戳文字,其作用类似于时间戳函数的单参数。
- CURRENT_TIME()
与CURRENT DATE()相同,只是返回类型为TIME的值。在这两种情况下,底层表示法都是作为长值的epoch时间。关于Apache Phoenix目前如何定义时间数据类型,请参阅数据类型参考指南。
- CONVERT_TZ(myDate, 'UTC', 'Europe/Prague')
将日期/时间从一个时区转换为另一个时区,并返回转换后的日期/时间值。
- TIMEZONE_OFFSET('Indian/Cocos', myDate)
返回特定日期/时间的时区偏移量(以分钟为单位),以分钟为单位。
- NOW()
返回当前日期,该日期在查询开始执行时绑定,基于拥有被查询表元数据的区域服务器上的当前时间。
- YEAR(TO_DATE('2015-6-05'))
返回指定日期的年份。
- MONTH(TO_TIMESTAMP('2015-6-05'))
返回指定日期的月份。
- WEEK(TO_TIME('2010-6-15'))
返回指定日期的星期。
- DAYOFYEAR(TO_DATE('2004-01-18 10:00:10'))
返回指定日期的日期。
- DAYOFMONTH(TO_DATE('2004-01-18 10:00:10'))
返回指定日期所在月份的日期。
- DAYOFWEEK(TO_DATE('2004-01-18 10:00:10'))
返回指定日期的星期几。
- HOUR(TO_TIMESTAMP('2015-6-05'))
返回指定日期的小时。
- MINUTE(TO_TIME('2015-6-05'))
返回指定日期的分钟。
- SECOND(TO_DATE('2015-6-05'))
返回指定日期的第二个日期。
2.4 Numeric Functions
-
ROUND(number)
-
ROUND(number, 2)
-
ROUND(timestamp)
-
ROUND(time, 'HOUR')
-
ROUND(date, 'MINUTE', 30)
将数字或时间戳表达式舍入为指定的最接近的小数位数或时间单位。
如果表达式是数字类型,则第二个参数是用于舍入数字的小数位,默认为零。
如果表达式是日期/时间类型,则第二个参数可以是列出的确定日期/时间的剩余精度的时间单位之一。 如果不存在默认值,则使用MILLISECONDS。
乘法器仅适用于日期/时间类型,用于四舍五入为一个时间单位(即10分钟)的倍数,如果未指定,则默认为1。 此方法返回与其第一个参数相同的类型。
-
CEIL(number, 3)
-
CEIL(2.34)
-
CEIL(timestamp, 'SECOND', 30)
-
CEIL(date, 'DAY', 7)
和ROUND一样,除了四舍五入任何小数值到下一个偶数倍。
-
FLOOR(timestamp)
-
FLOOR(date, 'DAY', 7)
与ROUND相同,只是四舍五入将任何分数值四舍五入到之前的偶数倍。
-
TRUNC(timestamp, 'SECOND', 30)
-
TRUNC(date, 'DAY', 7)
Same as FLOOR
- TO_NUMBER('$123.33', '\u00A4###.##')
将字符串或日期/时间类型格式化为数字,可以选择接受格式字符串。
有关格式的详细信息,请参见java.text.DecimalFormat。 对于日期,时间和timeStamp而言,结果是自纪元以来的时间(以毫秒为单位)。 此方法返回一个十进制数。
-
RAND()
-
RAND5)
产生介于0.0(含)和1.0(不含)之间的随机且均匀分布的double值的函数。 如果提供了种子,则在同一行的每次调用中返回的值都是相同的。 如果未提供种子,则每次调用的返回值都不同。 种子必须是常数。
2.5 Array Functions
-
ARRAY_ELEM(my_array_col, 5)
-
ARRAY_ELEM(ARRAY[1,2,3], 1)
使用数组下标符号访问数组元素的替代方法。返回数组中指定位置的元素。位置是基于一的。
-
ARRAY_LENGTH(my_array_col)
-
ARRAY_LENGTH(ARRAY[1,2,3])
返回数组的当前长度。
-
ARRAY_APPEND(my_array_col, my_element_col)
-
ARRAY_APPEND(ARRAY[1,2,3], 4) evaluates to ARRAY[1,2,3,4]
将给定元素追加到数组的末尾。 -
ARRAY_PREPEND(my_element_col, my_array_col)
-
ARRAY_PREPEND(0, ARRAY[1,2,3]) evaluates to ARRAY[0,1,2,3]````
将给定元素追加到数组的开头。 -
ARRAY_CAT(my_array_col1, my_array_col2)
-
ARRAY_CAT(ARRAY[1,2], ARRAY[3,4]) evaluates to ARRAY[1,2,3,4]
连接输入数组并返回结果。 -
ARRAY_FILL(my_element_col, my_length_col)
-
ARRAY_FILL(1, 3) evaluates to ARRAY[1,1,1]
返回一个用所提供的值和长度初始化的数组。 -
ARRAY_TO_STRING(my_array_col, my_delimiter_col, my_null_string_col)
-
ARRAY_TO_STRING(ARRAY['a','b','c'], ',') evaluates to 'a,b,c'
-
ARRAY_TO_STRING(ARRAY['a','b',null,'c'], ',') evaluates to 'a,b,c'
-
ARRAY_TO_STRING(ARRAY['a','b',null,'c'], ',', 'NULL') evaluates to 'a,b,NULL,c'
使用提供的分隔符和可选的空字符串连接数组元素,并返回结果字符串。如果nullString参数被省略或NULL,则数组中的任何空元素都将被跳过,不会在输出字符串中表示。例子:
1 = ANY(my_array)
10 > ANY(my_array)
用于比较表达式的右侧,用于测试任意数组元素是否满足左侧的比较表达式。
1 = ALL(my_array)
10 > ALL(my_array)
用于比较表达式的右侧,以测试所有数组元素是否满足左侧的比较表达式。的数组。
2.6 Math Functions
-
SIGN(number)
-
SIGN((1.1)
-
SIGN(-1)
以整数形式返回给定数值表达式的sgn函数。如果给定的数值表达式为负数,则返回值为-1;如果给定的数值表达式为0;如果给定的数值表达式为正,则为1。
-
ABS(number)
-
ABS(1.1)
-
ABS(-1)
返回保持相同类型的给定数值表达式的绝对值。
-
SQRT(number)
-
SQRT(1.1)
以双精度返回给定非负数值表达式的正确的四舍五入平方根。
-
CBRT(number)
-
CBRT(1.1)
-
CBRT(-1)
以双精度返回给定数值表达式的立方根。
-
EXP(number)
-
EXP(1.1)
-
EXP(-1)
返回以给定数值的幂作为双精度的欧拉数e。
-
POWER(number, number)
-
POWER(3, 2)
POWER(2, 3)
返回第一个参数的值,它的幂是第二个参数的双精度值。 -
LN(number)
以双精度返回给定正表达式的自然对数(以e为底)。
-
LOG(3, 2)
-
LOG(2, 3)
-
LOG(2)
返回在第二个参数的基础上计算的第一个参数的对数。如果省略,则第二个参数将使用以10为基数的参数。
2.7 Other Functions
- MD5(my_column)
计算参数的MD5散列,以二进制(16)的形式返回结果。
- INVERT(my_column)
翻转。返回类型将与参数相同。
- ENCODE(myNumber, 'BASE62')
根据提供的编码格式对表达式进行编码,并返回结果字符串。对于BASE62,将给定的以10为基数的数字转换为以62为基数的数字,并返回一个表示该数字的字符串。
- DECODE('000000008512af277ffffff8', 'HEX')
根据提供的编码格式对表达式进行解码,并将结果值作为VARBINARY返回。对于“十六进制”,将十六进制字符串表达式转换为二进制表示,提供通过控制台输入二进制数据的机制。
- COALESCE(last_update_date, CURRENT_DATE())
如果不为null,返回第一个参数的值,否则返回第二个参数的值。用于保证UPSERT SELECT命令中的列计算值为非空值。
- GET_BIT(CAST('FFFF' as BINARY), 1)
检索给定二进制值中给定索引处的位。
- GET_BYTE(CAST('FFFF' as BINARY), 1)
在给定的二进制值中检索给定索引处的字节。
- OCTET_LENGTH(NAME)
返回二进制值中的字节数。
- SET_BIT(CAST('FFFF' as BINARY), 1, 61)
用提供的新值替换二进制值中给定索引处的位。
- SET_BYTE(CAST('FFFF' as BINARY), 1, 61)
用提供的新值替换二进制值中给定索引处的字节。