我有两个环境-prod和test。我正试图找出一个查询,让Athena只显示特定月份的访问日志。
我这样做是基于YYYY-MM-DD格式的列"date",底层数据是s3中的gzipped.txt文件。
我的日志仅限于过去2个月。因为我想自动化查询,所以我宁愿使用间隔月份减法。
因此,当在测试环境中运行时,下面的子句返回正确的响应,向我显示了具有八月的行WHERE month(date) = MONTH(current_date - interval '1' month)
不幸的是,当我在prod上跑步时,我得到了七月和八月。
感觉好像我什么都试过了,但还是搞不清楚出了什么问题。我尝试了subselects,将WHERE语句的两边都投给VARCHAR,实际上似乎没有任何影响。
有人有主意吗?
对于任何再次偶然发现我的问题的人:(我找到了一个答案——一个肮脏的答案,但仍然有效。
我最初的疑问是,雅典娜不在乎这个月我想要
SELECT date,
time,
bytes,
request_ip,
method,
uri,
status,
user_agent
FROM "default"."logs"
WHERE month(date) = MONTH(current_date - interval '1' month)
AND user_agent LIKE '%gecko%';
显示我想要的月份的工作查询:
SELECT *
FROM
(SELECT date,
MONTH(date) as mn,
time,
bytes,
request_ip,
method,
uri,
status,
user_agent
FROM "default"."logs"
WHERE user_agent LIKE '%gecko%') as in_table
WHERE mn = MONTH(current_date - interval '1' month);