是否有Hive查询可以快速查找表大小(即行数)而无需启动耗时的MapReduce作业? (这就是为什么我要避免COUNT(*)
。)
我尝试了DESCRIBE EXTENDED
,但这产生了numRows=0
,这显然不正确。
(对于新问题抱歉。我尝试使用Google搜索和搜索apache.org文档但没有成功。)
答案 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
),它提供比之前更好的延迟。