Phoenix的数据类型和操作符、函数
其实官方文档已经有这些东西了,如下:
http://phoenix.apache.org/language/functions.html
http://phoenix.apache.org/language/index.html
不过官网的某些编排确实有点反人类的意味,比如为了拼接一个字符串,我硬是找了老半天最终才找到,所以还是稍微整理一下。
数据类型:
1、数字类型
以上这些类型在hbase里面的存储跟我们想象的不一样,它是首位取反的。
举个例子,有一个tinyint的56,正常的二进制表示为00111000,然而在这里表示为10111000,这样,就保证了在hbase中,这些数作为rowkey的时候,负数在正数前面,以保证rowkey有序。
如果想使用正常版本的数字(毕竟有时候需要直接从hbase操作),可以使用它们的unsigned版本,如下:
然后还有一个decimal type,对应于java.math.BigDecimal,可以查看java的api获取详细的描述
2、布尔型
Boolean type就没什么可说的了,用一个byte表示真假
3、时间类型
Phoenix中时间类型跟数字型没什么区别,就是显示方面的问题,因此,它也有取反的问题(虽然时间戳其实没什么负数的,不知道为什么这么设计)。
因此,它也有unsinged版本,如下:
4、字符串与二进制类型
对于可变长度的字符串,如果组成rowkey,是用\0分隔开的,然而,如果同时有数字或者时间类型的在其中,那么可能会产生歧义,这时候,建表的时候就会报错
5、集合类型
当前只支持array
函数和操作符:
1、数字类型
实际上,时间类型也是数字类型,但由于他们有一些特殊性,单独列出。
2、时间类型
3、字符串函数
4、数组函数 array_elem array_length array_append array_prepend array_cat array_fill array_to_string 这些看名字就知道怎么用了。
5、其他 md5 invert 转载自:http://blog.csdn.net/u014353787/article/details/50396823
类型 | 长度(byte) | 备注 |
integer | 4 | |
bigint | 8 | |
tinyint | 1 | |
smaillint | 2 | |
float | 4 | |
double | 8 |
类型 | 长度(byte) | 备注 |
unsigned_int | 4 | |
unsigned_long | 8 | |
unsigned_tinyint | 1 | |
unsigned_smallint | 2 | |
unsigned_float | 4 | |
unsigned_double | 8 |
decimal(precision,scale) | scale |
类型 | 长度(byte) | 精度 |
time | 8 | 毫秒 |
date | 8 | 毫秒 |
timestamp | 12 | 纳秒 |
unsigned_time | 8 | 毫秒 |
unsigned_date | 8 | 毫秒 |
unsigned_timestamp | 12 | 纳秒 |
类型 | 长度 | 备注 |
varchar | 可变 | |
char(len) | len | |
binary(len) | len | |
varbinary | 可变 |
操作符或函数 | 描述 | 举例 |
+ - * / % | 基本操作符 | |
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 | 常用数学函数 |
操作符或函数 | 描述 | 举例 |
+ | 以天为单位进行加一个数字类型 | |
- | 以天为单位,如果参数是数字类型,结果就是时间类型;如果参数是事件类型,结果就是数字类型 | |
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 | 求时差 |
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