hive中查询数据为NULL,impala中查询数据可以正常显示

事情起因:

                生产环境新接了一张表,该表的处理过程是 上游将数据推送至kafka,然后flink消费kafka的数据,flink直接将消费的数据写到hdfs上指定的hive表空间下面,写入完成后通过msck repair table table_name修复一下表,即可在hive和impala中正常显示。

                但问题出现在flink写入表的时候,代码中的属性名称和hive表中的属性名称不匹配,即代码中叫value,而hive建表时叫value2。此时数据正常存放到hdfs上的hive表空间下面,但数据在hive中查询时value2字段显示为NULL,impala中可以正常显示具体的值。

解决办法:

                该表的存储压缩格式是parquet的,在解决过程中尝试新建备份表,通过insert into select 源表的方式,或者是create table as select的方式,均无法在新建表中查询到具体的数据,同时在impala中也不再显示数据。

                最后通过添加了set参数,即可在hive原表中显示数据,命令为:

set parquet.column.index.access=true

原因是:Impala是以序号形式读取parquet,而Hive是以列形式读取parquet 。

最后:

                  问题已经定位并且解决,但作为开发人员之外的人还是无法看到这个结果。所以后续还是需要修改hive表结构,使其代码中的属性名和hive表的字段名相对应。

写在最后:

        1.所有写到hdfs上的内容都需要进行匹配(目前仅测试了parquet格式下的),包含flink、spark或者是sqoop等,如果导入的数据的列名与Hive建表时定义的列名不一致,会导致Hive中查询到数据为null,因为Hive默认使用列名来访问Parqeut数据文件,可以通过参数 set parquet.column.index.access=true 来修改访问方式。

        2.在Hive和Impala中,默认访问Parquet数据文件的方式不一样,Hive是以列名,Impala是以位置,这一点需要注意。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值