python-phoenix踩坑指南-必看

mac2025-10-21  5

文章目录

1. phoenix字母大小写敏感问题(坑了1个小时)2. python 查询中的时间格式返回问题(坑了2个小时)

1. phoenix字母大小写敏感问题(坑了1个小时)

在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_time2

2. python 查询中的时间格式返回问题(坑了2个小时)

Date、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类型

最新回复(0)