Comment puis-je planifier une requête Athena ?

Date de la dernière mise à jour : 21/05/2020

Comment puis-je planifier des requêtes dans Amazon Athena ?

Brève description

La planification des requêtes est utile dans de nombreux scénarios, tels que l'exécution de requêtes de rapport périodiques ou le chargement de nouvelles partitions à intervalles réguliers. Voici quelques méthodes de planification de requêtes dans Athena :

Solution

Pour planifier une requête Athena à l'aide d'une fonction Lambda et d'une règle CloudWatch Events :

1.    Créez un rôle de service AWS Identity and Access Management (IAM) pour Lambda. Ensuite, joignez une stratégie qui autorise l'accès à Athena, Amazon Simple Storage Service (Amazon S3) et Amazon CloudWatch Logs. Par exemple, vous pouvez ajouter AmazonAthenaFullAccess et CloudWatchLogsFullAccess au rôle. AmazonAthenaFullAccess permet un accès complet à Athena et inclut des autorisations de base pour Amazon S3. CloudWatchLogsFullAccess permet un accès complet à CloudWatch Logs.

2.    Ouvrez la console Lambda.

3.    Choisissez Create function (Créer une fonction).

4.    Assurez-vous que l'option Créer à partir de zéro est sélectionnée, puis configurez les options suivantes :

Pour Name (Nom), saisissez un nom pour votre fonction.
Pour Runtime (Exécution), choisissez l'une des options Python.
Pour Role (Rôle), choisissez Use an existing role, (Utiliser un rôle existant), puis choisissez le rôle IAM que vous avez créé à l'étape 1.

5.    Choisissez « Create function » (Créer une fonction).

6.    Collez votre code dans la section Function code (Code de fonction). L'exemple suivant utilise Python 3.7. Remplacez ces valeurs dans l'exemple suivant :

default : le nom de base de données Athena
SELECT * FROM default.tb : la requête que vous souhaitez planifier
s3 ://AWSDOC-EXAMPLE-BUCKET/ : le compartiment S3 pour le résultat de la requête

import time
import boto3

query = 'SELECT * FROM default.tb'
DATABASE = 'default'
output='s3://AWSDOC-EXAMPLE-BUCKET/'

def lambda_handler(event, context):
    query = "SELECT * FROM default.tb"
    client = boto3.client('athena')

    # Execution
    response = client.start_query_execution(
        QueryString=query,
        QueryExecutionContext={
            'Database': DATABASE
        },
        ResultConfiguration={
            'OutputLocation': output,
        }
    )
    return response
    return

7.    Dans le coin supérieur droit de la page, sélectionnez Enregistrer.

8.    Ouvrez la console CloudWatch.

9.    Dans le volet de navigation, sélectionnez Règles, puis Créer une règle. Pour plus d'informations sur la création d'une règle d'événement CloudWatch, consultez Étape 2 : création d'une règle.

10.   Dans la section Event Source (Source de l'événement) choisissez Schedule (Programme), puis entrez une expression cron.

11.   Dans la section Targets (Cibles) sur le côté droit de la page, sélectionnez Add target (Ajouter une cible).

12.   Dans la liste déroulante, choisissez Lambda function (fonction Lamda).

13.   Dans la liste déroulante Fonction, sélectionnez le nom de votre fonction Lambda.

14.   Dans le coin inférieur droit de la page, sélectionnez Configure details (Configurer les détails).

15.   Saisissez un Name (Nom) et une description de votre règle CloudWatch Events, puis sélectionnez Create rule (Créer une règle).

16.   Ouvrez la console Lambda, puis choisissez la fonction que vous avez créée précédemment.

17.   Choisissez Add trigger, (Ajouter un déclencheur), puis sélectionnez CloudWatch Events/EventBridge.

18.   Dans la liste déroulante Rule (règle), choisissez la règle CloudWatch Events que vous venez de créer.

19.   Sélectionnez Add (Ajouter).

Si vous planifiez plusieurs requêtes, n'oubliez pas qu'il existe des quotas pour le nombre d'appels d'API Athena par compte. Pour plus d'informations, consultez Quotas d'appel d'API par compte.