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


    其实官方文档已经有这些东西了,如下:
     
    不过官网的某些编排确实有点反人类的意味,比如为了拼接一个字符串,我硬是找了老半天最终才找到,所以还是稍微整理一下。
     
    数据类型:
    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,是用分隔开的,然而,如果同时有数字或者时间类型的在其中,那么可能会产生歧义,这时候,建表的时候就会报错
     
    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
  • 相关阅读:
    说说内核与计算机硬件结构
    为什么51单片机的地址总线是16位的,但是它却是8位机?
    哈弗结构与冯诺依曼结构
    关于ARM的内核架构
    Bootloader之uBoot简介(转)
    mysql优化
    java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决
    [Java]读取文件方法大全
    request相关研究
    session与cookie
  • 原文地址:https://www.cnblogs.com/codeOfLife/p/7404293.html
Copyright © 2020-2023  润新知