如何在Databricks SQL中查询所有名称相同或相似的表
Databricks表名模糊查询方案说明
1. SQL原生查询方案
Databricks 从Runtime 11.3 LTS版本开始,已原生支持标准INFORMATION_SCHEMA元数据表,仅需环境启用Unity Catalog管理元数据,你提到的查询语句可以直接运行:
select * from information_schema.tables where lower(table_name) like 'org%';
如果需要跨Catalog查询,只需在information_schema前指定对应Catalog名称即可,示例:
select * from main.information_schema.tables where lower(table_name) like 'org%';
2. 低版本/未启用Unity Catalog时的替代方案
2.1 单库查询的SQL折衷实现
可结合SHOW TABLES与临时视图实现过滤:
-- 将当前库所有表信息写入临时视图 CREATE OR REPLACE TEMP VIEW current_db_tables AS SHOW TABLES; -- 对临时视图执行模糊匹配 SELECT * FROM current_db_tables WHERE lower(tableName) LIKE 'org%';
2.2 全实例跨库查询的脚本实现
如果需要遍历所有库查找匹配表,可以用Notebook的Python脚本实现:
# 获取实例下所有数据库 databases = spark.sql("SHOW DATABASES").collect() match_tables = [] for db in databases: db_name = db["databaseName"] # 查询当前库下符合名称规则的表 matched = spark.sql(f"SHOW TABLES IN {db_name}")\ .filter("lower(tableName) LIKE 'org%'")\ .collect() for table in matched: match_tables.append({ "database": db_name, "table_name": table["tableName"], "is_temporary": table["isTemporary"] }) # 输出结果 spark.createDataFrame(match_tables).show()
3. 元数据表功能更新说明
INFORMATION_SCHEMA目前已是Databricks Unity Catalog的正式可用功能,不存在“规划中未上线”的情况。官方也推荐使用INFORMATION_SCHEMA替代原有SHOW TABLES类命令,满足复杂元数据过滤、统计类需求。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

