Hive外部表的自动列表

时间:2018-05-15 02:05:23

标签: hive hiveql external-tables

我必须创建一个自动化流程来列出Hive中的所有外部表,并对这些表执行记录计数。

我应该把这当作日常工作。我通过硬编码所有外部表名来尝试这个,但是这不被接受,因为表在一个月内一直在变化。

我已经经历了不同的方法,如[show tables],并在Metastore DB中执行查询。但这些并不能帮助我实现流程的自动化。

有没有更好的方法在Hive中实现它。

2 个答案:

答案 0 :(得分:1)

像这样的东西,使用shell。

#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语句中处理,还可以改进许多其他内容,但希望你已经抓住了这个想法。

答案 1 :(得分:0)

根据我的首先了解,您的要求是在所有hive数据库中找出Hive外部表的列表。

配置单元外部表的数据库名称,表名称,表类型(外部)和HDFS位置。

登录到Hive Metastore并使用Hive元数据库。

使用3个表TBLS,DBS和SDS表,在这3个表之上,我们可以在DB_ID和SD_ID上应用联接

通过使用以上格式,您可以获得数据库名称以及受尊重的配置单元外部表列表和HDFS路径位置。

有关Querey和输出信息,请阅读此链接

https://askdoubts.com/question/how-to-find-out-list-of-all-hive-external-tables-and-hdfs-paths-from-hive-metastore/#comment-19