有啥方法可以使用单个分析命令计算所有分区的配置单元表的统计信息?

Posted

技术标签:

【中文标题】有啥方法可以使用单个分析命令计算所有分区的配置单元表的统计信息?【英文标题】:Any way to compute statistics on a hive table for all partitions with a single analyze command?有什么方法可以使用单个分析命令计算所有分区的配置单元表的统计信息? 【发布时间】:2013-08-29 16:08:53 【问题描述】:

我在 hive 中看到的用于计算统计数据的语法似乎表明标题问题的答案是“否”:

ANALYZE TABLE [TABLENAME] PARTITION(parcol1=…, partcol2=….) COMPUTE STATISTICS

但是,我想把它扔在这里,因为令人惊讶的是它总是需要编写一个脚本来迭代分区以生成每个分区的语句。我们现在在这个小表上有大约一千个分区,并且它将按数量级增长。

顺便说一句,我在没有指定分区的情况下尝试了以下操作:

hive> analyze table metrics compute statistics;
FAILED: SemanticException [Error 10115]: Table is partitioned and partition specification is needed

【问题讨论】:

【参考方案1】:

是的,你可以。

至少从我正在使用的 hive v0.13 开始。只需尝试没有特定值的分区规范语法(没有 =… 位)

如果您正在使用 FOR COLUMNS,那么您不能因为错误:https://issues.apache.org/jira/browse/HIVE-4861

【讨论】:

好的,我在 hive 11 是最新/最好的时候写了上面的内容。很高兴知道 13 年改进 投反对票的人 - 要有礼貌,至少要留下反馈……【参考方案2】:

我使用的是最新的 Hive 1.2,以下命令运行良好

hive> analyze table member partition(day) compute statistics noscan;
Partition mobi_mysql.memberday=20150831 stats: [numFiles=7, numRows=-1, totalSize=4735943322, rawDataSize=-1]
Partition mobi_mysql.memberday=20150901 stats: [numFiles=7, numRows=117512, totalSize=19741804, rawDataSize=0]
Partition mobi_mysql.memberday=20150902 stats: [numFiles=7, numRows=-1, totalSize=17734601, rawDataSize=-1]
Partition mobi_mysql.memberday=20150903 stats: [numFiles=7, numRows=-1, totalSize=13091084, rawDataSize=-1]
OK
Time taken: 2.089 seconds

【讨论】:

totalSize 值是什么意思? @user55570 这是该分区中文件的总大小。您可以使用 hadoop fs -ls $path_to_partition 检查它。它以字节为单位。 numRows 具有误导性或可能是此实用程序中的错误 谢谢。我认为这应该反映为 rawDataSize。如果这就是 totalSize 的意思,那么 rawDataSize 应该是什么?【参考方案3】:

根据 Hive 手册,如果您未指定分区规格,则会为整个表收集统计信息, https://cwiki.apache.org/confluence/display/Hive/StatsDev

When the user issues that command, he may or may not specify the partition specs. If the user doesn't specify any partition specs, statistics are gathered for the table as well as all the partitions (if any).

【讨论】:

是的,我明白了,但是在同一部分中也有这样的评论:“在计算所有分区的统计信息时,仍然需要列出分区列。”所以我建议包括 partition_columns(但没有 =vals)。

以上是关于有啥方法可以使用单个分析命令计算所有分区的配置单元表的统计信息?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在配置单元中的“显示分区表名”上使用限制原因吗

sqlserver 分区表有啥好处?

如何在针对特定 Gradle 构建风格的同时从命令行运行单个单元测试方法

面试问道lvm分区和标准分区 有啥区别

我可以将数据从一个配置单元分区移动到同一张表的另一个分区吗

在嵌套子查询中显示配置单元分区