Phoenix varchar 空串等于null的坑

场景描述

  1. 业务的部分数据来源于hive,部分数据来源于hbase。两边数据通过一些条件字段关联,可是始终有部分数据关联不上。

  2. hive数据源的数据直接通过hive api进行读写,hbase数据源通过phoenix读写。而且写入hbase的数据最终来源于hive,没道理会关联不上。

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

通过下面案例说明

  • 测试(phoenix-5.0.0-hbase-2.0.0)
  1. 建表:

    1
    2
    3
    4
    5
    6
    7
    8
    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. 测试数据

    1
    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','');

  3. 查询结果

总结

  1. phoenix 没有对空串(“”)进行处理,所以结果仍为null。
  2. phoenix 对varchar 类型的null显示为空白,对数值类型的null显示为null。
------------- 本文结束  感谢您的阅读 -------------
评论