如何从 Athena 获得过去一周的结果?

how to get results from Athena for the past week?

我正在使用 Amazon Athena 获取过去一周发生的所有控制台登录,现在我可以只获取所有控制台登录,而不管数据如何。我需要修改以下查询,以便此查询始终获取上周发生的所有 aws 控制台登录。

WITH events AS (
  SELECT
    event.eventVersion,
    event.eventID,
    event.eventTime,
    event.eventName,
    event.eventType,
    event.eventSource,
    event.awsRegion,
    event.sourceIPAddress,
    event.userAgent,  
    event.userIdentity.type AS userType,
    event.userIdentity.arn AS userArn,
    event.userIdentity.principalId as userPrincipalId,
    event.userIdentity.accountId as userAccountId,
    event.userIdentity.userName as userName
  FROM cloudtrail.events
  CROSS JOIN UNNEST (Records) AS r (event)
)
SELECT userName,sourceIPAddress,eventName,eventTime FROM events WHERE eventName='ConsoleLogin';

事件时间看起来像“:

T

如果该列以文本形式出现,您可以将其转换为时间戳。我发现 Amazon Athena 可以将 '2016-05-03 05:46:00' 转换为时间戳,因此使用 replace() 函数将其转换为正确的格式:

select cast(replace(replace('2016-05-03T05:46:00Z', 'Z'), 'T', ' ') as timestamp)

因此,在您的 WITH 部分中,将 event.eventType 替换为:

cast(replace(replace(event.eventType, 'Z'), 'T', ' ') as timestamp) AS eventType,

然后您可以对日期使用标准 WHERE 语句,例如:

WHERE eventType > '2017-04-01'

或过去一周(基于Presto documentation):

WHERE eventType > current_date - interval '7' day

您可以使用 from_iso8601_timestamp 进行转换,例如

SELECT *
FROM my_table
WHERE from_iso8601_timestamp(my_iso_field) > current_timestamp - interval '7' day

下面的查询已经过测试并且适用于我。

select * table_name where date(column_name) >= (current_date - interval '7' day)