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

opcional, cadeia de caracteres (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

opcional, lista de cadeia de caracteres (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

opcional, lista de variáveis (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 undefinded_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

nome

obrigatório, cadeia de caracteres

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

prompt

opcional, cadeia de caracteres

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

opcional, cadeia de caracteres/inteiro/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

opcional, cadeia de caracteres

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