Phoenix的数据类型和操作符、函数


其实官方文档已经有这些东西了,如下: http://phoenix.apache.org/language/functions.html http://phoenix.apache.org/language/index.html   不过官网的某些编排确实有点反人类的意味,比如为了拼接一个字符串,我硬是找了老半天最终才找到,所以还是稍微整理一下。   数据类型: 1、数字类型
类型 长度(byte) 备注
integer 4  
bigint 8  
tinyint 1  
smaillint 2  
float 4  
double 8  
以上这些类型在hbase里面的存储跟我们想象的不一样,它是首位取反的。 举个例子,有一个tinyint的56,正常的二进制表示为00111000,然而在这里表示为10111000,这样,就保证了在hbase中,这些数作为rowkey的时候,负数在正数前面,以保证rowkey有序。   如果想使用正常版本的数字(毕竟有时候需要直接从hbase操作),可以使用它们的unsigned版本,如下:
类型 长度(byte) 备注
unsigned_int 4  
unsigned_long 8  
unsigned_tinyint 1  
unsigned_smallint 2  
unsigned_float 4  
unsigned_double 8  
然后还有一个decimal type,对应于java.math.BigDecimal,可以查看java的api获取详细的描述
decimal(precision,scale) scale  
2、布尔型 Boolean type就没什么可说的了,用一个byte表示真假   3、时间类型 Phoenix中时间类型跟数字型没什么区别,就是显示方面的问题,因此,它也有取反的问题(虽然时间戳其实没什么负数的,不知道为什么这么设计)。 因此,它也有unsinged版本,如下:
类型 长度(byte) 精度
time 8 毫秒
date 8 毫秒
timestamp 12 纳秒
unsigned_time 8 毫秒
unsigned_date 8 毫秒
unsigned_timestamp 12 纳秒
4、字符串与二进制类型
类型 长度 备注
varchar 可变  
char(len) len  
binary(len) len  
varbinary 可变  
对于可变长度的字符串,如果组成rowkey,是用\0分隔开的,然而,如果同时有数字或者时间类型的在其中,那么可能会产生歧义,这时候,建表的时候就会报错   5、集合类型 当前只支持array     函数和操作符: 1、数字类型 实际上,时间类型也是数字类型,但由于他们有一些特殊性,单独列出。
操作符或函数 描述 举例
+ - * / % 基本操作符  
round 保留小数,原则是最接近,可以视为四舍五入 round(2.34,1)   =    2.3
ceil 保留小数,进一法 round(3.14,0)   =    4
floor 保留小数,去尾法 floor(3.14, 0)    =     3
trunc 和floor一样  
     
to_number 将字符串或者时间类型转换为数字,使用java.text.DecimalFormat规定的类型  
rand 随机数  
sign  abs   sqrt  cbrt   exp power   ln   log   常用数学函数  
    2、时间类型
操作符或函数 描述 举例
+   以天为单位进行加一个数字类型  
- 以天为单位,如果参数是数字类型,结果就是时间类型;如果参数是事件类型,结果就是数字类型  
to_date 从字符串输入时间  
round 保留一定的精确度,保留最接近的 round(to_date('2015-05-01 12:30:06'),'YEAR')     =  2015-05-02 00:00:00.000
ceil 保留精确度到下一个单位 ceil(to_date('2015-05-01 12:30:06'),'YEAR')     =  2015-05-02 00:00:00.000
floor 保留精确度到上一个单位 floor(to_date('2015-05-01 12:30:06'),'YEAR')     =  2015-05-01 00:00:00.000
trunc 和floor一样  
current_date  current_time   now 当前时间  
year  month  week   dayofmonth  hour  minute  second  求时间的一部分  
convert_tz 转换时区  
timezone_offset 求时差  
3、字符串函数
upper 大写  
lower 小写  
reverse 反置  
lpad 改变长度,用特殊字符填充,默认是空格 lpad('a', 30)
trim    ltrim  rtrim 去掉两边(或者单边)的空格  
regexp_replace 替换字符串  
     
|| 字符串拼装  
substr   instr  length   regexp_substr 常用字符串函数  
     
to_char 将数字或者时间类型转换成字符串  
encode 将数字按照格式转换成字符串

ENCODE(myNumber, 'BASE62')

decode 将字符串按照格式转化为数字 DECODE('000000008512af277ffffff8', 'HEX')

4、数组函数 array_elem   array_length       array_append     array_prepend    array_cat    array_fill    array_to_string 这些看名字就知道怎么用了。
any 测试是否存在满足条件的值 1 = Any(my_array)
all 测试是否都满足某个条件 1 = ALL(my_array)

5、其他 md5    invert   转载自:http://blog.csdn.net/u014353787/article/details/50396823