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

转自: https://blog.csdn.net/u014353787/article/details/50396823

其实官方文档已经有这些东西了,如下:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值