首页 > 解决方案 > 使用 hive 和 spark 选择 count(*) 问题

问题描述

运行 ANALYZE 语句后,我得到了正确的计数。但我的问题是,每次更新计数时都需要运行它。从技术上讲,我应该能够更新同一分区的计数。

但如果我不执行 ANALYZE 语句,它会返回相同的计数。

这是我为更新计数而执行的查询。

ANALYZE TABLE bi_events_identification_carrier_sam PARTITION(year, month, day) COMPUTE STATISTICS;

而且执行起来一点也不方便。有任何想法吗?

标签: apache-sparkhiveapache-spark-sqlhiveql

解决方案


您的 count(*) 查询正在使用统计信息来获取结果。

如果您使用spark写入数据,则可以设置spark.sql.statistics.size.autoUpdate.enabledtrue. 这可以确保 Spark 在写入完成后自动更新表统计信息。

如果您使用 Hive,则可以设置set hive.stats.autogather=true;.

启用这些设置后,写入查询将自动更新统计信息,随后的读取查询将正常工作。


推荐阅读