Shell skriptu vytáhnout řádek se počítá ze všech Úlu tabulky ve více Hive databází

0

Otázka

Snažím se vytvořit skript, který bude tahat řadě se počítá na všechny tabulky z více databází. Všechny databáze, postupujte podle stejné konvence pojmenování "the_same_databasename_<%>" s výjimkou poslední vrstvy v názvu, které se mění. Snažím se spustit následující:

use <database_name>; show tables; select count(*) from <table_name>;

Od té doby mám 40 různých databází, já bych třeba spustit první dva dotazy pro každou databázi, 40 různých časech, plus select count dotaz i více v závislosti na tom, jak mnoho tabulky v databázi (časově velmi náročné). Mám Tmel konfigurace nastavení uložit můj Tmel sezení do .txt na místní adresáře, takže můžu mít na řádek počet výsledků zobrazených v mém rozhraní příkazového řádku. Tak daleko, to je to, co mám, ale nejsem si jistý, jak se patří poslední příkazy získat aktuální řádek se počítá z tabulek, v každé databázi.

#!/bin/bash
for db in $(hive -e "show databases like 'the_same_databasename_*;") 
do
   tbl_count=$(hive -S -e "use $db; show tables;" | wc -l)
   echo "Database $db contains $tbl_count tables."
  
done    

Nejsem moc zkušený v shell skriptování, takže jakoukoliv radu/pomoc je velmi ceněn. Díky předem.

hive linux sh shell
2021-11-21 19:40:30
1

Nejlepší odpověď

0

Můžete použít vnořené for smyčky:

#!/bin/bash
for db in $(hive -e "show databases like 'the_same_databasename_*;") 
do
   tbl_count=$(hive -S -e "use $db; show tables;" | wc -l)
   echo "Database $db contains $tbl_count tables."

   for table in $(hive -S -e "use $db; show tables;")
   do
      count=$(hive -S -e "use $db; select count(*) from $table;")
      echo "Table $db.$table contains $count rows."
   done
   
done

Nebo můžete použít proměnnou zvýšit počet stolů

#!/bin/bash
for db in $(hive -e "show databases like 'the_same_databasename_*;") 
do

   tbl_count=0
   for table in $(hive -S -e "use $db; show tables;")
   do
      (( tbl_count++ ))
      count=$(hive -S -e "use $db; select count(*) from $table;")
      echo "Table $db.$table contains $count rows."
   done
   echo "Database $db contains $tbl_count tables."
   
done
2021-11-22 07:57:50

Děkuji moc, leftjoin! Vážím si vaší pomoci. První možnost fungovalo to jako kouzlo. Dám druhý pokus a studovat to trochu víc jako já jsem použil proměnnou zvýšit počet pro každou tabulku.
Gdata0data0

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................