Comment puis-je planifier une requête Amazon Athena ?

Dernière mise à jour : 20/12/2021

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 EventBridge :

1.    Créez une fonction du 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.    Sélectionnez Créer une fonction.

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

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.    Choisissez Deploy (Déployer).

8.    Ouvrez la console Amazon EventBridge.

9.    Dans le volet de navigation, sélectionnez Règles, puis Créer une règle.

10.    Saisissez un nom et une description pour la règle.

11.    Pour Définir le modèle, sélectionnez Planifier.

12.    Sélectionnez Expression Cron, puis saisissez une Expression cron.

13.    Pour Sélectionner un bus d'événements, sélectionnez Bus d'événements AWS par défaut.

14.    Dans la section Sélectionner des cibles, procédez comme suit :

Pour Cible, sélectionnez Fonction Lambda dans la liste déroulante. Pour Fonction, sélectionnez le nom de votre fonction Lambda dans la liste déroulante.

15.    Sélectionnez Create (Créer).

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.