在我们的环境中,我们无法直接查询Hive元存储。
我需要动态生成一组表的tablename,columnname对。
我试图通过运行"描述扩展$ tablename"来实现这一点。到所有表的文件,并从文件中选取表名和列名对。
是否有更简单的方法可以完成/除此之外可以完成。
所需的输出就像
table1|col1
table1|col2
table1|col3
table2|col1
table2|col2
table3|col1
答案 0 :(得分:0)
此脚本将以单个表的所需格式打印列。 AWK从describe命令解析字符串,只接受column_name,与" |"连接。和table_name变量,每个字符串打印\ n作为它们之间的分隔符。
#!/bin/bash
#Set table name here
TABLE_NAME=your_schema.your_table
TABLE_COLUMNS=$(hive -S -e "set hive.cli.print.header=false; describe ${TABLE_NAME};" | awk -v table_name="${TABLE_NAME}" -F " " 'f&&!NF{exit}{f=1}f{printf c table_name "|" toupper($1)}{c="\n"}')
您可以使用show tables
命令轻松修改它以生成所有表的输出。
更简单的方法是直接访问元数据数据库。