web-dev-qa-db-ja.com

ハイブのすべてのテーブルから行数を取得する

Hiveを使用してすべてのテーブルから行数を取得するにはどうすればよいですか。データベース名、テーブル名、行数に興味がある

6
Raunak Jhawar

あなたがする必要があります

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)が作成されます

22
Mukul Gupta

テーブル内のすべての行の概数を取得するはるかに高速な方法は、テーブルに対してExplainを実行することです。 Explain節の1つで、以下のような行数が表示されます。

TableScan [TS_0] (rows=224910 width=78)

利点は、その情報を取得するためにクラスターリソースを実際に費やしていないことです。


HQLコマンドはexplain select * from table_name;しかし、最適化されていない場合行を表示しないはTableScanで。

3
Pratik Khadloya

select count(*) from table

これ以上効率的な方法はないと思います。

1
pensz

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/

0
marknorkin

同じコマンドでデータベースを設定し、;で区切ることもできます。

Hive -e 'use myDatabase;show tables'
0
Dranyar

この連中を自動化してみてください-その後シェルに入れてbash filename.shを実行します

Hive -e 'select count(distinct fieldid)from table1 where extracttimestamp <' 2018-04-26 ''> sample.out

Hive -e 'select count(distinct fieldid)from table2 where day = '26' '> sample.out

lc = cat sample.out | uniq | wc -l if [$ lc -eq 1];次に「PASS」をエコーし​​ます。そうでなければ「FAIL」をエコーし​​ます。

0
Manju

以下のスニペットで参照する必要がある特定のデータベースに言及するにはどうすればよいですか。

while read line
do
 echo "$line "
 eval "Hive -e 'select count(*) from $line'"
done
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))
0
Jon Morisi