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

Spark中如何使用通配符读取指定日期/小时的分区数据?

问题:按时间分区表的子集读取方法

我有一张按ldt列(格式为YYYY-MM-dd-HH-mm-ss)分区的表test.emp_table,执行SHOW partitions test.emp_table;得到以下分区:

partition
ldt=2023-02-26-00-47-01
ldt=2023-02-26-01-27-40
ldt=2023-02-26-23-48-06

想使用通配符读取这些分区的子集(比如加载某一天或某一小时的所有分区),但执行以下语句无法生效:

select * from test.emp_table where ldt = "2023-02-26-%"

解决方法

1. 使用LIKE操作符匹配前缀

=运算符不支持搭配通配符,需要改用LIKE来匹配字符串前缀:

  • 读取2023-02-26当天所有分区:
SELECT * FROM test.emp_table WHERE ldt LIKE '2023-02-26-%';
  • 读取2023-02-26 00点的所有分区:
SELECT * FROM test.emp_table WHERE ldt LIKE '2023-02-26-00-%';

2. 利用字符串截取精准匹配

如果需要更灵活的时间范围过滤,可以用SUBSTR函数截取ldt的指定部分:

  • 读取2023-02-26当天所有分区:
SELECT * FROM test.emp_table WHERE SUBSTR(ldt, 1, 10) = '2023-02-26';
  • 读取2023-02-26 01点的所有分区:
SELECT * FROM test.emp_table WHERE SUBSTR(ldt, 1, 13) = '2023-02-26-01';

3. 直接指定分区过滤(适用于Hive等引擎)

部分SQL引擎(如Hive)支持在PARTITION子句中直接指定分区规则,这种方式能直接跳过无关分区目录,性能更优:

  • 读取2023-02-26当天所有分区:
SELECT * FROM test.emp_table PARTITION (ldt LIKE '2023-02-26-%');

也可以用正则匹配:

SELECT * FROM test.emp_table WHERE ldt RLIKE '2023-02-26-.*';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:47:21