Inicializando um projeto a partir de um modelo

Para facilitar a instanciação de projetos, Snowflake CLI implementa modelos de projeto. É possível criar seus próprios modelos de projeto ou usar amostras fornecidas pela Snowflake no repositório Git público de modelos de CLI da Snowflake.

O comando snow init cria um diretório de projeto e o preenche com a estrutura de arquivo definida no modelo especificado.

  • Se você não fornecer a opção --no-interactive, o comando solicitará cada variável especificada pelo modelo (template.yml) que você não fornecer com a opção -D (ou --variable).

  • Se você fornecer a opção --no-interactive, o comando usará os valores padrão das variáveis (definidas pelo modelo). Se o modelo não definir um valor padrão para uma variável e você não usar a opção -D para fornecê-lo, o comando sairá com um erro.

O comando snow init usa a seguinte sintaxe:

snow init PATH [--template-source SOURCE] [--template NAME] [-D key1=value1 -D key2=value2...] [--no-interactive] 
Copy

onde:

  • PATH é um novo diretório onde o comando inicializa o projeto. Se você especificar um diretório existente, o comando sairá com um erro.

  • [--template-source SOURCE] é um dos seguintes:

    • Um caminho de arquivo local do diretório do modelo.

    • Um URL de Git válido para o diretório com o modelo de projeto. Se não for especificado, o comando assume como padrão o repositório Git de modelos de CLI do Snowflake.

  • [--template NAME] especifica qual subdiretório de SOURCE usar como modelo (útil para fontes remotas). Se não for fornecido, SOURCE será tratado como um único modelo.

  • [-D key1=value1 -D key2=value2...] é uma lista de um ou mais pares nome-valor, fornecendo valores para variáveis definidas no modelo (em template.yml). O comando não solicita variáveis fornecidas com esta opção.

  • [--no-interactive] desabilita prompts para entradas do usuário. Se você usar esta opção, será necessário fornecer todos os valores necessários com as opções [-D key1=value1 -D key2=value2...]; caso contrário, o comando existirá com um erro.

Para mais informações, consulte a referência de comando snow init.

Exemplos

  • Inicialização de projeto a partir do modelo example_snowpark do repositório padrão:

    snow init my_snowpark_test_app --template example_snowpark 
    Copy

    Os prompts de comando para (os valores padrão são exigidos entre colchetes):

    Project identifier (used to determine artifacts stage path) [my_snowpark_project]: What stage should the procedures and functions be deployed to? [dev_deployment]: snowpark Initialized the new project in my_snowpark_test_app 
  • Inicialize o projeto a partir do modelo local.

    snow init new_streamlit_project --template-source ../local_templates/example_streamlit -D query_warehouse=dev_wareshouse -D stage=testing 
    Copy

    Neste exemplo, as variáveis query_warehouse e stage são especificadas com a opção -D, portanto, o comando solicita apenas o seguinte:

    Name of the streamlit app [streamlit_app]: Initialized the new project in new_streamlit_project 

Criação de modelos personalizados

Layout de modelo

Um modelo de projeto requer um arquivo template.yml com dados que explicam como o comando snow init deve renderizar o modelo. Se o arquivo não estiver presente no diretório raiz do modelo, snow init termina com um erro. Para obter mais informações, consulte a sintaxe template.yml.

Sintaxe do modelo

Variáveis e expressões de modelo devem ser delimitadas entre <! ... !>. Snowflake CLI também oferece suporte a expressões e filtros básicos jinja2, por exemplo:

some_file_spec:  filename: <! file_name !>  size: "<! [ max_file_size_mb, 4 ] | max !> MB" 
Copy

Os modelos de projeto Snowflake CLI também oferecem suporte filtro e variável reservados a seguir:

  • Variável project_dir_name, que resolve automaticamente para o diretório raiz do projeto criado.

    Por exemplo, suponha que seu arquivo snowflake.yml contenha o seguinte:

    definition_version: "1.1" snowpark:  project_name: <! project_dir_name !>  ... 
    Copy

    Se você executar o seguinte comando para inicializar o projeto a partir do modelo personalizado:

    snow init examples/new_snowpark_project --template-source my_example_template/ 
    Copy

    O comando snow init renderiza o arquivo snowflake.yml da seguinte forma:

    definition_version: "1.1" snowpark:  project_name: new_snowpark_project  ... 
    Copy
  • Filtro to_snowflake_identifier, que formata cadeias de caracteres fornecidas pelo usuário em identificadores Snowflake formatados corretamente.

    A Snowflake recomenda fortemente usar este filtro quando uma variável faz referência a um objeto Snowflake.

    Por exemplo, suponha que seu arquivo snowflake.yml contenha o seguinte:

    definition_version: "1.1" streamlit:  name: <! name | to_snowflake_identifier !>  ... 
    Copy

    Se você executar o seguinte comando para inicializar um projeto a partir do modelo personalizado:

    snow init examples/streamlit --template-source my_example_template2/ -D name='My test streamlit' 
    Copy

    O comando snow init renderiza o arquivo snowflake.yml da seguinte forma:

    definition_version: "1.1" streamlit:  name: My_test_streamlit  ... 
    Copy

    Se uma cadeia de caracteres não puder ser convertida em um identificador Snowflake válido, o comando snow init sairá com um erro, conforme mostrado:

    snow init examples/streamlit --template-source my_example_template2/ -D name=1234567890 
    Copy
    ╭─ Error ────────────────────────────────────────────────────────────────────────╮ │ Value '123456789' cannot be converted to valid Snowflake identifier. │ │ Consider enclosing it in double quotes: "" │ ╰────────────────────────────────────────────────────────────────────────────────╯ 

Sobre o arquivo de modelo do projeto template.yml

O arquivo de modelo de projeto template.yml armazena todos os dados necessários para renderizar o projeto. Por exemplo:

minimum_cli_version: "2.7.0" files_to_render:  - snowflake.yml variables:  - name: name  default: streamlit_app  prompt: "Name of the streamlit app"  type: string  - name: stage  default: my_streamlit_stage  prompt: "What stage should the app be deployed to?"  type: string  - name: query_warehouse  default: my_streamlit_warehouse  prompt: "On which warehouse SQL queries issued by the application are run"  type: string 
Copy

A tabela a seguir lista as propriedades em um arquivo de modelo de projeto template.yml.

Propriedades do modelo

Propriedade

Definição

minimum_cli_version

optional, string (padrão: Nenhum)

Versão de Snowflake CLI mínima Se especificado, o comando snow init verifica a versão de Snowflake CLI instalada e sai com um erro se a versão instalada for inferior à versão especificada.

files_to_render

optional, string list (padrão: [])

Lista de arquivos a serem renderizados pelo comando snow init. Cada caminho deve ser relativo à raiz do modelo.

Nota

Arquivos de modelo não incluídos nesta lista são adicionados ao novo projeto, mas seu conteúdo permanece inalterado.

variáveis

optional, variable list (padrão: [])

Lista de variáveis de modelo. Ele suporta a personalização de prompts, fornecendo valores padrão para variáveis opcionais e verificação básica de tipos. Consulte a tabela Parâmetros de propriedade de variáveis abaixo para obter mais detalhes. Os valores de variável são determinados em ordem a partir desta lista.

Se você omitir qualquer variável usada no arquivo snowflake.yml desta lista, o comando snow init sairá com o seguinte erro.

╭─ Error ─────────────────────────────────────────────────────────╮ │ Cannot determine value of variable undefined_variable │ ╰─────────────────────────────────────────────────────────────────╯ 

A tabela a seguir lista os parâmetros de uma propriedade de variável.

Parâmetros de propriedade de variável

Propriedade

Definição

name

required, string

Nome da variável. É usado em arquivos de modelo, como <! name !> e na opção -D, como -D name=value.

prompt

optional, string

Prompt para solicitar ao usuário um valor. Se você não definir esse parâmetro, o comando exibirá o nome do parâmetro como texto do prompt.

Se você definir o prompt da seguinte forma:

variables:  - name: project_id  prompt: The identifier for the project 
Copy

snow init exibe este prompt para a variável project_id.

The identifier for the project: 

padrão

optional, string/int/float

Valor padrão da variável. Se não for fornecido, a variável será tratada como necessária, portanto, o usuário precisa fornecer o valor após um prompt ou especificando-o com a opção de linha de comando -D.

O exemplo a seguir define duas variáveis com valores padrão:

variables:  - name: max_file_size_mb  default: 16  - name: file_name  default: 'default_file_name.zip' 
Copy

Quando executado, o comando snow init exibe os seguintes prompts para essas duas variáveis:

file_name [default_file_name.zip]: max_file_size_mb [16]: 5 
Copy

Neste exemplo, o comando usa o valor padrão (default_file_name.zip) para a variável file_name que tem um valor padrão e define max_file_size_mb para o valor fornecido pelo usuário (5).

tipo

optional, string

Tipo de dados da variável. Os valores válidos incluem: string, int e float. Se não for especificado, o comando assume que o valor é um string.

O exemplo a seguir define uma variável como um tipo de dados int:

variables:  - name: max_file_size_mb  type: int 
Copy

Quando executado, o comando snow init exibe os seguintes erros se o usuário inserir um valor do tipo de dados errado:

max_file_size_mb: not an int Error: 'not an int' is not a valid integer. max_file_size_mb: 14.5 Error: '14.5' is not a valid integer. max_file_size_mb: 6 Initialized the new project in example_dir