mysql与phoenix字段类型对应_Phoenix表 修改字段数据类型长度

mysql等数据库使用alter 可以很方便的修改字类型,但是截止最新的Phoenix,  alter table 并没有修改 现有表 现有字段 数据类型的功能, 所以我们只能想点办法来修改数据表的字段类型。

1.Phoenix表如何修改字段类型

Phoenix表是映射的hbase表, hbase存储的数据都是字节数组, 因此, 限制数据类型的只能是Phoenix自己, 所以, 我们就可以通过修改Phoenix元数据的方式修改表中字段的数据类型.

SYSTEM.CATALOG

SYSTEM.FUNCTION

SYSTEM.LOG

SYSTEM.SEQUENCE

SYSTEM.STATS

Phoenix的系统表有以上五张表, 其中SYSTEM.CATALOG表保存了我们新建表的元数据信息.

注:

这种方法只能修改char, varchar, DECIMAL类型的长度, 宽度等等, 不能将varchar修改为integer类型

2.Phoenix表修改字段类型步骤

2.1. 建表

create table test01 (

a integer not null primary key,

b varchar(2),

c varchar(5),

d decimal(4,2),

e decimal(6,3)

);

2.2. 插入数据

数据1(正常数据):

upsert into test01 values(1, '12', '12345', 12.12, 123.123);

数据2(超过字段b长度的数据):

upsert into test01 values(2, '123', '12345', 12.12, 123.123);

报错了:

Error: ERROR 206 (22003): The data exceeds the max capacity for the data type. value='123' columnName=B (state=22003,code=206)

2.3. 查看元数据信息

查看SQL:

select TENANT_ID,TABLE_SCHEM,TABLE_NAME,COLUMN_NAME,COLUMN_FAMILY,DATA_TYPE,COLUMN_SIZE,DECIMAL_DIGITS from SYSTEM.CATALOG where TABLE_NAME='TEST01';

566.html

注意:   where 条件中的 表名TEST01 一定要大写, 因为建表语句中的 表名, 字段名等等只要不加引号, Phoenix都会默认转换为大写保存为元数据的.

显示字段含义:

566.html

2.4. 修改元数据

b 的数据类型是 varchar(2), 而我们插入的是 '123' , 明显不够, 所以我准备将其修改为 varchar(4)

566.html

修改SQL:

upsert into SYSTEM.CATALOG (TENANT_ID,TABLE_SCHEM,TABLE_NAME,COLUMN_NAME,COLUMN_FAMILY,COLUMN_SIZE) values('','','TEST01','B','0',4);

注意: TENANT_ID,TABLE_SCHEM,TABLE_NAME,COLUMN_NAME,COLUMN_FAMILY 是主键, 必须要有

再次查看元数据可知, 已经修改好了.

566.html

查看表详情:!desc test01

566.html

2.5. 验证是否修改成功

upsert into test01 values(2, '123', '12345', 12.12, 123.123);

到这里一般都会成功。

但是也有意外的情况:

566.html

还是报错, 难道修改失败了???  别着急, 退出Phoenix shell客户端, 再次进入Phoenix, 就好了, 因为我修改了phoenix元数据更新时间为一天, 需要退出客户端重新进一下, 重新加载元数据, 然后就好了, 如果没手动修改, 默认是always, 每个sql都会更新元数据, 应该不会有这个问题

如果重新进入phoenix还是不行, 那就需要重启hbase了, 具体原因我也没搞懂, 有时候需要重启hbase, 有时候不重启也会生效.

3. 数据类型和类型名称的对应关系

566.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值