You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks中PySpark SQL如何查询名称相似的指定前缀表数据

问题根因

之前执行的语句无法运行有两个核心问题:

  • Spark SQL原生不支持FROM *语法,不能直接用通配符匹配FROM子句后的多张表
  • SQL标准LIKE语法中,匹配任意长度字符的通配符是%而非*,*是文件系统/Shell的通配符,不能直接在SQL里用
实现方案

你的3张Table_前缀表结构完全一致,直接用UNION ALL合并全量数据即可,这是最稳定、性能最优的写法:

# 固定表名写法,适合表数量固定的场景
merge_df = spark.sql("""
SELECT * FROM Table_A
UNION ALL
SELECT * FROM Table_B
UNION ALL
SELECT * FROM Table_C
""")

# 查看合并后的数据
merge_df.show()

如果后续Table_前缀的表会动态新增/删除,不想每次手动修改SQL,可以通过Spark Catalog先拉取所有符合命名规则的表,动态拼接查询语句:

# 获取当前会话下所有以Table_为前缀的表名
table_list = [table.name for table in spark.catalog.listTables() if table.name.startswith("Table_")]

# 拼接UNION ALL查询语句
dynamic_sql = " UNION ALL ".join([f"SELECT * FROM {tbl}" for tbl in table_list])
merge_df = spark.sql(dynamic_sql)

注意事项

  • 上述方案要求所有匹配到的Table_前缀表字段数量、字段顺序、字段类型完全对齐,否则会抛出字段不匹配错误,当前环境下的Table_A、Table_B、Table_C结构完全一致,可直接运行
  • 由于这三张表的Column_D字段固定存储自身表名,只要表名匹配Table_前缀就不需要额外加WHERE条件过滤
  • 如果后续有结构不一致的Table_前缀表,需要在拼接SQL时显式指定对齐的字段名,不要用SELECT *

内容的提问来源于stack exchange,提问作者Dicer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:15:41