Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ericsahit/9622411305e42bf6735197fdec612794 to your computer and use it in GitHub Desktop.
Save ericsahit/9622411305e42bf6735197fdec612794 to your computer and use it in GitHub Desktop.
从0.13开始的元数据Schema升级明细和影响分析
--****0.13.0 to 0.14.0****
--1. hive-7784 非必须
--hive-8715 这张表在0.13.1环境已经存在,升级过程只需要加一个索引
CREATE TABLE IF NOT EXISTS `PART_COL_STATS` (
 `CS_ID` bigint(20) NOT NULL,
 `DB_NAME` varchar(128) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
 `TABLE_NAME` varchar(128) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
 `PARTITION_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
 `COLUMN_NAME` varchar(128) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
 `COLUMN_TYPE` varchar(128) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
 `PART_ID` bigint(20) NOT NULL,
 `LONG_LOW_VALUE` bigint(20),
 `LONG_HIGH_VALUE` bigint(20),
 `DOUBLE_HIGH_VALUE` double(53,4),
 `DOUBLE_LOW_VALUE` double(53,4),
 `BIG_DECIMAL_LOW_VALUE` varchar(4000) CHARACTER SET latin1 COLLATE latin1_bin,
 `BIG_DECIMAL_HIGH_VALUE` varchar(4000) CHARACTER SET latin1 COLLATE latin1_bin,
 `NUM_NULLS` bigint(20) NOT NULL,
 `NUM_DISTINCTS` bigint(20),
 `AVG_COL_LEN` double(53,4),
 `MAX_COL_LEN` bigint(20),
 `NUM_TRUES` bigint(20),
 `NUM_FALSES` bigint(20),
 `LAST_ANALYZED` bigint(20) NOT NULL,
  PRIMARY KEY (`CS_ID`),
  CONSTRAINT `PART_COL_STATS_FK` FOREIGN KEY (`PART_ID`) REFERENCES `PARTITIONS` (`PART_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE INDEX PCS_STATS_IDX ON PART_COL_STATS (DB_NAME,TABLE_NAME,COLUMN_NAME,PARTITION_NAME) USING BTREE;

--****0.14.0 to 1.1.0****
--2. hive-9296 非必须修改
--Hcatalog Notification会使用到这张表,否则用不到。参考: https://issues.apache.org/jira/browse/HIVE-9174
--Hcatalog Notification的机制允许修改表和分区等事件广播,允许下游消费者来消费。具体请参考:
--https://cwiki.apache.org/confluence/display/Hive/HCatalog+Notification
CREATE TABLE IF NOT EXISTS `NOTIFICATION_LOG`
(
    `NL_ID` BIGINT(20) NOT NULL,
    `EVENT_ID` BIGINT(20) NOT NULL,
    `EVENT_TIME` INT(11) NOT NULL,
    `EVENT_TYPE` varchar(32) NOT NULL,
    `DB_NAME` varchar(128),
    `TBL_NAME` varchar(128),
    `MESSAGE` mediumtext,
    PRIMARY KEY (`NL_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--同上
CREATE TABLE IF NOT EXISTS `NOTIFICATION_SEQUENCE`
(
    `NNI_ID` BIGINT(20) NOT NULL,
    `NEXT_EVENT_ID` BIGINT(20) NOT NULL,
    PRIMARY KEY (`NNI_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--****1.1.0 to 1.2.0****
--no op

--****1.2.0 to 2.0.0****
--3. hive-7018,非必须修改
--删除 TBLS表和PARTITIONS表上的LINK_TARGET_ID列:https://issues.apache.org/jira/browse/HIVE-7018
--Hive只有在0.10之前会用到这个列。之后版本,如果没有使用schemaTool建表(线上0.13.1就没有用到),这列没有被建出来,因而这列也不需要删除。另外,本身保留也没有副作用。
--脚本本身有是否含有列的判断,因此执行也没有副作用。
SELECT '< HIVE-7018 Remove Table and Partition tables column LINK_TARGET_ID from Mysql for other DBs do not have it >' AS ' ';
DELIMITER $$
DROP PROCEDURE IF EXISTS RM_TLBS_LINKID $$
DROP PROCEDURE IF EXISTS RM_PARTITIONS_LINKID $$
DROP PROCEDURE IF EXISTS RM_LINKID $$
/* Call this procedure to drop column LINK_TARGET_ID for TBLS */
CREATE PROCEDURE RM_TLBS_LINKID()
  BEGIN
    IF EXISTS (SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME` = 'TBLS' AND `COLUMN_NAME` = 'LINK_TARGET_ID') THEN
      ALTER TABLE `TBLS`
        DROP FOREIGN KEY `TBLS_FK3`
      ;
      ALTER TABLE `TBLS`
        DROP KEY `TBLS_N51`
      ;
      ALTER TABLE `TBLS`
        DROP COLUMN `LINK_TARGET_ID`
      ;
    END IF;
  END $$x
/* Call this procedure to drop column LINK_TARGET_ID for PARTITIONS */
CREATE PROCEDURE RM_PARTITIONS_LINKID()
  BEGIN
    IF EXISTS (SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME` = 'PARTITIONS' AND `COLUMN_NAME` = 'LINK_TARGET_ID') THEN
      ALTER TABLE `PARTITIONS`
        DROP FOREIGN KEY `PARTITIONS_FK3`
      ;
      ALTER TABLE `PARTITIONS`
        DROP KEY `PARTITIONS_N51`
      ;
      ALTER TABLE `PARTITIONS`
        DROP COLUMN `LINK_TARGET_ID`
      ;
    END IF;
  END $$
/*
 * Check and drop column LINK_TARGET_ID
 */
CREATE PROCEDURE RM_LINKID()
  BEGIN
    call RM_PARTITIONS_LINKID();
    call RM_TLBS_LINKID();
    SELECT 'Completed remove LINK_TARGET_ID';
  END $$

DELIMITER ;
CALL RM_LINKID();

--4. hive-11970 非必须修改。
--某些情况下一些列名称非常长,例如avro导出的列名,所以需要增加COLUMN_NAME的长度,从128增加到767
--参考:https://issues.apache.org/jira/browse/HIVE-11970
ALTER TABLE `COLUMNS_V2` MODIFY `COLUMN_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;
ALTER TABLE `PART_COL_PRIVS` MODIFY `COLUMN_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL;
ALTER TABLE `TBL_COL_PRIVS` MODIFY `COLUMN_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL;
ALTER TABLE `SORT_COLS` MODIFY `COLUMN_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL;
ALTER TABLE `TAB_COL_STATS` MODIFY `COLUMN_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;
ALTER TABLE `PART_COL_STATS` MODIFY `COLUMN_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;
--5. hive-12807 非必须修改。NOTICE:元数据升级时候可能报错,因为COMPACTION_QUEUE表可能未被创建
--当通过配置启用hive事务时候使用到,默认事务不启用。具体是增加字段记录事务序列中的一些信息。
--参考:https://issues.apache.org/jira/browse/HIVE-12352
ALTER TABLE `COMPACTION_QUEUE` ADD `CQ_HIGHEST_TXN_ID` bigint;
--6. hive-12814 非必须修改
--当通过配置启用hive事务时候使用到,默认事务不启用。具体是增加字段,记录compaction时候的一些统计信息。
--参考:https://issues.apache.org/jira/browse/HIVE-11444
ALTER TABLE `COMPACTION_QUEUE` ADD `CQ_META_INFO` varbinary(2048);
--7. hive-12816 非必须修改
--当通过配置启用hive事务时候使用到,默认事务不启用。具体是增加字段,保存compaction时候的MR作业id,防止metastore重启时候无法kill过期作业。
--参考:https://issues.apache.org/jira/browse/HIVE-11685
ALTER TABLE `COMPACTION_QUEUE` ADD `CQ_HADOOP_JOB_ID` varchar(32);
--8. hive-12818 非必须修改
--当通过配置启用hive事务时候使用到,默认事务不启用。
--参考:https://issues.apache.org/jira/browse/HIVE-12353
CREATE TABLE COMPLETED_COMPACTIONS (
  CC_ID bigint PRIMARY KEY,
  CC_DATABASE varchar(128) NOT NULL,
  CC_TABLE varchar(128) NOT NULL,
  CC_PARTITION varchar(767),
  CC_STATE char(1) NOT NULL,
  CC_TYPE char(1) NOT NULL,
  CC_WORKER_ID varchar(128),
  CC_START bigint,
  CC_END bigint,
  CC_RUN_AS varchar(128),
  CC_HIGHEST_TXN_ID bigint,
  CC_META_INFO varbinary(2048),
  CC_HADOOP_JOB_ID varchar(32)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--9. hive-12819 非必须修改
--当通过配置启用hive事务时候使用到,默认事务不启用。具体是增加show transactions时候的输出信息。
--参考:https://issues.apache.org/jira/browse/HIVE-12353
ALTER TABLE `TXNS` ADD `TXN_AGENT_INFO` varchar(128);
--10. hive-12821 非必须修改
--当通过配置启用hive事务时候使用到,默认事务不启用。
--参考:https://issues.apache.org/jira/browse/HIVE-11965
ALTER TABLE `TXNS` ADD `TXN_HEARTBEAT_COUNT` int;
ALTER TABLE `HIVE_LOCKS` ADD `HL_HEARTBEAT_COUNT` int;
--11. hive-12822 非必须修改,同上
ALTER TABLE `TXNS` ADD `TXN_META_INFO` varchar(128);
--12. hive-12823 非必须修改,同上
ALTER TABLE `HIVE_LOCKS` ADD `HL_AGENT_INFO` varchar(128);
--13. hive-12831 非必须修改,同上
ALTER TABLE `HIVE_LOCKS` ADD `HL_BLOCKEDBY_EXT_ID` bigint;
ALTER TABLE `HIVE_LOCKS` ADD `HL_BLOCKEDBY_INT_ID` bigint;
--14. hive-12832 非必须修改,同上
CREATE TABLE AUX_TABLE (
  MT_KEY1 varchar(128) NOT NULL,
  MT_KEY2 bigint NOT NULL,
  MT_COMMENT varchar(255),
  PRIMARY KEY(MT_KEY1, MT_KEY2)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--****2.0.0 to 2.1.0****
--15. hive-13076 从代码上看不影响,但是涉及到建表和修改表操作,另外建议先打上补丁
--让hive支持表级别主键和外键,从而可以在CBO时候优化执行计划。目前完成了主键和外键的存储,CBO使用主键和外键功能还未开发完成。
--语法:CREATE TABLE vendor( vendor_id int, PRIMARY KEY (vendor_id)  DISABLE NOVALIDATE RELY);
--CREATE TABLE product ( product_id int, product_vendor_id int, PRIMARY KEY (product_id)  DISABLE NOVALIDATE, CONSTRAINT product_fk_1 FOREIGN KEY (product_vendor_id) REFERENCES vendor(vendor_id)  DISABLE NOVALIDATE);
--参考:https://issues.apache.org/jira/browse/HIVE-13350
CREATE TABLE IF NOT EXISTS `KEY_CONSTRAINTS`
(
  `CHILD_CD_ID` BIGINT,
  `CHILD_INTEGER_IDX` INT(11),
  `CHILD_TBL_ID` BIGINT,
  `PARENT_CD_ID` BIGINT NOT NULL,
  `PARENT_INTEGER_IDX` INT(11) NOT NULL,
  `PARENT_TBL_ID` BIGINT NOT NULL,
  `POSITION` BIGINT NOT NULL,
  `CONSTRAINT_NAME` VARCHAR(400) NOT NULL,
  `CONSTRAINT_TYPE` SMALLINT(6)  NOT NULL,
  `UPDATE_RULE` SMALLINT(6),
  `DELETE_RULE` SMALLINT(6),
  `ENABLE_VALIDATE_RELY` SMALLINT(6) NOT NULL,
  PRIMARY KEY (`CONSTRAINT_NAME`, `POSITION`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE INDEX `CONSTRAINTS_PARENT_TABLE_ID_INDEX` ON KEY_CONSTRAINTS (`PARENT_TBL_ID`) USING BTREE;
--16. hive-13395 不必须修改
--当通过配置启用hive事务时候使用到,默认事务不启用。
--参考:https://issues.apache.org/jira/browse/HIVE-13395
CREATE TABLE WRITE_SET (
  WS_DATABASE varchar(128) NOT NULL,
  WS_TABLE varchar(128) NOT NULL,
  WS_PARTITION varchar(767),
  WS_TXNID bigint NOT NULL,
  WS_COMMIT_ID bigint NOT NULL,
  WS_OPERATION_TYPE char(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE TXN_COMPONENTS ADD TC_OPERATION_TYPE char(1);
--17. hive-13354 不必须修改
--当通过配置启用hive事务时候使用到,默认事务不启用。
ALTER TABLE COMPACTION_QUEUE ADD CQ_TBLPROPERTIES varchar(2048);
ALTER TABLE COMPLETED_COMPACTIONS ADD CC_TBLPROPERTIES varchar(2048);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment