2017-04-21 2 views
1

J'utilise Amazon Athena pour obtenir toutes les connexions à la console qui se sont produites la semaine dernière, maintenant je suis en mesure d'obtenir toutes les connexions à la console indépendamment des données. J'ai besoin de modifier la requête ci-dessous afin que cette requête prenne en compte toutes les connexions à la console aws qui se sont produites la semaine dernière.comment obtenir les résultats d'Athena la semaine dernière?

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'; 

Le eventTime ressemble ":. enter image description here

T

+0

Désolé, mais votre question n'est pas claire. Cherchez-vous simplement la possibilité de spécifier une plage de dates dans la requête? –

+0

@JohnRotenstein oui, je veux ajouter une requête dynamique qui ne me procurerait les connexions de la console de la date actuelle à 7 jours passés – Kittystone

Répondre

3

Si cette colonne est à venir à travers le texte, vous pouvez le convertir en un timestamp j'ai trouvé que Amazon Athena peut convertir '2016-05-03 05:46:00' en un horodatage, utilisez donc une fonction replace() pour l'obtenir dans le format:

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

Par conséquent, dans votre section WITH, remplacer event.eventType avec:

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

Vous pouvez ensuite utiliser WHERE standards déclarations contre la date, tels que:

WHERE eventType > '2017-04-01' 

ou pour la semaine dernière (sur la base Presto documentation):

WHERE eventType > current_date - interval '7' day 
+0

Donc, si je veux obtenir la semaine dernière, alors? – Kittystone

+0

J'ai ajouté un exemple pour la semaine dernière. –

+0

Il est dit: INVALID_CAST_ARGUMENT: La valeur ne peut pas être convertie en horodatage: AwsApiCall – Kittystone