是否存在Hive查询以快速查找表大小(即行数)而不启动耗时的MapReduce作业? (这就是为什么我想避免COUNT(*)
。)Hive查询快速查找表大小(行数)
我试过DESCRIBE EXTENDED
,但是产生了numRows=0
这显然是不正确的。
(很抱歉没能福利局问题,我试着用搜索引擎和搜索没有成功apache.org文档)。
是否存在Hive查询以快速查找表大小(即行数)而不启动耗时的MapReduce作业? (这就是为什么我想避免COUNT(*)
。)Hive查询快速查找表大小(行数)
我试过DESCRIBE EXTENDED
,但是产生了numRows=0
这显然是不正确的。
(很抱歉没能福利局问题,我试着用搜索引擎和搜索没有成功apache.org文档)。
它是一个很好的问题。计数()将花费很多时间来查找结果。但不幸的是()是唯一的办法。
还存在另一种方式(不能说比上面的情况下备用但更好等待时间):
设置属性 组hive.exec.mode.local.auto = TRUE;
并运行相同的命令(从tbl中选择count(*)),这会提供比以前更好的延迟。
确实有其他方法。见下面的其他答案。 –
这里是快速命令
ANALYZE TABLE tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [noscan];
例如,如果表已分区
hive> ANALYZE TABLE ops_bc_log PARTITION(day) COMPUTE STATISTICS noscan;
输出是
分区logdata.ops_bc_log {天= 20140523}统计:[numFiles = 37,numRows = 26095186,totalSize = 654249957,rawDataSize = 58080809507]
Part银行足球比赛logdata.ops_bc_log {天= 20140521}统计:[numFiles = 30,= numRows行21363807,总计TOTALSIZE = 564014889,rawDataSize = 47556570705]
分区logdata.ops_bc_log {天= 20140524}统计:[numFiles = 35,= numRows行25210367,总计TOTALSIZE = 631424507,rawDataSize = 56083164109]
分区logdata.ops_bc_log {天= 20140522}统计:[numFiles = 37,= numRows行26295075,总计TOTALSIZE = 657113440,rawDataSize = 58496087068]
行
所用时间:5.252秒
请注意,根据[文档](https://cwiki.apache.org/confluence/display/Hive/StatsDev),“noscan”参数将阻止扫描文件以获取正确的行数。你会得到总大小。在你的情况下,它可能已经工作,因为你正在通过配置收集统计信息。 –
@DanielLangdon是rawDataSize字节,块或其他的单位吗? – dlamblin
使用实木复合地板格式来存储外部/内部表格的数据。那么你会得到更快的结果。
有关使用方法:
hdfs dfs -du -s -h /path/to/table/name
检查此[链接](https://stackoverflow.com/a/45304801/7043815)!希望它有助于:) –