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

Date de la dernière mise à jour : 20/12/2022

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

Suivez ces étapes pour planifier une requête Athena à l'aide d'une fonction Lambda et d'une règle EventBridge :

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.    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 boto3

# Query string to execute
query = 'SELECT * FROM database.tb'

# Database to execute the query against
DATABASE = 'database'

# Output location for query results
output='s3://OUTPUTBUCKET/'

def lambda_handler(event, context):
    # Initiate the Boto3 Client
    client = boto3.client('athena')

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

    # Return response after starting the query execution
    return response

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.    Choisissez Créer.

Si vous planifiez plusieurs requêtes, notez 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.