如何在Spark SQL中选取Unix日期格式的昨日日期?
在Spark SQL中筛选Unix时间戳为昨日的数据
核心思路
有两种常用实现方式:
- 将Unix时间戳转换为日期格式,直接与昨日日期对比
- 计算昨日日期对应的Unix时间戳范围,通过范围匹配筛选(效率更高,适合大数据场景)
场景1:Unix时间戳为秒级
方式1:转换为日期对比
SELECT * FROM your_table WHERE date_format(from_unixtime(`date`), 'yyyy-MM-dd') = date_format(date_sub(current_date(), 1), 'yyyy-MM-dd')
方式2:时间戳范围匹配(推荐)
SELECT * FROM your_table WHERE `date` BETWEEN unix_timestamp(date_sub(current_date(), 1)) AND unix_timestamp(current_date()) - 1
场景2:Unix时间戳为毫秒级
如果时间戳是毫秒格式(如1699996800000),需先转换为秒级再处理:
方式1:转换为日期对比
SELECT * FROM your_table WHERE date_format(from_unixtime(`date` / 1000), 'yyyy-MM-dd') = date_format(date_sub(current_date(), 1), 'yyyy-MM-dd')
方式2:时间戳范围匹配(推荐)
SELECT * FROM your_table WHERE `date` BETWEEN unix_timestamp(date_sub(current_date(), 1)) * 1000 AND (unix_timestamp(current_date()) * 1000) - 1
关键函数说明
current_date():获取当前系统日期date_sub(current_date(), 1):计算昨日日期from_unixtime(ts):将秒级Unix时间戳转换为可读时间字符串date_format(date_str, pattern):将时间字符串格式化为指定日期格式(如yyyy-MM-dd)unix_timestamp(date):将日期转换为对应的秒级Unix时间戳
注意:如果字段名为
date,需用反引号`包裹,避免与SQL关键字冲突
内容的提问来源于stack exchange,提问作者jayakar jayaraman
相关产品推荐
相关产品推荐

