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)が作成されます
テーブル内のすべての行の概数を取得するはるかに高速な方法は、テーブルに対してExplainを実行することです。 Explain節の1つで、以下のような行数が表示されます。
TableScan [TS_0] (rows=224910 width=78)
利点は、その情報を取得するためにクラスターリソースを実際に費やしていないことです。
HQLコマンドはexplain select * from table_name;
しかし、最適化されていない場合行を表示しないはTableScanで。
select count(*) from 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/
同じコマンドでデータベースを設定し、;
で区切ることもできます。
Hive -e 'use myDatabase;show tables'
この連中を自動化してみてください-その後シェルに入れて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」をエコーします。
以下のスニペットで参照する必要がある特定のデータベースに言及するにはどうすればよいですか。
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))