在phoenix中新建的表和hbase直接建立的表会有所不同。 在映射过程中,phoenix所有名称,包括表名和列名在增删改查的过程中都遵循一定的字母大小写问题。具体如下:
phoenix name : abc ===> hbase name: ABC phoenix name: "abc" ===> hbase name: abc 要想使用小写的命名方式,必须用双引号包裹名称phoenix shell复现如下: 创建名称为 test的表, 存在属性 create_time1 和 “create_time2”,对应映射结果为CREATE_TIME1 和 create_time2Date、Time、Timestamp三种日期格式的存储和返回有差异。
创建一张测试表, 分别设置三种日期格式, DATE、TIME、TIMESTAMP CREATE TABLE "test" ("id" VARCHAR PRIMARY KEY,"create_time1" DATE , "create_time2" TIME,"create_time3" TIMESTAMP )在三个字段中插入同一个时间,并查询
在shell中发现, 三个日期存的数据一致。同时保存了日期和时间,并且精确到了毫秒。
但是在python取值时返回会有差异
Date类型: 在python中只返回了日期(年月日), 映射到了datetime.dateTime类型: 在python中返回了时间 (时分秒) ,映射到了 datetime.timeTimestamp类型: 在python中返回了完整日期,映射到了datetime.datetime。是我们需要的完整日期因此,phoenix虽然在本身基于hbase的日期存储上,三种时间格式都可以用,但是到python生产中只能用 timestamp类型,这里是有差异的。
查看差异产生的根本原因。查看源码发现是phoenixdb对返回的日期数据做了处理,对于date属性的日期只拦截返回了日期,对于Time的只拦截返回了时间。因此有几种选择,1.修改源码 2.只是用timestamp类型
