从配置单元中的所有表中获取行数

时间:2014-02-20 07:21:51

标签: hql hive

如何使用配置单元从所有表中获取行数。我对数据库名称,表名和行数感兴趣

8 个答案:

答案 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

之后放入shell

hive -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))