vampire_heart 2022-04-13 11:17 采纳率: 33.3%
浏览 428

面试官:hive表有数据,但为什么impala查询不到数据?

1.问题描述
用insert overwrite方式往hive写入的数据,数据写入成功了,在hive查询是可以查到数据的,但在impala刷新元数据后,查询却没有查到,刚开始以为是元数据刷新不成功,再用命令
refresh table_name
刷新成功后还是没有数据,返回结果为空。
2.问题追溯
往hive表写入数据sql里使用了union all
3.解决方案
在写入数据sql 后面加上 distribute by + 表中字段 就可以了。

distribute by 具体用法怎么用

  • 写回答

1条回答 默认 最新

  • 老哥讲数据库 2022-04-13 12:18
    关注

    我猜测你把distribute by写在union外层了。比如insert overwrite select (selct a union select b union select c) distribute by cola。这种写法是可以的。
    原因应该是因为hive 对union本身的处理机制与impala的协议之间的缺陷导致。union 会在hive底层层出hdfs里多加一层目录存放每块数据,hive元数据中是清楚这个结构的,所以它自己能查到,而impala不知道还有hive这种骚操作,它读到第一层就不往下走了,没发现也没想到真正的数据在下一层,因此它查不到数据。在union外层加上distribute by,hive会把多个union的结果reduce后得到一个结果集,在此之上再根据distribute 去map数据到每个reduce,这样就不会在hdfs第一层之下再写一层数据,而是直接写在了数据层是第一层,impala这才发现了数据。
    你可以做一个测试,看看hdfs层是否是这样处理。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月13日

悬赏问题

  • ¥15 关于Finetune模型,CUDA error: device-side assert triggered 报错
  • ¥15 能将阿里云上多个设备的信息能上传给小程序吗
  • ¥50 QT6.7 Camera预览窗口,camera分辨率设置
  • ¥15 车机是安卓4.4.3,车机没有gps,我想用外置蓝牙gps。所以在用安卓模拟位置服务时候,我下载的相关软件不显示在列表里
  • ¥15 matlab水位控制系统(详解)
  • ¥15 CST软件仿真,已知中心线方程构建图形
  • ¥15 supLink 用户定位
  • ¥15 materials studio中sorption模块得到的吸附量如何计算出绝对吸附量和自由气量
  • ¥15 odoo17生产成品入出库会计日记账设置及自动产生会计分录
  • ¥15 MCU控制20V PWM波输出的控制电路