已知Hive对应数据库时,如何在Hue中快速检索目标列?
Hive已知数据库检索含目标列表的可行方案
以下方案按操作成本从低到高排序,可根据自己的权限和集群环境选择:
方案1:直接使用系统表查询(优先尝试)
Hive 2.3+、Impala 2.11及以上版本本身原生支持information_schema.columns系统表,不需要额外操作元数据组件,直接在Hue中执行对应SQL即可:
SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE table_schema = '替换为你的目标库名' AND column_name LIKE '%替换为目标列名关键字%';
如果集群版本低于上述要求,可选择下面两个方案
方案2:Shell+Hive命令批量检索(无元数据库权限时使用)
只要拥有Hive/Impala的普通查询权限就可以用,不需要接触底层元数据:
- 先导出目标数据库下的所有表名
hive -e "use 替换为目标库名; show tables;" 2>/dev/null | grep -v "WARN\|INFO" > table_list.txt
- 循环遍历所有表,匹配目标列
target_col="替换为目标列名关键字" target_db="替换为目标库名" while read table_name; do match_num=$(hive -e "use ${target_db}; desc ${table_name};" 2>/dev/null | grep -i "${target_col}" | wc -l) if [ ${match_num} -gt 0 ]; then echo "匹配到表:${target_db}.${table_name}" fi done < table_list.txt
方案3:直接查询Hive元数据库(效率最高,有元数据库权限时使用)
Hive的元数据默认存储在MySQL/PostgreSQL等关系型数据库中,只要拥有元数据库的只读权限,直接查询对应系统表可以秒出结果,不需要遍历所有表:
SELECT d.NAME AS db_name, t.TBL_NAME AS table_name, c.COLUMN_NAME AS column_name FROM DBS d INNER JOIN TBLS t ON d.DB_ID = t.DB_ID INNER JOIN COLUMNS_V2 c ON t.TBL_ID = c.CD_ID WHERE d.NAME = '替换为目标库名' AND c.COLUMN_NAME LIKE '%替换为目标列名关键字%';
注意事项
- 使用Impala查询时如果返回结果和实际表结构不符,可先执行
INVALIDATE METADATA刷新元数据后再重试 - 如果后续需要覆盖全库全表检索的场景,只需去掉上述SQL/脚本中的库名过滤条件即可,逻辑完全一致
内容的提问来源于stack exchange,提问作者H2019
相关产品推荐
相关产品推荐

