摘要:本文主要向大家介绍了【云计算】Phoenix表数据类型修改解析,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。
本文主要向大家介绍了【云计算】Phoenix表数据类型修改解析,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。
截止最新的Phoenix-4.14.0, alter table 并没有修改 现有表 现有字段 数据类型的功能, 因此, 想要实现修改数据类型的功能需要另辟蹊径, 或者使用简单粗暴的删表建表, 但是生产上显然这是不可取的.
修改思路
Phoenix表是映射的hbase表, hbase存储的数据都是字节数组, 因此, 限制数据类型的只能是Phoenix自己, 所以, 我们就可以通过修改Phoenix元数据的方式修改表中字段的数据类型.
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.LOG
SYSTEM.SEQUENCE
SYSTEM.STATS
Phoenix的系统表有以上五张表, 其中SYSTEM.CATALOG表保存了我们新建表的元数据信息.
举例说明修改方法
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. 插入数据
数据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)
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';
注意: where 条件中的 表名TEST01 一定要大写, 因为建表语句中的 表名, 字段名等等只要不加引号, Phoenix都会默认转换为大写保存为元数据的.
显示字段含义:
TENANT_ID | 租户ID(这个不用管,所租户用的) |
TABLE_SCHEM | 表的schema |
TABLE_NAME | 表名 |
COLUMN_NAME | 列名 |
COLUMN_FAMIL | hbase底层的列族名 |
DATA_TYPE | 列的数据类型 |
COLUMN_SIZE | 列的数据长度(一般指char,varchar和decimal的长度) |
DECIMAL_DIGITS | decimal类型的小数长度 |
4. 修改元数据
b 的数据类型是 varchar(2), 而我们插入的是'123' , 明显不够, 所以我准备将其修改为 varchar(4)
修改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 是主键, 必须要有
再次查看元数据可知, 已经修改好了.
5. 验证是否修改成功
upsert into test01 values(2, '123', '12345', 12.12, 123.123);
还是报错, 难道修改失败了 别着急, 退出Phoenix shell客户端, 重启一下HBase, 再次进入Phoenix, 就好了, 具体为什么没搞清楚, 猜测原因应该是SYSTEM.CATALOG表的元数据加载到内存了, 有新的元数据时会追加加载新加的那部分, 但是不会更新原有的, 所以只能通过重启hbase让它重新加载SYSTEM.CATALOG表的数据到内存.
切记: 重启Hbase!!!
6. 数据类型和类型名称的对应关系
7. 举一反三
上面是数据类型与名字的对照表, 用同样的方法, upsert into的方式, 可以修改数据类型DATA_TYPE , 数据长度COLUMN_SIZE, 小数点长度DECIMAL_DIGITS等等.
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号