apache-spark - 使用 hive 和 spark 选择 count(*) 问题
问题描述
运行 ANALYZE 语句后,我得到了正确的计数。但我的问题是,每次更新计数时都需要运行它。从技术上讲,我应该能够更新同一分区的计数。
但如果我不执行 ANALYZE 语句,它会返回相同的计数。
这是我为更新计数而执行的查询。
ANALYZE TABLE bi_events_identification_carrier_sam PARTITION(year, month, day) COMPUTE STATISTICS;
而且执行起来一点也不方便。有任何想法吗?
解决方案
您的 count(*) 查询正在使用统计信息来获取结果。
如果您使用spark写入数据,则可以设置spark.sql.statistics.size.autoUpdate.enabled
为true
. 这可以确保 Spark 在写入完成后自动更新表统计信息。
如果您使用 Hive,则可以设置set hive.stats.autogather=true;
.
启用这些设置后,写入查询将自动更新统计信息,随后的读取查询将正常工作。
推荐阅读
- swift - 使用工作表对话框时 AVCaptureSession 不可见
- scala - 返回第一个的函数 Non-None Optional
- opengl - OpenGL:在背景图像上使用蒙版绘制颜色
- java - Postgresql:使用 Hibernate 通过 Java 代码调用存储过程
- sql - 将标题值转换为具有值的行
- javascript - Angular8表单输入字段已禁用
- mysql - 关于触发条件更新的问题
- c# - 当字符串以与方向无关的字符(例如括号)结尾时解析 rtl 语言的问题
- ruby-on-rails - 如何在 rails_admin 中隐藏特定类型的用户?
- llvm - LLVM IR for 循环