Phoenix的數據類型和操做符、函數

其實官方文檔已經有這些東西了,以下:
 
不過官網的某些編排確實有點反人類的意味,好比爲了拼接一個字符串,我硬是找了老半天最終才找到,因此仍是稍微整理一下。
 
數據類型:
一、數字類型
類型
長度(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
 
二、布爾型
Boolean type就沒什麼可說的了,用一個byte表示真假
 
三、時間類型
Phoenix中時間類型跟數字型沒什麼區別,就是顯示方面的問題,所以,它也有取反的問題(雖然時間戳其實沒什麼負數的,不知道爲何這麼設計)。
所以,它也有unsinged版本,以下:
類型
長度(byte)
精度
time
8
毫秒
date
8
毫秒
timestamp
12
納秒
unsigned_time
8
毫秒
unsigned_date
8
毫秒
unsigned_timestamp
12
納秒
四、字符串與二進制類型
類型
長度
備註
varchar
可變
 
char(len)
len
 
binary(len)
len
 
varbinary
可變
 
對於可變長度的字符串,若是組成rowkey,是用\0分隔開的,然而,若是同時有數字或者時間類型的在其中,那麼可能會產生歧義,這時候,建表的時候就會報錯
 
五、集合類型
當前只支持array
 
 
函數和操做符:
一、數字類型
實際上,時間類型也是數字類型,但因爲他們有一些特殊性,單獨列出。
操做符或函數
描述
舉例
+ - * / %
基本操做符
 
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')html

decode
將字符串按照格式轉化爲數字
DECODE('000000008512af277ffffff8', 'HEX')

四、數組函數
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)

五、其餘
md5    invert
 
轉載自:http://blog.csdn.net/u014353787/article/details/50396823
相關文章
相關標籤/搜索