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
    评论
ImpalaHive,正则表达式的使用有一些差异。在Impala,可以使用regexp函数进行正则匹配,而在Hive,可以使用regexp或regexp_extract函数进行正则匹配。 在Impala,可以使用regexp函数进行字符串匹配,语法为regexp(subject, pattern),subject为被匹配的字符串,pattern为正则表达式。而在Hive,除了regexp函数外,还有regexp_extract函数,语法为regexp_extract(subject, pattern, index),subject为被匹配的字符串,pattern为正则表达式,index为匹配到的字符串的索引。 此外,在Impala,还提供了regexp_replace函数用于正则替换,语法为regexp_replace(subject, pattern, str),subject为被替换的字符串,pattern为正则表达式,str为替换正则表达式匹配到的字符串的字符串。 需要注意的是,如果subject为空、pattern为空,或者pattern匹配不到字符串,则返回值为空。 综上所述,ImpalaHive在正则表达式的使用上有一些差异,包括函数名称和部分语法细节。因此,在使用正则表达式时,需要根据具体的数据库和版本来选择适当的函数和语法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [hive--正则匹配](https://blog.csdn.net/qq_46893497/article/details/118327619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Hive正则表达式替换函数 regexp_replace和正则表达式解析函数 regexp_extract的用法总结](https://blog.csdn.net/TinyNasubi/article/details/102726927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值