如何在配置单元中的所有表中找到特定的列名?

wrrgggsh  于 2021-05-29  发布在  Hadoop
关注(0)|答案(4)|浏览(355)

如何在配置单元中的所有表中找到特定的列名?
我在配置单元中运行了此查询: select table_name,column_name from retail.columns where column_name like '%emp%'; (零售是一个数据库)。
但它给了:
错误失败:semanticexception行0:-1未找到表“columns”
我试着询问: select distinct table_name from default.columns where column_name = 'emp' (默认为mine数据库)。但这也会产生错误。
我搜索了一下,找到了我为sql数据库写的查询。
但我想在Hive数据库中搜索?如何进入 hive ?
以前也有人问过同样的问题,但我觉得事情可能发生了变化,可能会有直接的解决办法:
如何在hadoop/hive中搜索具有给定列名的所有表并返回具有此列名的表?
在配置单元中搜索表和列

nhn9ugyo

nhn9ugyo1#

下面的shell脚本将为您提供所需的结果:

hive -S -e 'show databases'|
while read database
do
   eval "hive -S -e 'show tables in $database'"|
   while read line
   do
if eval "hive -S -e 'describe $database.$line'"| grep -q "<column_name"; then
  output="Required table name: $database.$line"'\n';
else
output=""'\n';

fi
echo -e "$output"
 done
done
uujelgoq

uujelgoq2#

以下是可以在元存储上使用的查询:
选择tbl_name、column_name、type_name from tbls left join columns_v2 on cd_id=tbl_id where column_name like'column';
其中“column”是您要查找的列名。

ia2d9nvy

ia2d9nvy3#

为了得到结果,我编写了以下简化shell脚本:
步骤1:替换下面脚本中的<db\u name>,<column\u name>,然后运行:

while read line
   do
    if eval "hive -S -e 'describe <DB_NAME>.$line'"| grep -q "<COLUMN_NAME>"; then
        output="${output}  <DB_NAME>.$line"'\n';
    fi
   done < <(eval "hive -S -e 'show tables in <DB_NAME>'")

第2步:运行以下命令

echo -e "Required table name:\n\n $output"

注意:如果要运行多次,请记住清除变量输出。

output=""
fv2wmkja

fv2wmkja4#

我相信如果你知道你专栏的名字,这个查询会对你有所帮助:

select table_name,column_name from information_schema.columns
where column_name like '%lead%'

相关问题