选择Hive和Spark的count(*)问题

时间:2018-09-12 15:18:54

标签: apache-spark hive apache-spark-sql hiveql

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

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

这是我要更新计数的查询。

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

执行根本不方便。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

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