Index: metastore/scripts/upgrade/derby/008-HIVE-2246.derby.sql =================================================================== --- metastore/scripts/upgrade/derby/008-HIVE-2246.derby.sql (revision 1156396) +++ metastore/scripts/upgrade/derby/008-HIVE-2246.derby.sql (working copy) @@ -91,3 +91,31 @@ SET sd.CD_ID = (SELECT tt.CD_ID FROM SESSION.TMP_TBL tt WHERE tt.SD_ID = sd.SD_ID) WHERE sd.SD_ID IN (SELECT SD_ID FROM SESSION.TMP_TBL); + +/* + * Migrate IDXS + */ +INSERT INTO CDS (CD_ID) +SELECT i.SD_ID FROM IDXS i WHERE i.SD_ID IS NOT NULL ORDER BY i.SD_ID; + +UPDATE SDS + SET CD_ID = SD_ID +WHERE SD_ID in +(SELECT i.SD_ID FROM IDXS i WHERE i.SD_ID IS NOT NULL ORDER BY i.SD_ID); + +INSERT INTO COLUMNS_V2 + (CD_ID, COMMENT, COLUMN_NAME, TYPE_NAME, INTEGER_IDX) +SELECT + c.SD_ID, c.COMMENT, c.COLUMN_NAME, c.TYPE_NAME, c.INTEGER_IDX +FROM + COLUMNS c +JOIN + IDXS i +ON + i.SD_ID = c.SD_ID +; + +/* + * rename the old COLUMNS table + */ +RENAME TABLE COLUMNS TO COLUMNS_OLD; Index: metastore/scripts/upgrade/derby/008-REVERT-HIVE-2246.derby.sql =================================================================== --- metastore/scripts/upgrade/derby/008-REVERT-HIVE-2246.derby.sql (revision 1156396) +++ metastore/scripts/upgrade/derby/008-REVERT-HIVE-2246.derby.sql (working copy) @@ -11,3 +11,5 @@ DROP TABLE COLUMNS_V2; DROP TABLE CDS; + +RENAME COLUMNS_OLD TO COLUMNS; Index: metastore/scripts/upgrade/mysql/008-HIVE-2246.mysql.sql =================================================================== --- metastore/scripts/upgrade/mysql/008-HIVE-2246.mysql.sql (revision 1156396) +++ metastore/scripts/upgrade/mysql/008-HIVE-2246.mysql.sql (working copy) @@ -5,10 +5,12 @@ DROP PROCEDURE IF EXISTS CREATE_TABLES $$ DROP PROCEDURE IF EXISTS MIGRATE_TABLES $$ DROP PROCEDURE IF EXISTS MIGRATE_PARTITIONS $$ +DROP PROCEDURE IF EXISTS MIGRATE_IDXS $$ DROP PROCEDURE IF EXISTS MIGRATE $$ DROP PROCEDURE IF EXISTS PRE_MIGRATE $$ -DROP PROCEDURE IF EXISTS RENAME_TMP_COLUMNS $$ +DROP PROCEDURE IF EXISTS RENAME_OLD_COLUMNS $$ DROP PROCEDURE IF EXISTS CREATE_TABLE_SDS $$ +DROP PROCEDURE IF EXISTS POST_MIGRATE $$ /* Call this procedure to revert all changes by this script */ CREATE PROCEDURE REVERT() @@ -18,10 +20,11 @@ ; ALTER TABLE SDS DROP COLUMN CD_ID - ; + ; DROP TABLE IF EXISTS COLUMNS_V2; DROP TABLE IF EXISTS TABLE_SDS; DROP TABLE IF EXISTS CDS; + RENAME COLUMNS_OLD TO COLUMNS; END $$ @@ -29,7 +32,7 @@ * - add the column CD_ID * - add a foreign key on CD_ID * - create an index on CD_ID - */ + */ CREATE PROCEDURE ALTER_SDS() BEGIN ALTER TABLE SDS @@ -42,7 +45,7 @@ FOREIGN KEY (`CD_ID`) REFERENCES `CDS` (`CD_ID`) ; SELECT 'Created a FK Constraint on CD_ID in SDS'; - CREATE INDEX `SDS_N50` ON SDS + CREATE INDEX `SDS_N50` ON SDS (CD_ID) ; SELECT 'Added an index on CD_ID in SDS'; @@ -79,7 +82,7 @@ /* * Procedures called before migration happens - */ + */ CREATE PROCEDURE PRE_MIGRATE() BEGIN call CREATE_TABLES(); @@ -95,25 +98,25 @@ * Add entries into CDS. * Populate the CD_ID field in SDS for tables * Add entires to COLUMNS_V2 based on this table's sd's columns - */ + */ CREATE PROCEDURE MIGRATE_TABLES() BEGIN /* In the migration, there is a 1:1 mapping between CD_ID and SD_ID - * for tables. For speed, just let CD_ID = SD_ID for tables + * for tables. For speed, just let CD_ID = SD_ID for tables */ INSERT INTO CDS (CD_ID) SELECT SD_ID FROM TABLE_SDS; SELECT 'Inserted into CDS'; - + UPDATE SDS SET CD_ID = SD_ID - WHERE SD_ID in + WHERE SD_ID in (select SD_ID from TABLE_SDS); SELECT 'Updated CD_ID in SDS'; INSERT INTO COLUMNS_V2 (CD_ID, COMMENT, COLUMN_NAME, TYPE_NAME, INTEGER_IDX) - SELECT + SELECT c.SD_ID, c.COMMENT, c.COLUMN_NAME, c.TYPE_NAME, c.INTEGER_IDX FROM COLUMNS c @@ -137,11 +140,46 @@ SET sd.CD_ID = t.SD_ID where p.SD_ID is not null ; - SELECT 'Updated CD_IDs in SDS for partitions' - + SELECT 'Updated CD_IDs in SDS for partitions'; + END $$ /* + * Migrate the IDXS table + * Add entries into CDS. + * Populate the CD_ID field in SDS for tables + */ +CREATE PROCEDURE MIGRATE_IDXS() + BEGIN + /* In the migration, there is a 1:1 mapping between CD_ID and SD_ID + * for indexes. For speed, just let CD_ID = SD_ID for indexes + */ + INSERT INTO CDS (CD_ID) + SELECT SD_ID FROM IDXS + WHERE SD_ID IS NOT NULL; + SELECT 'Inserted into CDS for IDXS'; + + UPDATE SDS + SET CD_ID = SD_ID + WHERE SD_ID in + (SELECT i.SD_ID FROM IDXS i WHERE i.SD_ID IS NOT NULL); + SELECT 'Updated CD_ID in SDS for IDXS'; + + INSERT INTO COLUMNS_V2 + (CD_ID, COMMENT, COLUMN_NAME, TYPE_NAME, INTEGER_IDX) + SELECT + c.SD_ID, c.COMMENT, c.COLUMN_NAME, c.TYPE_NAME, c.INTEGER_IDX + FROM + COLUMNS c + JOIN + IDXS i + ON + i.SD_ID = c.SD_ID + ; + SELECT 'Inserted table columns into COLUMNS_V2'; + END $$ + +/* * Create a temp table that holds the SDS of tables */ CREATE PROCEDURE CREATE_TABLE_SDS() @@ -151,7 +189,7 @@ PRIMARY KEY (`SD_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; - INSERT INTO TABLE_SDS + INSERT INTO TABLE_SDS (SD_ID) SELECT t.SD_ID @@ -159,37 +197,32 @@ TBLS t WHERE t.SD_ID IS NOT NULL - ORDER BY + ORDER BY t.SD_ID ; END $$ /* - * A currently unused function to igrate the COLUMNS_V2 table - * to have the name COLUMNS + * Rename the old columns table, so old clients do not + * read from the unused COLUMNS table. + * After you are sure migration is successful, you can drop + * the table COLUMNS_OLD */ -CREATE PROCEDURE RENAME_TMP_COLUMNS() +CREATE PROCEDURE RENAME_OLD_COLUMNS() BEGIN - /*DROP TABLE `COLUMNS`;*/ - RENAME TABLE `COLUMNS_V2` TO `COLUMNS`; - SELECT 'Renamed COLUMNS_V2 to COLUMNS'; - ALTER TABLE `COLUMNS` - DROP FOREIGN KEY `COLUMNS_V2_FK1`; - SELECT 'Dropped FK on Columns'; - DROP INDEX `COLUMNS_V2_N49` ON COLUMNS; - SELECT 'Dropped Index on Columns'; - CREATE INDEX `COLUMNS_N49` ON COLUMNS - (CD_ID) - ; - SELECT 'Added index on Columns'; - ALTER TABLE COLUMNS_ - ADD CONSTRAINT `COLUMNS_FK1` - FOREIGN KEY (`CD_ID`) REFERENCES `CDS` (`CD_ID`) - ; - SELECT 'Added FK on Columns'; + RENAME TABLE `COLUMNS` TO `COLUMNS_OLD`; END $$ /* + * calls procedures that happen after migration + */ +CREATE PROCEDURE POST_MIGRATE() + BEGIN + call RENAME_OLD_COLUMNS(); + SELECT 'Renamed columns to old columns'; + END $$ + +/* * Main call for migration */ CREATE PROCEDURE MIGRATE() @@ -200,7 +233,11 @@ SELECT 'Completed migrating tables'; call MIGRATE_PARTITIONS(); SELECT 'Completed migrating partitions'; - /* Migrate indexes? */ + call MIGRATE_IDXS(); + SELECT 'Completed migrating idxs'; + call POST_MIGRATE(); + SELECT 'Completed post migrate'; END $$ + DELIMITER ;