分享

hive-0.8 升级hive schme 到0.10,不能创建表 PART_COL_STATS

zhouguanwu 发表于 2014-8-14 00:11:39 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 11539
hive-0.8升级 到hive-0.10错误,不能创建表:
ERROR 1005 (HY000): Can't create table 'hive.PART_COL_STATS' (errno: 150)

1、hive-0.8 和hive0.9版本元数据schme通用结构,故直接升级的时候执行:
upgrade-0.9.0-to-0.10.0.mysql.sql
upgrade-0.9.0-to-0.10.0.mysql.sql 包含下面三个sql:
SELECT 'Upgrading MetaStore schema from 0.9.0 to 0.10.0' AS ' ';
SOURCE 010-HIVE-3072.mysql.sql;
SOURCE 011-HIVE-3649.mysql.sql;
SOURCE 012-HIVE-1362.mysql.sql;
SELECT 'Finished upgrading MetaStore schema from 0.9.0 to 0.10.0' AS ' ';
-----------------
SOURCE 010-HIVE-3072.mysql.sql;
SOURCE 011-HIVE-3649.mysql.sql;  执行都ok。


012-HIVE-1362.mysql.sql; 内容如下:创建【TAB_COL_STATS】ok,创建【PART_COL_STATS】提示不能创建,是主键类型或那不对关联不上吗
CREATE TABLE IF NOT EXISTS `TAB_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,
`COLUMN_NAME` varchar(128) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`COLUMN_TYPE` varchar(128) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`TBL_ID` bigint(20) NOT NULL,
`LONG_LOW_VALUE` bigint(20),
`LONG_HIGH_VALUE` bigint(20),
`DOUBLE_LOW_VALUE` double(53,4),
`DOUBLE_HIGH_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 `TAB_COL_STATS_FK` FOREIGN KEY (`TBL_ID`) REFERENCES `TBLS` (`TBL_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


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_LOW_VALUE` double(53,4),
`DOUBLE_HIGH_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;


有朋友遇到相同问题吗,求指教、谢谢!


已有(5)人评论

跳转到指定楼层
gefieder 发表于 2014-8-14 10:17:00
先一步步排查:
试一下下面语句,如果成功,说明跟升级没有关系。确定应该是你sql的问题。
create table table_name (
  id                int,
  dtDontQuery       string,
  name              string
)

回复

使用道具 举报

sstutu 发表于 2014-8-14 11:03:19
本帖最后由 sstutu 于 2014-8-14 11:06 编辑
PART_ID是你本身的字段,不是外键
回复

使用道具 举报

hyj 发表于 2014-8-14 11:06:36
多了这么一个,你先去掉试试。
`PARTITION_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
回复

使用道具 举报

zhouguanwu 发表于 2014-8-15 13:20:33
gefieder 发表于 2014-8-14 10:17
先一步步排查:
试一下下面语句,如果成功,说明跟升级没有关系。确定应该是你sql的问题。
create table  ...

执行你给的例子,是可以的;sql 问题,能给个具体思路吗?

回复

使用道具 举报

howtodown 发表于 2014-8-15 17:29:57
zhouguanwu 发表于 2014-8-15 13:20
执行你给的例子,是可以的;sql 问题,能给个具体思路吗?

如果不能一眼看出来,告诉你个笨方法吧,你一个个字段增加,或则有规律的两个或则三个。这样就能找到问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条