使用bash连接到配置单元

kzipqqlq  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(350)

我制作了一个简单的bash skcript,它应该对指定数据库中每个表中的列进行计数。问题是

`hive -S -e 'use '$database'; describe '$word'' | grep -e '^[a-z]' | uniq |wc -l >>MY_PROJECTS/ColumnCountList.txt`

由于配置单元连接,它会占用大量时间—每次它计算下一个表中的列数时,它都会再次连接到配置单元。
有没有办法连接到配置单元一次,然后只执行命令?它会快得多,特别是当我做1k表数据库它。代码如下:


# !/bin/bash

database=pos
tables_list=`hive -S -e 'use '$database'; show tables' | grep -e '^[a-z]' | uniq`
for word in $tables_list
do
   `echo -n "$word : ">>MY_PROJECTS/ColumnCountList.txt`
   `hive -S -e 'use '$database'; describe '$word'' | grep -e '^[a-z]' | uniq |wc -l >>MY_PROJECTS/ColumnCountList.txt`
done
6ovsh4lw

6ovsh4lw1#

建立一个文件(这里称为 desc_tbl_list.sql )使用包含descripe命令和表名的bash脚本,如下所示:

describe tablename1
describe tablename2
...

然后使用包含所有描述命令的hive命令运行脚本,如下所示:

hive -f desc_tbl_list.sql

hth公司

mtb9vblg

mtb9vblg2#

如果您使用mysql作为元存储数据库,这个mysql查询可以给出每个表的计数。如果您想在数据库名称上进行筛选,那么必须将join添加到dbs。

select t.TBL_NAME, count(1) from TBLS t join COLUMNS_V2 c
on t.TBL_ID = c.CD_ID
group by t.TBL_NAME;

相关问题