桥山之巅,姬水之畔

Phoenix varchar 空串等于null的坑

2019.01.15

场景描述

  1. 业务的部分数据来源于hive,部分数据来源于hbase。两边数据通过一些条件字段关联,可是始终有部分数据关联不上。
  2. hive数据源的数据直接通过hive api进行读写,hbase数据源通过phoenix读写。而且写入hbase的数据最终来源于hive,没道理会关联不上。

之后查找了好久,终于发现问题所在。就在phoenix对空串("")的处理,或者说没做写入处理。

案例

  • 版本:phoenix-5.0.0-hbase-2.0.0
  1. 建表
create table "test"(
	rk varchar primary key,
	"cf1"."c1" varchar,
	"cf1"."c2" varchar,
	"cf1"."c3" unsigned_int,
	"cf1"."c4" unsigned_long,
	"cf1"."c5" unsigned_double
);
  1. 测试数据
upsert into "test" (rk,"cf1"."c1","cf1"."c3","cf1"."c4","cf1"."c5") values ('rk1','varchar',100,111,1.123);
upsert into "test" (rk,"cf1"."c1") values ('rk2','');

  1. 查询结果

总结

  1. phoenix 没有对空串("")进行处理,所以结果仍为null。
  2. phoenix 对varchar 类型的null显示为空白,对数值类型的null显示为null。