如何使用配置单元从所有表中获取行数。我对数据库名称,表名和行数感兴趣
答案 0 :(得分:20)
你需要做一个
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),其中包含数据库中所有表的计数
答案 1 :(得分:3)
获得表中所有行的近似计数的一种快得多的方法是在表上运行explain。在其中一个解释条款中,它显示了如下行计数:
TableScan [TS_0] (rows=224910 width=78)
好处是您实际上并没有花费集群资源来获取该信息。
答案 2 :(得分:1)
select count(*) from table
我认为没有更有效的方式。
答案 3 :(得分:0)
您也可以在同一命令中设置数据库,并与;
分开。
hive -e 'use myDatabase;show tables'
答案 4 :(得分:0)
尝试这些人自动化 - 在运行bash filename.sh
之后放入shellhive -e&#39;从table1中选择count(distinct fieldid),其中extracttimestamp&lt;&#39; 2018-04-26&#39;&#39; &GT; sample.out
hive -e&#39;从table2中选择count(distinct fieldid),其中day =&#39; 26&#39;&#39; &GT; sample.out
LC = cat sample.out | uniq | wc -l
如果[$ lc -eq 1];然后
回声&#34; PASS&#34;
其他
回声&#34;失败&#34;
网络
答案 5 :(得分:0)
如何在下面的代码段中提及需要引用的特定数据库:
while read line
do
echo "$line "
eval "hive -e 'select count(*) from $line'"
done
答案 6 :(得分:0)
您可以使用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/
答案 7 :(得分:0)
这是我写的使用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))