Hive查询快速查找表大小(行数)

时间:2014-01-18 19:04:42

标签: hadoop hive

是否有Hive查询可以快速查找表大小(即行数)而无需启动耗时的MapReduce作业? (这就是为什么我要避免COUNT(*)。)

我尝试了DESCRIBE EXTENDED,但这产生了numRows=0,这显然不正确。

(对于新问题抱歉。我尝试使用Google搜索和搜索apache.org文档但没有成功。)

6 个答案:

答案 0 :(得分:34)

tblproperties将给出表的大小,并且可以在需要时用于获取该值。

-- gives all properties
show tblproperties yourTableName

-- show just the raw data size
show tblproperties yourTableName("rawDataSize")

答案 1 :(得分:27)

这是快速命令

ANALYZE TABLE tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [noscan];

例如,如果表已分区

 hive> ANALYZE TABLE ops_bc_log PARTITION(day) COMPUTE STATISTICS noscan;

输出

Partition logdata.ops_bc_log {day = 20140523} stats:[numFiles = 37,numRows = 26095186,totalSize = 654249957,rawDataSize = 58080809507]

Partition logdata.ops_bc_log {day = 20140521} stats:[numFiles = 30,numRows = 21363807,totalSize = 564014889,rawDataSize = 47556570705]

分区logdata.ops_bc_log {day = 20140524} stats:[numFiles = 35,numRows = 25210367,totalSize = 631424507,rawDataSize = 56083164109]

Partition logdata.ops_bc_log {day = 20140522} stats:[numFiles = 37,numRows = 26295075,totalSize = 657113440,rawDataSize = 58496087068]

所用时间:5.252秒

答案 2 :(得分:8)

如何使用:

    hdfs dfs -du -s -h /path/to/table/name

答案 3 :(得分:1)

解决方案,虽然不是很快 如果表是分区的,我们可以计算每个分区中的分区数和计数(行数) 例如:,如果按日期分区(mm-dd-yyyy)

select partition_date, count(*) from <table_name> where <partion_column_name> >= '05-14-2018' group by <partion_column_name>

答案 4 :(得分:-1)

使用镶木地板格式存储外部/内部表格的数据。然后你会得到更快的结果。

答案 5 :(得分:-7)

这是一个很好的问题。计数()将花费很多时间来查找结果。但不幸的是,count()是唯一的方法。

还有一种替代方法(不能说是替代但比上述情况更好的延迟):

设置属性

设置hive.exec.mode.local.auto = true;

并运行相同的命令(select count(*) from tbl),它提供比之前更好的延迟。