Validation d’un paquet d’application

Conditions préalables

  • Vous devez avoir une connexion existante dans votre fichier config.toml.

  • Vous devez avoir un fichier snowflake.yml dans votre projet Snowflake Native App.

Snowflake CLI valide automatiquement un script d’installation Snowflake Native App, ainsi que tout autre fichier SQL inclus à l’aide de l’instruction SQL EXECUTE IMMEDIATE, lorsque vous exécutez (snow app run) ou déployez (snow app deploy) une application. Elle utilise le script le plus récemment téléchargé par l’une des commandes. Vérifications de validation pour les erreurs de syntaxe SQL, références d’objet non valides et bonnes pratiques. Si la validation du script échoue, la commande exécutée s’interrompt mais ne restaure pas automatiquement les fichiers en zone de préparation.

Pour plus d’informations sur les scripts d’installation Snowflake Native App, voir Création d’un script de configuration dans la documentation de Snowflake Native App Framework.

Comment valider manuellement un script d’installation

Parfois, vous souhaiterez peut-être valider un script d’installation avant de déployer une application pour éviter les impacts potentiels qui pourraient survenir si la validation échoue pendant le processus de déploiement. La commande snow app validate valide un script d’installation sans avoir besoin d’exécuter ou de déployer une application. Elle télécharge les fichiers sources vers une zone de préparation de travail distincte qui est supprimée automatiquement une fois la commande terminée pour éviter de perturber les fichiers dans la zone de préparation source de l’application.

  1. Créez une connexion, si nécessaire.

  2. Exécutez la commande snow app validate à partir de votre projet, comme suit :

    snow app validate --connection="dev"
    
    Copy

    En cas de succès, la commande renvoie le message suivant :

    Snowflake Native App validation succeeded.
    

    Si la validation échoue, le message d’erreur suivant, ainsi que tous les messages d’erreur, s’affichent :

    Snowflake Native App setup script failed validation.
    

Si vous souhaitez voir la sortie de validation brute comme JSON, vous pouvez exécuter snow app validate --format json, comme indiqué :

snow app validate --format json
Copy
{
    "errors": [],
    "warnings": [],
    "status": "SUCCESS"
}

où :

  • errors affiche une liste d’erreurs, si elles existent. Les erreurs entraînent l’échec de la validation.

  • warnings affiche une liste d’avertissements, s’ils existent.

  • status affiche le résultat de la validation : SUCCESS ou FAILURE.

Si la validation rencontre des erreurs, qui entraînent l’échec de la validation, ou des avertissements, qui l’empêchent de réussir, la commande affiche les informations suivantes pour l’erreur ou l’avertissement :

  • message : message lisible par l’homme pour l’erreur ou l’avertissement.

  • cause : raison pour laquelle la construction SQL est considérée comme une erreur ou un avertissement.

  • errorCode : code numérique associé à l’erreur ou à l’avertissement.

  • fileName : nom du fichier contenant l’erreur ou l’avertissement, relatif à la racine de la zone de préparation.

  • line : numéro de ligne dans le fichier identifiant l’emplacement de l’erreur ou de l’avertissement.

  • column : numéro de colonne dans la ligne où l’erreur ou l’avertissement s’est produit.

L’exemple suivant montre une validation ayant échoué contenant à la fois des avertissements et des erreurs :

snow app validate --format json
Copy
{
    "errors": [
        {
            "message": "Error in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/empty.sql': Empty SQL statement.",
            "cause": "Empty SQL statement.",
            "errorCode": "000900",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/empty.sql",
            "line": -1,
            "column": -1
        },
        {
            "message": "Error in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/second.sql': Unsupported feature 'CREATE VERSIONED SCHEMA without OR ALTER'.",
            "cause": "Unsupported feature 'CREATE VERSIONED SCHEMA without OR ALTER'.",
            "errorCode": "000002",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/second.sql",
            "line": -1,
            "column": -1
        },
        {
            "message": "Error in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql': File '/does-not-exist.sql' cannot be found in the same stage as the setup script is located.",
            "cause": "File '/does-not-exist.sql' cannot be found in the same stage as the setup script is located.",
            "errorCode": "093159",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql",
            "line": -1,
            "column": -1
        }
    ],
    "warnings": [
        {
            "message": "Warning in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql' on line 11 at position 35: APPLICATION ROLE should be created with IF NOT EXISTS.",
            "cause": "APPLICATION ROLE should be created with IF NOT EXISTS.",
            "errorCode": "093352",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql",
            "line": 11,
            "column": 35
        },
        {
            "message": "Warning in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql' on line 15 at position 13: CREATE Table statement in the setup script should have \"IF NOT EXISTS\", \"OR REPLACE\", or \"OR ALTER\".",
            "cause": "CREATE Table statement in the setup script should have \"IF NOT EXISTS\", \"OR REPLACE\", or \"OR ALTER\".",
            "errorCode": "093351",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql",
            "line": 15,
            "column": 13
        },
        {
            "message": "Warning in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql' on line 15 at position 13: Table identifier 'MY_TABLE' should include its parent schema name.",
            "cause": "Table identifier 'MY_TABLE' should include its parent schema name.",
            "errorCode": "093353",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql",
            "line": 15,
            "column": 13
        }
    ],
    "status": "FAIL"
}