gpt4 book ai didi

java - Hive 表计数通过 java JDBC 驱动程序显示为 0

转载 作者:行者123 更新时间:2023-12-01 18:12:49 26 4
gpt4 key购买 nike

当我通过 java 从 JDBC 访问 Hive 表时,我得到 0 条记录。但来自 beeline 的相同查询工作正常并显示一些数字。可能是什么原因。?

最佳答案

您看到的行为可能是由于 HiveMetastore 中某些表的统计数据过时以及查询引用了这些表造成的。

要对此进行测试,您可以通过在 Beeline-Hive 和 JDBC 客户端 session 上运行 set hive.compute.query.using.stats; 来检查该属性设置的值是否为 TRUE或假。

如果为 TRUE,查询将从 HiveMetastore 获取统计信息。 (这通常更快,因为它从 HiveMetastore 获取计数,而不是通过执行 MapReduce 作业。但如果表的统计信息未在 HiveMetastore 中更新,它可能会返回不正确/过时的计数)

如果为 FALSE,查询将运行 MapReduce 作为执行的一部分,并根据 HDFS 中数据文件中存在的记录进行计数。与前一个相比,这很耗时,但返回的结果准确。

解决方案:

  1. 您可以通过在 Beeline-Hive 和 JDBC 客户端 session 中运行以下语句将属性 hive.compute.query.using.stats 设置为 false。这样,Hive 将通过 MapReduce 作业根据 HDFS 中存在的数据执行计数。
set hive.compute.query.using.stats=false;

或者

  • 通过在 Beeline-Hive 或 JDBC 客户端 session 中运行以下语句来手动计算表的统计信息。这将使用更新的统计信息更新 HiveMetastore。此后 count(*) 应在该表的任何 Hive session 中返回正确的结果。
  • ANALYZE TABLE <database_name>.<table_name> COMPUTE STATISTICS;

    希望这有帮助!

    关于java - Hive 表计数通过 java JDBC 驱动程序显示为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60433087/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com