Hive分区表更改表结构
2013-08-12 10:31
232 查看
Hive的分区表更改表结构后需要注意的是旧分区的结构(包括序列化参数)都是不会更改的,如果往旧分区里重新insert或者load数据覆盖掉原来的数据,hive去旧分区select出来的新字段仍是NULL,所以需要手动去数据库里修改hive的元数据。(基于hive-0.10,序列化参数应该是都不会变,但是在0.8.1里旧分区的结构好像也会随着表结构更改。)
修改分区表结构
hive元数据中表结构存放在COLUMNS_V2表里,这个表的主键是CD_ID和COLUMN_NAME,CD_ID和TBL_ID是一一对应的,因此只需要把每个分区对应的CD_ID替换成表的CD_ID即可,shell脚本如下:
修改分区序列化参数
序列化参数存放在SERDE_PARAMS表里,表主键是SERDE_ID和PARAM_KEY,SERDE_ID和SD_ID是一一对应的,而SD_ID和TBL_ID也是一一对应的,同理只需要把分区的SERDE_ID替换成表的SERDE_ID即可
修改分区表结构
hive元数据中表结构存放在COLUMNS_V2表里,这个表的主键是CD_ID和COLUMN_NAME,CD_ID和TBL_ID是一一对应的,因此只需要把每个分区对应的CD_ID替换成表的CD_ID即可,shell脚本如下:
table=$1 CD_ID=`echo "select CD_ID from SDS where SD_ID=(select SD_ID from TBLS where TBL_NAME='$table')" | mysql |grep -v 'CD_ID'` echo $CD_ID echo "update SDS set CD_ID=$CD_ID where SD_ID in (select SD_ID from PARTITIONS where TBL_ID=(select TBL_ID from TBLS where TBL_NAME='$table'))"|mysql
修改分区序列化参数
序列化参数存放在SERDE_PARAMS表里,表主键是SERDE_ID和PARAM_KEY,SERDE_ID和SD_ID是一一对应的,而SD_ID和TBL_ID也是一一对应的,同理只需要把分区的SERDE_ID替换成表的SERDE_ID即可
table=$1 SERDE_ID=`echo "select SERDE_ID from SDS where SD_ID=(select SD_ID from TBLS where TBL_NAME='$table')" | mysql |grep -v 'SERDE_ID'` echo $SERDE_ID echo "update SDS set SERDE_ID=$SERDE_ID where SD_ID in (select SD_ID from PARTITIONS where TBL_ID=(select TBL_ID from TBLS where TBL_NAME='$table'))"|mysql
相关文章推荐
- MySQL更改表结构
- Genymotion+VirtualBox详解—目录结构,路径更改,重新加载已存在的模拟器
- 更改数据库表的结构
- eclipse更改目录查看结构
- 更改IDEA的包结构显示
- SQL更改表的结构
- oracle 中更改表的结构语句
- SQL Server 不清空数据,修改数据库字段、结构,阻止保存要求重新创建表的更改
- MSSQLSERVER数据库- 解决不允许保存更改表结构
- SQL数据库修改表结构提示“不允许保存更改,阻止保存要求重新创建表的更改”
- gh-ost 号称是不需要触发器(Triggerless)支持的在线更改表结构的工具
- 使用Redis Hash结构来存储对象,更改有限字段;
- 在VB中更改结构
- 通过设计器修改表结构,“不允许保存更改”解决
- 通过设计器修改表结构,“不允许保存更改”
- mysql更改表结构
- mysql更改表结构:添加、删除、修改字段、调整字段顺序
- ORACLE 数据库表结构更改语句
- 如何妥善更改大表表结构
- 在线更改MySQL表结构工具pt-online-schema-change