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 :
- Créez une fonction AWS Lambda, à l'aide du kit SDK de votre choix, pour planifier la requête. Pour plus d'informations sur les langages de programmation pris en charge par Lambda, consultez Questions fréquentes (FAQ) concernant AWS Lambda. Ensuite, vous devez Créer une règle Amazon EventBridge pour planifier la fonction Lambda. Il s'agit de la méthode expliquée dans la solution.
- Si vous utilisez Athena dans un pipeline ETL, utilisez AWS Step Functions pour créer le pipeline et planifier la requête.
- Sur une machine Linux, utilisez crontab pour planifier la requête.
- Utilisez une tâche shell Python AWS Glue pour exécuter la requête Athena à l'aide de l'API Athena boto3. Ensuite, définissez un calendrier pour la tâche AWS Glue.
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.
Informations connexes
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?