Автоматизированный список таблиц Hive External - PullRequest
0 голосов
/ 15 мая 2018

Мне нужно создать автоматизированный процесс для перечисления всех внешних таблиц в Hive и подсчета записей для этих таблиц.

Я должен делать это как повседневную работу.Я попытался сделать это путем жесткого кодирования всех имен внешних таблиц, но это не принято, поскольку таблицы продолжают меняться раз в месяц.

Я прошел через различные подходы, такие как [show tables] и выполнение запроса в БД метастаз.Но это не поможет мне в автоматизации процесса.

Есть ли лучший подход для реализации этого в Hive.

1 Ответ

0 голосов
/ 15 мая 2018

Примерно так, с помощью оболочки.

#Create external table list for a schema
SCHEMA=your_schema_name 

#define filenames   
alltableslist=tables_$SCHEMA
exttablelist=ext_tables_$SCHEMA

#Get all tables
 hive -S -e " set hive.cli.print.header=false; use $SCHEMA; show tables;" 1> $alltableslist


#For each table check its type:
for table in $(cat $alltableslist)
 do 

 echo Processing table $table ...

     #Describe table
     describe=$(hive client -S -e "use $SCHEMA; DESCRIBE FORMATTED $table")

     #Get type
     table_type=$(echo "${describe}" | egrep -o 'Table Type:[^,]+' | cut -f2)

     #Check table type, get count and write table name with count
      if [ $table_type == EXTERNAL_TABLE ]; then 
         #get count
          cnt=$(hive client -S -e "select count(*) from $SCHEMA.table ")
         #save result
          echo "$table $cnt" > $exttablelist 
      fi

done; #tables loop

Просто замените your_schema_name в начале на имя вашей схемы. Внешние таблицы с подсчетами в этом примере будут сохранены в файле ext_tables_[your_schema_name]

Счет может обрабатываться параллельно и даже в одном операторе SQL, и многие другие вещи могут быть улучшены, но надеюсь, что вы поймали эту идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...