Parquet格式表重命名列名后Hive查询列数据显示NULL异常分析

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

Fayson的github:https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1.问题描述


使用Hive创建的Parquet格式的表,在重命名表的列名后,查询重名的列数据时显示当前列所有值为NULL。

2.问题复现


测试环境:

  • CM和CDH版本为5.13.1
  • Impala版本为2.10.0
  • Hive版本为1.1.0

1.使用如下建表语句创建一个parquet格式的表

create table test_parquet(
  id int,
  name String
)
stored as parquet;

(可左右滑动)

2.向表中插入测试数据

insert into test_parquet values(1,'fayson'),(2,'fayson2'),(3,'fayson3');

(可左右滑动)

3.执行如下SQL修改test_parquet表的name列名为new_name

alter table test_parquet change name new_name string;

(可左右滑动)

在使用Impala执行查询时,被修改的列的数据正常显示。

4.使用Hive查询test_parquet表数据

通过如上操作问题复现。

3.解决方法


有两种解决方法,临时生效的方式或永久生效的方式:

1.在Hive的当前会话设置parquet.column.index.access=true属性

set parquet.column.index.access=true;

(可左右滑动)

通过在当前Hive的会话设置paruqet.column.index.access=true,查询结果正常。

2.通过修改表的属性方式,执行如下SQL

ALTER TABLE test_parquet SET TBLPROPERTIES ('parquet.column.index.access'='true');

(可左右滑动)

test_parquet表的数据正常显示

4.总结


  • 在Impala中parquet.column.access.index默认为true,但在Hive中该属性默认为False,所以需要在当前会话设置该属性为true或在建表属性中增加该属性为true
  • 创建Parquet格式的外部表和内部表在修改列名成后均会出现该问题。

参考:

https://issues.apache.org/jira/browse/HIVE-6938

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-04-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop实操

Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)

Hive表中存储的Timestamp类型的字段日期显示与Impala中查询出来的日期不一致。关于这个问题前面Fayson也讲过《Hive中的Timestamp类...

3.4K80
来自专栏Hadoop实操

Hive中的Timestamp类型日期与Impala中显示不一致分析

Hive表中存储的Timestamp类型的字段显示日期与Impala中查询出来的日期不一致。

80060
来自专栏互联网技术栈

Hive介绍与核心知识点

Facebook为了解决海量日志数据的分析而开发了Hive,后来开源给了Apache软件基金会。

19440
来自专栏个人分享

SparkSQL项目中的应用

Spark是一个通用的大规模数据快速处理引擎。可以简单理解为Spark就是一个大数据分布式处理框架。基于内存计算的Spark的计算速度要比Hadoop的MapR...

14630
来自专栏Hadoop实操

如何通过Tableau连接Kerberos的Hive/Impala

昨天Fayson写了一篇《如何安装Tableau并连接CDH的Hive/Impala》,后台关注人数当天增加了40人,有点大大超过Fayson的预期,首先还是谢...

2.4K110
来自专栏Hadoop实操

如何使用Oozie API接口向Kerberos环境的CDH集群提交Spark作业

在CDH集群外的节点向集群提交Spark作业的方式有多种,前面Fayson介绍了Livy相关的文章主要描述如何在集群外节点通过RESTful API接口向CDH...

48270
来自专栏Hadoop实操

如何使用HAProxy实现Kerberos环境下的Impala负载均衡

前面Fayson介绍过《如何使用HAProxy实现Impala的负载均衡》,在Kerberos环境HAProxy的配置与非Kerberos环境下是一样的,只是在...

57350
来自专栏Hadoop实操

如何使用Oozie API接口向Kerberos环境的CDH集群提交Spark2作业

前面Fayson介绍了多种方式在CDH集群外的节点向集群提交Spark作业,文章中均采用Spark1来做为示例,本篇文章主要介绍如何是用Oozie API向Ke...

1.4K40
来自专栏Hadoop实操

如何安装Tableau并连接CDH的Hive/Impala

Tableau是桌面系统中的商业智能工具软件,可以基于不同的数据源生成漂亮的图表。Cloudera与Tableau是互相认证的合作伙伴,在Tableau的数据源...

1.1K90
来自专栏Hadoop实操

如何使用Oozie API接口向非Kerberos环境的CDH集群提交Spark作业

在CDH集群外的节点向集群提交Spark作业的方式有多种,前面Fayson介绍了Livy相关的文章主要描述如何在集群外节点通过RESTful API接口向CDH...

35870

扫码关注云+社区

领取腾讯云代金券