애플리케이션 패키지 유효성 검사하기

전제 조건

  • config.toml 파일에 기존 연결이 있어야 합니다.

  • Snowflake Native App 프로젝트에 snowflake.yml 파일이 있어야 합니다.

Snowflake CLI 는 애플리케이션을 실행(snow app run) 또는 배포(snow app deploy)할 때 SQL EXECUTE IMMEDIATE 문을 사용하여 포함된 다른 SQL 파일과 함께 Snowflake Native App 설정 스크립트의 유효성을 자동으로 검사합니다. 명령 중 하나를 통해 가장 최근에 업로드된 스크립트를 사용합니다. 유효성 검사는 SQL 구문 오류, 잘못된 오브젝트 참조 및 모범 사례를 확인합니다. 스크립트 유효성 검사에 실패하면, 실행된 명령은 중단되지만 스테이징된 파일은 자동으로 롤백되지 않습니다.

Snowflake Native App 설정 스크립트에 대한 자세한 내용은 Snowflake Native App Framework 설명서에서 설정 스크립트 만들기 를 참조하십시오.

설치 스크립트를 수동으로 유효성 검사하는 방법

때로는 배포 프로세스 중에 유효성 검사가 실패하여 발생할 수 있는 잠재적인 영향을 방지하기 위해 애플리케이션을 배포하기 전에 설정 스크립트의 유효성을 검사해야 할 수도 있습니다. snow app validate 명령은 애플리케이션을 실행하거나 배포하지 않고도 설정 스크립트의 유효성을 검사합니다. 이 기능은 명령이 완료된 후 자동으로 삭제되는 별도의 스크래치 스테이지에 소스 파일을 업로드하여 애플리케이션의 소스 스테이지에 있는 파일을 방해하지 않도록 합니다.

  1. 필요한 경우, 연결을 만듭니다.

  2. 프로젝트 내에서 다음과 유사하게 snow app validate 명령을 실행합니다.

    snow app validate --connection="dev"
    
    Copy

    성공하면 명령은 다음 메시지를 반환합니다.

    Snowflake Native App validation succeeded.
    

    유효성 검사에 실패하면 다음 오류 메시지와 함께 오류 메시지가 표시됩니다.

    Snowflake Native App setup script failed validation.
    

원시 유효성 검사 출력을 JSON으로 보려면 다음과 같이 snow app validate --format json 을 실행하면 됩니다.

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

여기서,

  • 오류 는 오류가 있을 경우 오류 목록을 표시합니다. 오류로 인해 유효성 검사가 실패합니다.

  • 경고 는 경고 목록이 있는 경우 이를 표시합니다.

  • 상태 는 유효성 검사 결과를 SUCCESS 또는 FAILURE로 표시합니다.

유효성 검사에서 오류가 발생하여 유효성 검사가 실패하거나 경고가 발생하여 유효성 검사가 성공하는 경우 명령은 오류나 경고에 대한 다음 정보를 표시합니다.

  • message: 사람이 읽을 수 있는 오류 또는 경고 메시지입니다.

  • cause: SQL 구문이 오류 또는 경고로 간주되는 이유입니다.

  • errorCode: 오류나 경고와 관련된 숫자 코드입니다.

  • fileName: 스테이지 루트를 기준으로 한 오류나 경고가 포함된 파일의 이름입니다.

  • line: 오류나 경고의 위치를 나타내는 파일의 줄 번호입니다.

  • column: 오류나 경고가 발생한 줄의 열 번호입니다.

다음 예는 경고와 오류가 모두 포함된 실패한 유효성 검사를 보여줍니다.

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"
}