Actions de début de cycle pour les budgets¶
Vous pouvez configurer un budget pour appeler automatiquement une procédure stockée lorsque le cycle budgétaire redémarre. Le cycle redémarre lorsque les dépenses sont réinitialisées à 0 au début de la période mensuelle du budget. Cela vous permet d’exécuter des actions automatisées au début de chaque période budgétaire, telles que la réactivation des entrepôts ou l’envoi de notifications concernant le nouveau cycle.
Les actions de début de cycle sont particulièrement utiles pour nettoyer ou annuler des actions qui ont été déclenchées par des actions personnalisées au cours du cycle budgétaire précédent.
Lorsque vous définissez une action de début de cycle, vous spécifiez la procédure stockée à appeler et les arguments à lui transmettre. La procédure stockée s’exécute automatiquement chaque fois que le cycle budgétaire redémarre.
Exigences en matière de procédures stockées¶
La procédure stockée qui est appelée par une action de début de cycle doit répondre aux exigences suivantes :
La procédure doit s’exécuter avec les droits du propriétaire, et non les droits de l’appelant. Pour plus d’informations, voir Présentation des procédures stockées des droits de l’appelant et des droits du propriétaire.
La procédure ne peut pas prendre plus de 30 minutes.
La procédure ne peut pas contenir d’argument OUTPUT.
Concevez votre procédure de manière à gérer les appels multiples sans provoquer d’effets en double ou involontaires.
Les arguments requis de la procédure doivent être l’un des types de données suivants :
Après avoir créé une procédure stockée qui répond à ces exigences, vous devez accorder à l’application SNOWFLAKE le privilège USAGE sur la procédure et sa base de données et son schéma parents. Par exemple, si le nom pleinement qualifié de votre procédure stockée est code_db.sch1.reset_resources, exécutez les commandes suivantes :
GRANT USAGE ON DATABASE code_db TO APPLICATION SNOWFLAKE;
GRANT USAGE ON SCHEMA code_db.sch1 TO APPLICATION SNOWFLAKE;
GRANT USAGE ON PROCEDURE code_db.sch1.reset_resources(STRING, STRING) TO APPLICATION SNOWFLAKE;
Note
Si vous mettez à jour la procédure stockée après l’avoir ajoutée en tant qu’action de début de cycle, vous devez accorder à nouveau le privilège USAGE sur la procédure à l’application SNOWFLAKE.
Définir une action de début de cycle pour un budget¶
Vous pouvez définir une action de début de cycle par budget (soit le budget du compte, soit un budget personnalisé). Une action de début de cycle se compose des éléments suivants :
Procédure stockée : Une référence à la procédure à appeler lors du redémarrage du cycle budgétaire.
Arguments : Tableau d’arguments à transmettre à la procédure stockée.
Pour définir une action de début de cycle pour un budget, appelez la méthode SET_CYCLE_START_ACTION sur l’instance de budget. Par exemple, le code suivant définit une action de début de cycle qui appelle la procédure stockée reset_resources lorsque le cycle budgétaire redémarre :
CALL budget_db.sch1.my_budget!SET_CYCLE_START_ACTION(
SYSTEM$REFERENCE('PROCEDURE', 'code_db.sch1.reset_resources(STRING, STRING, STRING, STRING)'),
ARRAY_CONSTRUCT('my_int', 'admin@example.com', 'Budget Alert', 'New budget cycle started'));
Pour un exemple de bout en bout qui inclut la création de la procédure stockée qui est appelée par l’action de début de cycle, consultez Exemple étendu.
Supprimer une action de début de cycle d’un budget¶
Pour supprimer une action de début de cycle d’un budget, appelez la méthode REMOVE_CYCLE_START_ACTION sur l’instance de budget :
CALL budget_db.sch1.my_budget!REMOVE_CYCLE_START_ACTION();
Exemple étendu¶
L’exemple suivant montre comment écrire une procédure stockée appelée par une action de début de cycle, accorder les privilèges nécessaires à la procédure, puis définir l’action de début de cycle pour le budget.
Créez une procédure stockée qui est conforme à toutes les exigences :
CREATE OR REPLACE PROCEDURE code_db.sch1.reset_resources( integration_name STRING, email_list STRING, email_subject STRING, email_content STRING) RETURNS STRING LANGUAGE JAVASCRIPT EXECUTE AS OWNER AS $$ // Re-enable warehouses or reset configurations here var enable_wh = "ALTER WAREHOUSE my_warehouse RESUME;"; var statement1 = snowflake.createStatement({sqlText: enable_wh}); statement1.execute(); // Send notification about new cycle var sql_command = "CALL SYSTEM$SEND_EMAIL('" + INTEGRATION_NAME + "', " + "'" + EMAIL_LIST + "', " + "'" + EMAIL_SUBJECT + "'," + "'" + EMAIL_CONTENT + "'" + ");"; var statement2 = snowflake.createStatement({sqlText: sql_command}); statement2.execute(); return "Resources reset for new budget cycle"; $$;
Accordez des privilèges sur la procédure stockée à l’application SNOWFLAKE :
GRANT USAGE ON DATABASE code_db TO APPLICATION SNOWFLAKE; GRANT USAGE ON SCHEMA code_db.sch1 TO APPLICATION SNOWFLAKE; GRANT USAGE ON PROCEDURE code_db.sch1.reset_resources(STRING, STRING, STRING, STRING) TO APPLICATION SNOWFLAKE;
Définissez l’action de début de cycle pour le budget :
CALL budget_db.sch1.my_budget!SET_CYCLE_START_ACTION( SYSTEM$REFERENCE('PROCEDURE', 'code_db.sch1.reset_resources(STRING, STRING, STRING, STRING)'), ARRAY_CONSTRUCT('my_int', 'admin@example.com', 'Budget Cycle Restarted', 'New budget cycle has begun'));
Dépannage des actions de début de cycle¶
Si une action de début de cycle ne fonctionne pas comme prévu, utilisez les méthodes suivantes pour diagnostiquer le problème.
Surveiller l’exécution des actions de début de cycle¶
Snowflake utilise une tâche pour exécuter l’action de début de cycle. Cette tâche est nommée _budget_cycle_start_task. Pour vérifier l’état d’exécution de la tâche d’action de début de cycle pour une instance de budget, exécutez la requête suivante. Remplacez budget_name par le nom de votre budget.
SELECT th.*, ci.name AS budget_name
FROM SNOWFLAKE.ACCOUNT_USAGE.TASK_HISTORY th
JOIN SNOWFLAKE.ACCOUNT_USAGE.CLASS_INSTANCES ci
ON th.instance_id = ci.id
WHERE ci.class_name = 'BUDGET'
AND th.name ILIKE '_budget_cycle_start_task'
AND ci.name = '<budget_name>'
ORDER BY th.completed_time DESC
LIMIT 10;
Dépannage des actions qui ne se déclenchent pas¶
Si une action de début de cycle ne se déclenche pas alors qu’elle est attendue, recherchez les problèmes courants suivants. Supposons que votre budget personnalisé soit budget_db.sch1.my_budget.
Procédure stockée ou privilèges modifiés
Vérifiez que la procédure stockée appelée par l’action de début de cycle est toujours valide et que l’application SNOWFLAKE dispose encore des privilèges nécessaires. Vous pouvez vérifier les privilèges en exécutant :
SHOW GRANTS ON PROCEDURE code_db.sch1.reset_resources(STRING, STRING, STRING, STRING);
Le budget n’est pas activé
Pour les budgets de compte uniquement, vérifiez que le budget est activé en appelant la méthode GET_CONFIG et en vérifiant le champ is_active.
CALL budget_db.sch1.my_budget!GET_CONFIG();
Aucune action de début de cycle n’est configurée
Vérifiez qu’une action de début de cycle est configurée pour le budget :
CALL budget_db.sch1.my_budget!GET_CYCLE_START_ACTION();
Le cycle budgétaire n’a pas encore redémarré
L’action de début de cycle ne se déclenche que lorsque le cycle budgétaire redémarre. Vérifiez quand le cycle en cours a commencé et quand il se terminera pour déterminer quand le déclenchement suivant se produira.