Phoenix的delete导致数据异常

        各个大神,最近在做Phoenix的一些操作的时候,偶然发现了Phoenix在delete方面的一些数据异常,现在给大大们描述一下,希望能够得到指导哇,使用的Phoenix版本为:phoenix-4.14.0-cdh5.12.2,测试步骤如下(异常现象从第5步开始出现):
  1. 建立Phoenix表(这里没有用到default值
    CREATE TABLE testdelete(cntr_id decimal(16,0) NOT NULL,cntr_no varchar(50),branch_p integer NOT NULL,cntr_term_date date,cntr_stat varchar(6),CONSTRAINT pk PRIMARY KEY (cntr_id, branch_p)
  2. ​建立索引表(这里建立的是异步索引
    CREATE INDEX testdelete_index ON testdelete(cntr_no,CNTR_STAT) INCLUDE (CNTR_ID, cntr_term_date) ASYNC;
  3. 插入数据(插入一条记录,5列,随后实体表和索引表中有5条记录,新插入的记录也正常显示)
    图1.png
  4. 删除数据(把上一步插入的记录删除,实体表和索引表中剩4条记录)
    图2.png
  5. 重新插入数据(重新插入上一步删除的记录,但是本次插入3列,现在实体表和索引表都有5行,但此时第一个问题出现:有一列的数据没有插入进去
    图3.png
  6. 再次插入数据(再次插入上面那条记录,但是本次插入的是另外3列,此时第二个问题出现:该行数据直接没了
    图4.png
  7. 运行索引同步程序org.apache.phoenix.mapreduce.index.IndexTool后,结果与上一步相同。

 总结下来
        主要是在对实体表执行delete操作之后,表中的数据出现了:a、插入列数不完全;b、以及插入的数据整行丢失的现象
        另外,我们还发现了其他的数据问题:
        c、在Phoenix上执行删除操作后,删除不彻底:“delete from testdelete where  branch_p = 110000”,随后在表中还能找到110000的数据。不过不能通过selselect * 查,需要通过select 建了索引的字段才能查得到110000的数据。
        d、Phoenix上删除一行记录之后(假如原来5列有数据),再重新插入这一行,但是这次只插入2行,这个时候,索引表上会有3列数据有值,实体表上此时有2列,但是这个时候跑一下异步索引更新程序org.apache.phoenix.mapreduce.index.IndexTool,会导致实体表上也有3列,增加的那一列是原来没删之前这行记录里的内容。
已邀请:

smartZY

赞同来自: Leo

Phoenix不太熟,还是封神大佬来看下吧

Peng

赞同来自:

我是来学习的。

要回复问题请先登录注册


中国HBase技术社区微信公众号:
hbasegroup

欢迎加入HBase生态+Spark社区钉钉大群