hadoop-hive-关于IN与NOT IN

本文详细介绍了SQL中自关联和左外关联的概念,并通过具体实例展示了如何使用NOTIN进行左外关联操作,以及如何利用SQL查询语句解决实际问题。

此为自关联, NOT IN 则需要左外关联,u_sina.user is null;


echo a,sinax,1 >> USER_URL_VAL.txt

echo a,163x,2 >> USER_URL_VAL.txt
echo a,sohu,3 >> USER_URL_VAL.txt
echo b,sinax,4 >> USER_URL_VAL.txt
echo b,haha,5 >> USER_URL_VAL.txt
echo a,sinoix,6 >> USER_URL_VAL.txt

create table user_url_val (user string, url string, val string) row format delimited fields temporary by ','; 

load data local inpath '/tmp/USER_URL_VAL.txt' into table user_url_val;  

select * from user_url_val u join
(select user from user_url_val where url='163x') u_sina
on u.user=u_sina.user
where u.url='sinax';

a sinax 1 a


select * from user_url_val u left outer join 
(select user from user_url_val where url='163x') u_sina
on u.user=u_sina.user
where u.url='sinax' and u_sina.user is null;

b sinax 4 NULL

<think>我们正在解决Hiveschematool升级元数据库时出现的"CouldnotfindversioninfoinmetastoreVERSIONtable"错误。这个错误通常发生在元数据库中没有版本记录,导致升级无法确定当前版本。根据引用[1]中提到的信息,这个问题可能元数据库中的VERSION表缺少记录有关。在Hive的早期版本中,可能没有正确初始化VERSION表,或者升级过程中出现了问题。解决方案如下:###一、手动插入版本记录1.**确定当前Hive版本对应的schema版本**每个Hive版本都有对应的schema版本号,例如Hive3.1.3的schema版本为`3.1.3000`(可在Hive源码的`hive-metastore/src/main/scripts/upgrade/mysql`目录下的升级脚本文件名中找到)。2.**登录MySQL元数据库**```bashmysql-uhiveuser-p```3.**选择Hive元数据库**```sqlUSEhive;```4.**检查VERSION表是否存在**```sqlSHOWTABLESLIKE'VERSION';```如果表不存在,需要先创建(通常不会不存在,因为schematool初始化时会创建)。5.**插入版本记录**假设当前要升级到的目标版本是`3.1.3000`,执行:```sqlINSERTINTOVERSION(VER_ID,SCHEMA_VERSION,VERSION_COMMENT)VALUES(1,'3.1.3000','ManualinitialversionforHive3.1.3');```如果表中已有数据但版本信息缺失,可以先删除旧记录:```sqlDELETEFROMVERSION;```###二、使用schematool初始化(仅适用于全新安装)**注意**:此操作会清空现有元数据,仅适用于全新安装或测试环境!```bashschematool-dbTypemysql-initSchema```###三、升级元数据库插入版本记录后,重新执行升级命令:```bashschematool-dbTypemysql-upgradeSchema```###四、验证版本登录MySQL查看VERSION表:```sqlSELECT*FROMVERSION;```应显示类似结果:```+--------+----------------+-----------------------------------------+|VER_ID|SCHEMA_VERSION|VERSION_COMMENT|+--------+----------------+-----------------------------------------+|1|3.1.3000|ManualinitialversionforHive3.1.3|+--------+----------------+-----------------------------------------+```###五、错误排查如果升级过程中出现其他错误,检查:1.**MySQL用户权限**:确保hiveuser拥有对`hive`数据库的完整权限。2.**Hive配置**:确认`hive-site.xml`中的元数据库连接信息正确。3.**版本兼容性**:确保升级路径符合Hive官方要求(例如不能从1.x直接升级到3.x,需要逐步升级)。>**重要提示**:生产环境操作前务必备份元数据库[^1]!```mermaidgraphTDA[开始]-->B{是否存在VERSION表?}B-->|是|C[检查版本记录]B-->|否|D[创建VERSION表]C-->E{是否有版本记录?}E-->|有|F[检查版本号]E-->|无|G[手动插入版本记录]F-->|版本过低|H[执行升级]F-->|版本匹配|I[完成]G-->HD-->GH-->J[升级成功?]J-->|是|IJ-->|否|K[查看错误日志]K-->L[根据日志修复]L-->H```§§相关问题§§1.如何备份Hive元数据库?2.Hive元数据库版本升级路径有哪些限制?3.如何解决升级过程中的SQL脚本执行错误?4.Hive3.x元数据库Hive2.x的主要区别是什么?[^1]:Hive官方元数据管理文档https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-HiveSchemaTool</think>### Hive schematool 升级元数据库出现 "Could not find version info in metastore VERSION table" 错误解决方案 #### 一、问题原因分析 此错误表明 Hive 无法在元数据库的 `VERSION` 表中找到版本信息,通常由以下原因导致: 1. **首次初始化问题**:新安装的 Hive 元数据库未正确初始化[^1] 2. **版本表损坏**:`VERSION` 表被意外删除或数据损坏 3. **权限不足**:MySQL 用户缺少对元数据库的读写权限 4. **模式不匹配**:Hive 二进制版本元数据库版本不兼容 #### 二、完整解决步骤 ##### 1. 手动创建 VERSION 表 ```sql -- 登录MySQL元数据库 mysql -u hive_user -p -- 创建VERSION表(根据Hive版本选择) -- Hive 3.x 版本: CREATE TABLE IF NOT EXISTS VERSION ( VER_ID BIGINT NOT NULL PRIMARY KEY, SCHEMA_VERSION VARCHAR(127) NOT NULL, VERSION_COMMENT VARCHAR(255) ); -- Hive 1.x/2.x 版本: CREATE TABLE IF NOT EXISTS VERSION ( VER_ID INT NOT NULL PRIMARY KEY, SCHEMA_VERSION VARCHAR(127) NOT NULL, VERSION_COMMENT VARCHAR(255) ); ``` ##### 2. 插入初始版本记录 ```sql -- 根据实际Hive版本插入记录(示例为Hive 3.1.3) INSERT INTO VERSION (VER_ID, SCHEMA_VERSION, VERSION_COMMENT) VALUES (1, '3.1.3000', 'Manual initialization'); ``` ##### 3. 验证元数据库状态 ```sql SELECT * FROM VERSION; ``` 预期输出: ``` +--------+----------------+----------------------+ | VER_ID | SCHEMA_VERSION | VERSION_COMMENT | +--------+----------------+----------------------+ | 1 | 3.1.3000 | Manual initialization| +--------+----------------+----------------------+ ``` ##### 4. 执行模式升级 ```bash # 使用schematool升级 $HIVE_HOME/bin/schematool -dbType mysql -upgradeSchema ``` ##### 5. 权限问题修复 如果出现权限错误: ```sql GRANT ALL PRIVILEGES ON hive.* TO 'hive_user'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES; ``` #### 三、故障排查流程图 ```mermaid graph TD A[出现错误] --> B{检查VERSION表是否存在?} B -->|不存在| C[手动创建表并插入版本] B -->|存在| D{表中有数据?} D -->|无数据| E[插入初始版本记录] D -->|有数据| F{版本号匹配?} F -->|不匹配| G[更新为正确版本号] F -->|匹配| H[检查MySQL权限] H --> I[验证用户权限] I --> J[重新执行升级] J --> K[成功完成] ``` #### 四、预防措施 1. **初始化最佳实践**: ```bash # 首次初始化时添加-verbose参数 schematool -dbType mysql -initSchema -verbose ``` 2. **元数据库备份**: ```bash mysqldump -u root -p hive > hive_meta_backup_$(date +%F).sql ``` 3. **版本兼容性检查**: ```bash # 检查支持的升级路径 schematool -dbType mysql -info ``` > **重要提示**:生产环境操作前务必备份元数据库!如果从旧版本升级,需按顺序执行中间版本升级脚本[^1]。 #### 五、版本对照表 | Hive 版本 | 应插入的 SCHEMA_VERSION | |-----------|-------------------------| | 3.1.x | 3.1.3000 | | 3.0.x | 3.0.0 | | 2.3.x | 2.3.0 | | 1.2.x | 1.2.0 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值