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

大数据 数据分析
我们知道,distribute 是分配、分布的意思,顾名思义,hive中(distribute by + “表中字段”)关键字就是控制map输出结果的分发,相同字段的map输出会发到一个reduce节点去处理。

张工是一名程序员,做java开发的,有两年多开发经验,有次到一家软件公司应聘大数据开发岗位,面试官问了他这样一个问题。

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

你能说说这是什么情况导致的,有什么办法解决方案吗?

对于这个问题,我们不妨来回顾下,什么情况下hive表有数据,但impala没有数据的情况。

1. 问题描述

用insert overwrite方式往hive写入的数据,数据写入成功了,在hive查询是可以查到数据的,但在impala刷新元数据后,查询却没有查到,刚开始以为是元数据刷新不成功,再用命令

invalidate metadata table_name
refresh table_name

刷新成功后还是没有数据,返回结果为空。

2.问题追溯

往hive表写入数据sql里使用了union ,导致hdfs目录结构多了一层,本来数据是在分区第一层的,使用了union 后,数据存储到分区底下的文件夹了。

导致impala无法访问到具体数据。impala版本2.12,查看impala版本命令(impala-shell -v)

3.解决方案

在写入数据sql 后面加上 distribute by + 表中字段 就可以了。

这是为什么呢,为什么加上distribute by +表中字段 就可以了。

我们知道,distribute 是分配、分布的意思,顾名思义,hive中(distribute by + “表中字段”)关键字就是控制map输出结果的分发,相同字段的map输出会发到一个reduce节点去处理。

总结

hive表有数据,impala表没有数据,检查是否刷新元数据,操作命令:

invalidate metadata

refresh table_name。已经成功刷新元数据了,impala依然没有数据, 检查写入hive sql 是否使用union方式,如果是,在sql 后面加上(distribute by + 表中字段 )。

拓展:

distribute by、sort by、cluster by

责任编辑:武晓燕 来源: 爱开发
相关推荐

2022-07-06 13:48:24

RedisSentinel机制

2023-12-06 09:10:28

JWT微服务

2021-01-21 07:53:29

面试官Promis打印e

2020-10-24 15:50:54

Java值传递代码

2021-02-19 10:02:57

HTTPSJava安全

2021-07-20 10:45:50

数据库MySQLdelete

2021-07-06 07:08:18

管控数据数仓

2021-12-20 10:30:33

forforEach前端

2023-12-20 14:35:37

Java虚拟线程

2023-06-05 07:57:53

Kafka消息事务消息

2022-12-22 14:32:37

JavaScript编程语言

2024-08-28 11:23:33

2022-12-27 08:39:54

MySQL主键索引

2023-07-05 08:17:38

JDK动态代理接口

2018-10-22 14:28:26

面试官数据公司

2024-09-19 08:10:54

2024-11-14 09:29:38

2021-09-07 10:44:33

Java 注解开发

2020-08-24 10:55:41

数据库双写代码

2020-12-23 13:29:15

微服务架构面试官
点赞
收藏

51CTO技术栈公众号