Phoenix的数据类型和操作符、函数
其实官方文档已经有这些东西了,如下:
不过官网的某些编排确实有点反人类的意味,比如为了拼接一个字符串,我硬是找了老半天最终才找到,所以还是稍微整理一下。
数据类型:
1、数字类型
类型
|
长度(byte)
|
备注 |
integer
|
4
|
|
bigint |
8
|
|
tinyint
|
1
|
|
smaillint
|
2
|
|
float
|
4
|
|
double
|
8
|
|
举个例子,有一个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
|
可变
|
|
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