如何在Athena(Presto)每月间隔一个月进行工作



我正在开发一个查询,该查询将在AWS QuickLight上运行,每月从我们在AWS Athena的数据库中获取信息(上个月的第一天到上个月同一天的最后一天(。

为了做到这一点,我设置了一个查询从Athena获取日期的间隔,并在WHERE子句中使用它,如下所示:

SELECT
date_format(date_parse(REPLACE(eventtimestamp, '  ', ' 0'), '%a %b %d %T %Y'), '%Y-%m') AS month,
COUNT(DISTINCT(SUBSTR(UPPER(REPLACE(REPLACE(r.stationid, ':', ''), '-', '')),1, 12))) as qty_uniq_aps,
count(*) AS qtd_of_sessions
FROM example.tableexample_parquet r
WHERE r.dt >= from_iso8601_date(CONCAT(CAST(extract(year FROM current_date) AS varchar(4)),
'-',
CAST(extract(month FROM current_date) AS varchar(2)),
'-01'
))
GROUP BY  1
ORDER BY  1;

查看:

WHERE r.dt >= from_iso8601_date(CONCAT(CAST(extract(year FROM current_date) AS varchar(4)),
'-',
CAST(extract(month FROM current_date) AS varchar(2)),
'-01'
))

这是一个示例:此代码将采用actual_eyear-actual_month-first_day_of_month的间隔,如下所示:

2020-07-01>=数据库中最新的注册表

我真的想让它变得聪明。我想用Between将其转换为Where子句,如下所示:

WHERE r.dt BETWEEN actual_year-last_month-first_day_of_month AND actual_year-last_month-last_day_of_month

问题是:A( 一个月的最后一天会因月而异(例如,有些月有30天,另一些月有31天,还有28或29天(。B( 我在这个链接中找到了一个名为last_day_of_month(x(的函数https://prestosql.io/docs/current/functions/datetime.html但对阿西娜不起作用。

我想问你一些关于如何解决这个问题的想法。我在PrestoDB文档中搜索了与日期和时间相关的函数,但如果没有last_day_of_month(x(,我不知道如何做到这一点。即使有了这个答案,我也可以使用r.dt>=的where子句上个月的第一天,并在第一天运行QuickLight的查询。但我正在寻找一个解耦的解决方案。谢谢

如果你真的想查询整个月份,你只需要比较年份和月份(根本不需要知道日期(,所以你应该比较"字符串";年份和月份,并确保月份始终为两位数(例如07(。这将完成任务:

WHERE date_format ( r.dt, '%Y-%m' ) = date_format ( current_date, '%Y-%m' )

如果你想在上个月运行查询,但你现在已经在新的月份了,你应该从当前时间中减去一些天来获得上个月(如果你在一年的最后一个月,可能还有一年…(。

因此,代替current_date写入:

date_add('day', -7, current_date) 

相关内容

  • 没有找到相关文章

最新更新