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

如何使用Spark SQL关联临时表并读取多月份目录数据

两种方案均可实现需求,优先推荐直接创建单张临时表的方案,实现更简洁、性能更好。

方案1:分别创建单月临时表后合并查询

不需要强制使用该方案,但如果你已经创建好了2月的临时表,补建3月临时表后通过UNION ALL合并结果即可。注意同结构的多月份数据是纵向合并,不要用JOIN(JOIN用于横向关联不同结构的表)。
示例代码:

# 补建3月数据临时表
df_mar = spark.read.json("wasbs://container@storage.blob.core.windows.net/topics/details/year=2022/month=03/")
df_mar.createOrReplaceTempView("tableForMar2022")

查询时直接合并两表数据:

-- 合并两个月数据查询,可按需添加过滤、聚合逻辑
SELECT * FROM tableForFeb2022
UNION ALL
SELECT * FROM tableForMar2022

注意:如果两个表的字段顺序、类型不完全一致,SELECT时要显式指定对齐的字段名,不要直接用SELECT *,避免字段错位。

方案2:直接创建覆盖两个月数据的单个临时表(推荐)

Spark原生支持该能力,读取文件时支持传入多路径列表、分区通配符两种方式一次性读取多个目录的数据,一次建表即可查询全量数据,省去后续合并的步骤。
两种实现写法:

写法1:传入精准路径列表

适合明确指定少量目录的场景,不会误读其他无关目录:

# 传入路径列表,一次性读取2月、3月数据
df_bimonth = spark.read.json([
    "wasbs://container@storage.blob.core.windows.net/topics/details/year=2022/month=02/",
    "wasbs://container@storage.blob.core.windows.net/topics/details/year=2022/month=03/"
])
df_bimonth.createOrReplaceTempView("tableFor202202_03")

写法2:分区通配符匹配

适合批量读取多个连续/不连续分区的场景,后续扩展读更多月份只需要改通配符规则即可:

# 大括号内枚举需要匹配的month分区值,自动匹配对应目录
df_bimonth = spark.read.json("wasbs://container@storage.blob.core.windows.net/topics/details/year=2022/month={02,03}/")
df_bimonth.createOrReplaceTempView("tableFor202202_03")

由于你的存储路径是标准的year=xx/month=xx分区格式,Spark读取时会自动识别分区字段,后续查询时加WHERE month = '02'这类过滤条件会自动做分区裁剪,不会扫描无关数据,查询性能和读取单月表没有差异。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:48:30