phoenix varchar 空串等于null的坑

  • 场景描述
  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
    );
    
  2. 测试数据

    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','');
    
    phoenix varchar 空串等于null的坑_第1张图片
  3. 查询结果
    phoenix varchar 空串等于null的坑_第2张图片

  4. 总结

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

你可能感兴趣的:(采坑记,phoenix)