专栏首页源哥的专栏Phoenix使用ROW_TIMESTAMP字段导致无法从null更新数据的故障描述

Phoenix使用ROW_TIMESTAMP字段导致无法从null更新数据的故障描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/sunlen/article/details/102969851

在使用Phoenix的过程中,发现了一个奇怪的异常现象,其中一个表,有个字段(VARCHAR类型),一旦这个字段被更新为null值,从此就无法重新更新该字段的值。

我在测试过程中,重新新建一张表,就发现可以正常更新,是我困惑不已。

最后经过反复对比,发现是另外一个字段设置成ROW_TIMESTAMP导致的,下面详细讲述一些问题的复习。

目前测试发现问题的Phoenix版本为4.14.0,另外,我在阿里云的5.2.0版本上测试,也同样发现该问题。

先来讲一下正常的逻辑情况。

首先我们先建立一个测试表,语句如下:

CREATE TABLE hyy_test_1(

f_index CHAR(2) not null,

f_create_time date not null,

f_content VARCHAR,

constraint pk primary key(f_index, f_create_time)

)

SALT_BUCKETS = 20;

注意一下,这里的f_create_time是主键,但没有设置为ROW_TIMESTAMP类型,f_content就是我们要测试的VARCHAR字段。

接下来,我们往该表加一条有值的数据,语句如下:

upsert into hyy_test_1(f_index, f_create_time, f_content) values('1', '2019-11-07 14:01:37','哈哈哈');

查询表数据,发现数据正常插入:

接下来重新把f_content赋值为null,发现正常更新:

接下来重新给f_content赋值为非null的值,发现也正常更新了:

到这里,说明数据的更新完全正常,下面我们稍微修改一个表结构,将f_create_time修改为ROW_TIMESTAMP类型,建表语句如下:

CREATE TABLE hyy_test_2(

f_index CHAR(2) not null,

f_create_time date not null,

f_content VARCHAR,

constraint pk primary key(f_index, f_create_time ROW_TIMESTAMP)

)

SALT_BUCKETS = 20;

给表新增一条f_content为空的数据,可以正常新增:

将f_content更新为null,数据可以正常更新:

重新将f_content更新为非空数据,神奇的现象出现了,数据无法更新:

由此可以看出,因为ROW_TIMESTAMP的原因,导致了该问题,目前Phoenix对ROW_TIMESTAMP实现不是太好,里面坑很多。而且,实际上,这个实现作用并不大,很容易就可以替换掉,建议不要使用该方式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Phoenix全局索引设计实践

    全局索引是Phoenix的重要特性,合理的使用二级索引能降低查询延时,让集群资源得以充分利用。本文将讲述如何高效的设计和使用索引。

    王知无-import_bigdata
  • Apache Phoenix系列 | 真 · 从入门到精通

    文章简介:Phoenix是一个开源的HBASE SQL层。它不仅可以使用标准的JDBC API替代HBASE client API创建表,插入和查询HBASE,...

    王知无-import_bigdata
  • phoenix二级索引

    二级索引 二级索引是从主键访问数据的正交方式。Hbase中有一个按照字典排序的主键Rowkey作为单一的索引。不按照Rowkey去读取记录都要遍历整张表,然后按...

    Spark学习技巧
  • 0779-5.14.4-HMaster无法成为Active异常分析

    很久很久以前,有一天,我在HBase中新建了一张表 “XXX: XXX _EXCEPTION_LIST_INFO”,同时HBase在处理大量更新操作。然后在DR...

    Fayson
  • Phoenix的使用方式详解

    本篇博客小菌为大家分享的是关于Phoenix的使用方式与常用shell。

    大数据梦想家
  • Phoenix常见问题

    是。Apache Phoenix用于OLTP(在线事务处理)用例,而不用于OLAP(在线分析处理)用例。虽然,您可以使用Phoenix进行实时数据提取,并将其作...

    大数据杂货铺
  • 细谈Hadoop生态圈

    Hadoop在过去的几年里已经变得很成熟了。下面的图1-2显示了Hadoop生态系统堆栈。Apache Phoenix是HBase的SQL包装,它需要基本的HB...

    木野归郎
  • Phoenix边讲架构边调优

    一 基础架构详解 1 概念 讲调优之前,需要大家深入了解phoenix的架构,这样才能更好的调优。 Apache Phoenix在Hadoop中实现OLTP和...

    Spark学习技巧
  • 数仓大法好!跨境电商 Shopee 的实时数仓之路

    Shopee 是东南亚与台湾领航电商平台,覆盖新加坡、马来西亚、菲律宾、台湾、印度尼西亚、泰国及越南七大市场,同时在中国深圳、上海和香港设立跨境业务办公室。

    大数据学习与分享

扫码关注云+社区

领取腾讯云代金券