海南城鄉(xiāng)建設庁網(wǎng)站色盲測試圖第六版
今天同事想在hive里用中文做為分區(qū)字段。如果用中文做分區(qū)字段的話,就需要更改Hive元
數(shù)據(jù)庫。結果發(fā)生了生產事故。導致無法刪除表和刪除分區(qū)。記一下。
?修改hive元數(shù)據(jù)庫的編碼方式為utf后可以支持中文,執(zhí)行以下語句:
alter table PARTITIONS default character set utf8;
alter table PARTITION_KEY_VALS default character set utf8;
alter table SDS default character set utf8;
alter table PARTITIONS modify column PART_name varchar(190) character set utf8;
alter table PARTITION_KEY_VALS modify column PART_KEY_VAL varchar(256) character set utf8;
alter table SDS modify column LOCATION varchar(4000) character set utf8;
以上操作是沒問題的,
當然,按照習慣執(zhí)行前手動備份一下表。防止出現(xiàn)意外可以回滾。
?就是因為這個步驟,導致了我對表進行操作的時候,報錯
message:One or more instances could not be deleted
Error while processing statement: FAILED:
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:One or more instances could not be deleted)
?這可是生產,可給我嚇尿了。趕緊看看啥問題。
我以為是表出現(xiàn)問題了。就對表進行了修復
msck repair table table_name;
毛用都沒有,現(xiàn)在每過一分鐘我都緊張一分鐘。跟我之前刪服務器的感覺差不多。
冷靜一下??赡芴幚淼姆较虿粚Α,F(xiàn)在最重要就得看看日志。
讓我see 一 see
我擦,備份的時候連帶著約束也備份過來了。
好嘛,刪除約束試試
我備份了3張表。那么刪除3張表的約束。我這里只展示1張表的處理,其他兩張表處理方式都一樣。
1、找到約束。
show create table PARTITIONS_bak20230313;CREATE TABLE `PARTITIONS_bak20230313` (`PART_ID` bigint(20) NOT NULL,`CREATE_TIME` int(11) NOT NULL,`LAST_ACCESS_TIME` int(11) NOT NULL,`PART_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,`SD_ID` bigint(20) DEFAULT NULL,`TBL_ID` bigint(20) DEFAULT NULL,PRIMARY KEY (`PART_ID`),UNIQUE KEY `UNIQUEPARTITION` (`PART_NAME`,`TBL_ID`),KEY `PARTITIONS_N49` (`TBL_ID`),KEY `PARTITIONS_N50` (`SD_ID`),CONSTRAINT `PARTITIONS_bak20230313_ibfk_1` FOREIGN KEY (`TBL_ID`) REFERENCES `TBLS` (`TBL_ID`),CONSTRAINT `PARTITIONS_bak20230313_ibfk_2` FOREIGN KEY (`SD_ID`) REFERENCES `SDS` (`SD_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
由此可以看到。約束key?PARTITIONS_bak20230313_ibfk_1和?PARTITIONS_bak20230313_ibfk_2
注意,操作元數(shù)據(jù)一定要注意。可別給執(zhí)行錯了。
alter table PARTITIONS_bak20230313 DROP FOREIGN KEY PARTITIONS_bak20230313_ibfk_1;
alter table PARTITIONS_bak20230313 DROP FOREIGN KEY PARTITIONS_bak20230313_ibfk_2;
刪除約束后,再試試hive的DDL操作
阿西八,這備份整的。嚇我一身冷汗。
來點贊,壓壓驚~
?