【发布时间】:2014-02-20 07:21:51
【问题描述】:
如何使用 hive 从所有表中获取行数?我对数据库名、表名和行数感兴趣
【问题讨论】:
-
检查这个link希望它有帮助!!
如何使用 hive 从所有表中获取行数?我对数据库名、表名和行数感兴趣
【问题讨论】:
你需要做一个
select count(*) from table
适用于所有表格。
要自动执行此操作,您可以制作一个小型 bash 脚本和一些 bash 命令。 第一次运行
$hive -e 'show tables' | tee tables.txt
这会将数据库中的所有表存储在文本文件tables.txt中
创建一个包含以下内容的 bash 文件 (count_tables.sh)。
while read line
do
echo "$line "
eval "hive -e 'select count(*) from $line'"
done
现在运行以下命令。
$chmod +x count_tables.sh
$./count_tables.sh < tables.txt > counts.txt
这将创建一个文本文件(counts.txt),其中包含数据库中所有表的计数
【讨论】:
INSERT INTO TABLE table SELECT row FROM another_table 之后运行它时,我只得到添加的行数,而不是表中的总行数,你怎么才能总是得到总行数?跨度>
获取表中所有行的近似计数的更快方法是对表运行解释。在其中一个解释子句中,它显示如下所示的行数:
TableScan [TS_0] (rows=224910 width=78)
好处是您实际上并没有花费集群资源来获取该信息。
HQL 命令为 explain select * from table_name;,但未优化时不显示行在 TableScan 中。
【讨论】:
explain table db.table;?因为那是无效的。
select count(*) from table
我认为没有更有效的方法了。
【讨论】:
INSERT INTO TABLE table SELECT row FROM another_table 之后运行它时,我只得到添加的行数,而不是表中的总行数,你怎么才能总是得到总行数?跨度>
您可以使用 Hive ANALAYZE 命令收集有关表的统计信息。基于 Hive 成本的优化器利用这些统计数据来创建最佳执行计划。
以下是计算 Hive 表统计信息的示例:
hive> ANALYZE TABLE stud COMPUTE STATISTICS;
Query ID = impadmin_20171115185549_a73662c3-5332-42c9-bb42-d8ccf21b7221
Total jobs = 1
Launching Job 1 out of 1
…
Table training_db.stud stats: [numFiles=5, numRows=5, totalSize=50, rawDataSize=45]
OK
Time taken: 8.202 seconds
链接: http://dwgeek.com/apache-hive-explain-command-example.html/
【讨论】:
尝试让这些人自动化——在运行 bash filename.sh 之后放入 shell
hive -e 'select count(distinct fieldid) from table1 where extracttimestamp sample.out
hive -e 'select count(distinct fieldid) from table2 where day='26'' > sample.out
lc=cat sample.out | uniq | wc -l
如果 [ $lc -eq 1 ];然后
回声“通过”
别的
回声“失败”
菲
【讨论】:
下面sn-p中如何提及需要引用的具体数据库:
while read line
do
echo "$line "
eval "hive -e 'select count(*) from $line'"
done
【讨论】:
这是我写的一个使用 python 的解决方案:
import os
dictTabCnt={}
print("=====Finding Tables=====")
tableList = os.popen("hive --outputformat=dsv --showHeader=false -e \"use [YOUR DB HERE]; show tables;\"").read().split('\n')
print("=====Finding Table Counts=====")
for i in tableList:
if i <> '':
strTemp = os.popen("hive --outputformat=dsv --showHeader=false -e \"use [YOUR DB HERE]; SELECT COUNT(*) FROM {}\"".format(i)).read()
dictTabCnt[i] = strTemp
print("=====Table Counts=====")
for table,cnt in dictTabCnt.items():
print("{}: {}".format(table,cnt))
【讨论】:
select count(*) from table
您也可以在同一命令中设置数据库,并用;分隔。
hive -e 'use myDatabase;show tables'
【讨论】: