【云计算】Phoenix表数据类型修改解析
小标 2018-12-24 来源 : 阅读 1434 评论 0

摘要:本文主要向大家介绍了【云计算】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_FAMILhbase底层的列族名
DATA_TYPE列的数据类型
COLUMN_SIZE列的数据长度(一般指char,varchar和decimal的长度)
DECIMAL_DIGITSdecimal类型的小数长度


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等等.


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程