web-dev-qa-db-fra.com

Obtenir le nombre de lignes de toutes les tables de la ruche

Comment puis-je obtenir le nombre de lignes de toutes les tables en utilisant Hive. Je m'intéresse au nom de la base de données, au nom de la table et au nombre de lignes 

5
Raunak Jhawar

Vous devrez faire un 

select count(*) from table

pour toutes les tables.

Pour automatiser cela, vous pouvez créer un petit script bash et quelques commandes bash.

$Hive -e 'show tables' | tee tables.txt

Ceci stocke toutes les tables de la base de données dans un fichier texte tables.txt

Créez un fichier bash (count_tables.sh) avec le contenu suivant.

while read line
do
 echo "$line "
 eval "Hive -e 'select count(*) from $line'"
done

Maintenant, lancez les commandes suivantes.

$chmod +x count_tables.sh
$./count_tables.sh < tables.txt > counts.txt

Cela crée un fichier texte (count.txt) avec les comptes de toutes les tables de la base de données.

19
Mukul Gupta

Un moyen beaucoup plus rapide d'obtenir le nombre approximatif de toutes les lignes d'une table consiste à exécuter explique sur la table. Dans l'une des clauses explicitement, cela indique le nombre de lignes comme ci-dessous:

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

L'avantage est que vous ne dépensez pas réellement les ressources du cluster pour obtenir ces informations.

2
Pratik Khadloya

select count(*) from table

Je pense qu'il n'y a pas de moyen plus efficace.

1
pensz

Vous pouvez également définir la base de données dans la même commande et la séparer avec ;.

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

essayez ces gars-là pour automatiser-- mettre dans Shell après cette exécution bash filename.sh

Hive -e 'select count (identifiant de champ distinct) dans table1 où extracttimestamp <' 2018-04-26 ''> sample.out

Hive -e 'select count (identifiant de champ distinct) dans table2 où day = '26' '> sample.out

lc = cat sample.out | uniq | wc -l if [$ lc -eq 1]; puis écho "PASS" sinon écho "FAIL" fi

0
Manju