问题描述
使用sparksql查询hive数据表,第一个表查询出了,第二个表查询出了,第三个查询…居然没有结果🤨🤨🤨,奇怪了,接着使用hive查询了一下这个表,发现是有数据的.
问题分析
表和表之间有差异?确实有
hive分为内表和外表
- 内表 元数据和数据都由hive管理
- 外部表 元数据hive管理,数据hdfs管理
很可能问题就是出在了这里…
然后就一顿百度💪💪💪
终于找到了问题的原因:
🍊🍊🍊🍊🍊
hive 默认生成的内表是事务表(ACID),而spark目前不支持ACID,所以就读取不到
hive3.0默认开启了事务表,之前是不会出现这种状况的
🍊🍊🍊🍊🍊
问题解决
修改hive的创建内表机制,让它不是事务表
hive.strict.managed.tables=false
hive.create.as.insert.only=false
metastore.create.as.acid=false