Desenvolvimento e execução de código nos Snowflake Notebooks

Este tópico descreve como escrever e executar códigos SQL, Python e Markdown em Snowflake Notebooks.

Noções básicas sobre células de notebooks

Esta seção apresenta algumas operações básicas de células. Quando você cria um notebook, três células de exemplo são exibidas. Você pode modificar essas células ou adicionar novas.

Crie uma nova célula:

Snowflake Notebooks oferecem suporte a três tipos de células: SQL, Python e Markdown. Para criar uma nova célula, você pode passar o mouse sobre uma célula existente ou rolar até a parte inferior do notebook e selecionar um dos botões para o tipo de célula que deseja adicionar.

Adicione novos botões de célula na parte inferior do notebook.

Você pode alterar a linguagem da célula a qualquer momento após ela ter sido criada usando um dos dois métodos:

Como mover células

É possível mover uma célula arrastando e soltando a célula com o mouse ou usando o menu de ações:

  1. (Opção 1) Passe o mouse sobre a célula existente que deseja mover. Selecione o ícone Ícone de arrastar e soltar em Notebooks (arrastar e soltar) no lado esquerdo da célula e mova a célula para seu novo local.

  2. (Opção 2) Selecione o menu de reticências verticais mais ações para planilha (ações). Em seguida, selecione a ação apropriada.

Nota

Para mover o foco entre as células, use as setas para cima e para baixo.

Como excluir uma célula

Para excluir uma célula, siga estas etapas em um notebook:

  1. Selecione o menu de reticências verticais mais ações para planilha (mais ações).

  2. Selecione Delete.

  3. Selecione Delete novamente para confirmar.

Você pode usar um atalho de teclado para excluir uma célula também.

Para considerações ao usar Python e células SQL, consulte Considerações para execução de notebooks.

Execute as células em Snowflake Notebooks

Para executar células Python e SQL nos Snowflake Notebooks, você pode:

  • Executar uma única célula: escolha esta opção ao fazer atualizações de código frequentes.

    • Pressione CMD + Return em um teclado Mac, ou CTRL + Enter em um teclado Windows.

    • Selecione Execute somente esta célula ou Run this cell only.

  • Executar todas as células em um notebook em ordem sequencial: escolha esta opção antes de apresentar ou compartilhar um notebook para garantir que os destinatários consultem as informações mais atualizadas.

    • Pressione CMD + Shift + Return em um teclado Mac, ou CTRL + Shift + Enter em um teclado Windows.

    • Selecione Run all.

  • Executar uma célula e avançar para a próxima célula: escolha esta opção para executar uma célula e avançar para a próxima célula mais rapidamente.

    • Pressione Shift + Return em um teclado Mac, ou Shift + Enter em um teclado Windows.

    • Selecione o menu de reticências verticais mais ações para planilha (mais ações) para uma célula e escolha Run cell and advance.

  • Executar tudo acima: escolha esta opção ao executar uma célula que faça referência aos resultados de células anteriores.

    • Selecione o menu de reticências verticais mais ações para planilha (mais ações) para uma célula e escolha Run all above.

  • Executar tudo abaixo: escolha esta opção ao executar uma célula da qual células posteriores dependem. Esta opção executa a célula atual e todas as células seguintes.

    • Selecione o menu de reticências verticais mais ações para planilha (mais ações) para uma célula e escolha Run all below.

Quando uma célula está em execução, outras solicitações de execução são enfileiradas e serão executadas assim que a célula em execução ativa terminar.

Como inspecionar o status de uma célula

O status de execução da célula é indicado pelas cores exibidas pela célula. Essa cor de status é exibida em dois lugares: na parede à esquerda da célula e no mapa de navegação da célula à direita.

Cor do status da célula:

  • Ponto azul: a célula foi modificada, mas ainda não foi executada.

  • Vermelho: a célula foi executada na sessão atual e ocorreu um erro.

  • Verde: a célula foi executada na sessão atual sem erros.

  • Verde em movimento: a célula está em execução no momento.

  • Cinza: a célula foi executada em uma sessão anterior e os resultados mostrados são da sessão anterior. Os resultados das células da sessão interativa anterior são mantidos por 7 dias. Sessão interativa significa que o usuário executa o notebook de forma interativa em Snowsight, em vez daqueles que foram executados por um cronograma ou pelo comando EXECUTE NOTEBOOK SQL.

  • Cinza piscante: a célula está esperando para ser executada depois que você selecionar Run All.

Nota

As células Markdown não mostram nenhum status.

Depois que uma célula termina de ser executada, o tempo que levou para ser executada é exibido na parte superior da célula. Selecione esse texto para visualizar os detalhes da execução, incluindo os horários de início e término e o tempo total decorrido.

As células SQL contêm informações adicionais, como o warehouse usado para executar a consulta, as linhas retornadas e um hiperlink para a página do ID da consulta.

Janela de detalhes da execução da célula.

Como parar uma célula em execução

Para interromper a execução de qualquer célula de código que esteja em execução no momento, selecione Stop no canto superior direito da célula. Você também pode selecionar Stop no canto superior direito da página Notebooks. Enquanto as células estão funcionando, Run all se torna Stop.

Isso interrompe a execução da célula sendo executada no momento e de todas as células subsequentes que foram programadas para serem executadas.

Como formatar texto com Markdown

Para incluir Markdown em seu notebook, adicione uma célula Markdown:

  1. Use um atalho de teclado e selecione Markdown ou + Markdown.

  2. Selecione o ícone de lápis Edit markdown ou clique duas vezes na célula e comece a escrever Markdown.

Você pode digitar Markdown válido para formatar uma célula de texto. À medida que você digita, o texto formatado aparece abaixo da sintaxe Markdown.

Captura de tela de uma célula Markdown mostrando texto Markdown com um cabeçalho H1 indicado com um # e um cabeçalho “An example Markdown cell” (Um exemplo de célula Markdown) seguido pelo corpo de texto “This is an example Markdown cell” (Este é um exemplo de célula Markdown) em um notebook Snowflake. Abaixo do conteúdo Markdown bruto, o Markdown renderizado aparece com uma fonte diferente.

Para exibir apenas o texto formatado, selecione o ícone de marca de seleção Done editing.

Captura de tela de uma célula Markdown que está mostrando apenas o Markdown renderizado: um cabeçalho “An example Markdown cell” (Um exemplo de célula Markdown) e o corpo de texto “This is an example Markdown cell” (Este é um exemplo de célula Markdown) em um notebook Snowflake.

Nota

As células Markdown atualmente não oferecem suporte à renderização de HTML.

Noções básicas de Markdown

Esta seção descreve a sintaxe básica do Markdown para introduzir o assunto.

Cabeçalhos

Nível de título

Sintaxe Markdown

Exemplo

Nível superior

# Top-level Header
Copy
Cabeçalho um em Markdown

2º nível

## 2nd-level Header
Copy
Cabeçalho um em Markdown

3º nível

### 3rd-level Header
Copy
Cabeçalho um em Markdown

Formatação de texto em linha

Formato de texto

Sintaxe Markdown

Exemplo

Itálico

*italicized text*
Copy
Texto em itálico em Markdown

Negrito

**bolded text**
Copy
Texto em negrito em Markdown

Link

[Link text](url)
Copy
Link em Markdown

Listas

Tipo de lista

Sintaxe Markdown

Exemplo

Lista ordenada

1. first item
2. second item
  1. Nested first
  2. Nested second
Copy
Lista ordenada em Markdown

Lista não ordenada

- first item
- second item
  - Nested first
  - Nested second
Copy
Lista não ordenada em Markdown

Formatação de código

Linguagem

Sintaxe Markdown

Exemplo

Python

```python
import pandas as pd
df = pd.DataFrame([1,2,3])
```
Copy
Trecho de código Python em Markdown

SQL

```sql
SELECT * FROM MYTABLE
```
Copy
Trecho de código SQL em Markdown

Incorporar imagens

Tipo de arquivo

Sintaxe Markdown

Exemplo

Imagem

![<alt_text>](<path_to_image>)
Copy
Imagem incorporada em Markdown

Para um notebook que demonstra esses exemplos de Markdown, consulte a seção Células de Markdown do notebook de histórias de dados visuais.

Compreensão das saídas de células

Ao executar uma célula Python, o notebook exibe os seguintes tipos de saída da célula nos resultados:

  • Quaisquer resultados gravados no console, como logs, erros e avisos e saídas de instruções print().

  • DataFrames são impressos automaticamente com a exibição de tabela interativa do Streamlit, st.dataframe().

    • Os tipos de exibição compatíveis com DataFrame incluem pandas DataFrame, Snowpark DataFrames e tabelas Snowpark.

    • Para o Snowpark, DataFrames impressos são avaliados imediatamente, sem a necessidade de executar o comando .show(). Se você preferir não avaliar o DataFrame imediatamente, por exemplo, ao executar o notebook no modo não interativo, o Snowflake recomenda remover as instruções de impressão DataFrame para acelerar o tempo de execução geral do código do Snowpark.

  • As exibições são renderizadas em saídas. Para saber mais sobre como visualizar seus dados, consulte Visualização de dados no Snowflake Notebooks.

Além disso, você pode acessar os resultados de sua consulta SQL em Python e vice-versa. Consulte Células de referência e variáveis nos Snowflake Notebooks.

Limites de saída da célula

Apenas 10.000 linhas ou 8 MB da saída do DataFrame são mostrados como resultados de célula, o que for menor. No entanto, todo o DataFrame ainda permanece disponível para uso na sessão do notebook. Por exemplo, mesmo que o DataFrame inteiro não seja renderizado, você ainda pode executar tarefas de transformação de dados.

Para cada célula, são permitidos apenas 20 MB de saída. Se o tamanho da saída da célula exceder 20 MB, a saída será descartada. Se isso acontecer, considere a possibilidade de dividir o conteúdo em várias células.

Células de referência e variáveis nos Snowflake Notebooks

Você pode referenciar os resultados das células anteriores em uma célula do notebook. Por exemplo, para referenciar o resultado de uma célula SQL ou o valor de uma variável Python, consulte as seguintes tabelas:

Nota

O nome da célula da referência diferencia maiúsculas de minúsculas e deve corresponder exatamente ao nome da célula referenciada.

Saída de referência SQL em células Python:

Tipo de célula de referência

Tipo de célula atual

Sintaxe de referência

Exemplo

SQL

Python

cell1

Converter uma tabela de resultados SQL em um Snowpark DataFrame.

Se você tiver o seguinte em uma célula SQL nomeada cell1:

SELECT 'FRIDAY' as SNOWDAY, 0.2 as CHANCE_OF_SNOW
UNION ALL
SELECT 'SATURDAY',0.5
UNION ALL
SELECT 'SUNDAY', 0.9;
Copy

Você pode referenciar a célula para acessar o resultado SQL:

snowpark_df = cell1.to_df()
Copy

Converta o resultado em um pandas DataFrame:

my_df = cell1.to_pandas()
Copy

Referência de variáveis em código SQL:

Importante

No código SQL, você só pode referenciar variáveis Python do tipo string. Você não pode referenciar um Snowpark DataFrame, pandas DataFrame ou outro formato DataFrame nativo do Python.

Tipo de célula de referência

Tipo de célula atual

Sintaxe de referência

Exemplo

SQL

SQL

{{cell2}}

Por exemplo, em uma célula SQL nomeada cell1, referencie os resultados da célula de cell2:

SELECT * FROM {{cell2}} where PRICE > 500
Copy

Python

SQL

{{variable}}

Por exemplo, em uma célula Python nomeada cell1:

Como usar a variável Python como um valor

c = "USA"
Copy

É possível fazer referência ao valor da variável c em uma célula SQL nomeada cell2, colocando-a entre aspas simples para garantir que seja tratada como um valor:

SELECT * FROM my_table WHERE COUNTRY = '{{c}}'
Copy

Como usar a variável Python como um identificador

Se a variável Python representar um identificador SQL, como um nome de coluna ou tabela:

column_name = "COUNTRY"
Copy

Se a variável Python representar um identificador SQL, como o nome de uma coluna ou tabela (column_name = "COUNTRY"), é possível fazer referência à variável diretamente, sem aspas:

SELECT * FROM my_table WHERE {{column_name}} = 'USA'
Copy

Certifique-se de diferenciar entre variáveis usadas como valores (com aspas) e como identificadores (sem aspas).

Observação: a referência ao Python DataFrames não é compatível.

Considerações para execução de notebooks

  • Os notebooks são executados usando os direitos do chamador. Para considerações adicionais, consulte Alteração do contexto de sessão para um notebook.

  • Você pode importar bibliotecas Python para usar em um notebook. Para obter mais detalhes, consulte Importação de pacotes Python para uso em notebooks.

  • Ao referenciar objetos em células SQL, você deve usar os nomes de objetos totalmente qualificados, a menos que esteja referenciando nomes de objetos em um banco de dados ou esquema especificado. Consulte Alteração do contexto de sessão para um notebook.

  • Os rascunhos do notebook são salvos a cada três segundos.

  • Você pode usar a integração com o Git para manter versões do notebook.

  • É possível configurar um tempo limite de inatividade para encerrar automaticamente a sessão do notebook quando essa configuração for atingida. Para obter mais informações, consulte Tempo ocioso e reconexão.

  • Os resultados das células do notebook são visíveis apenas para o usuário que executou o notebook e são armazenados em cache em todas as sessões. A reabertura de um notebook exibe os resultados anteriores da última vez que o usuário executou o notebook usando o Snowsight.

  • BEGIN … END (Script Snowflake) não é compatível em células SQL. Em vez disso, use o método Session.sql().collect() em uma célula Python para executar o bloco de script. Encadeie a chamada sql com uma chamada para collect para executar imediatamente a consulta SQL.

    O código a seguir executa um bloco de script Snowflake usando o método session.sql().collect():

    from snowflake.snowpark.context import get_active_session
    session = get_active_session()
    code_to_run = """
    BEGIN
        CALL TRANSACTION_ANOMALY_MODEL!DETECT_ANOMALIES(
            INPUT_DATA => SYSTEM$REFERENCE('TABLE', 'ANOMALY_INFERENCE'),
            TIMESTAMP_COLNAME =>'DATE',
            TARGET_COLNAME => 'TRANSACTION_AMOUNT',
            CONFIG_OBJECT => {'prediction_interval': 0.95}
        );
    
        LET x := SQLID;
        CREATE TABLE ANOMALY_PREDICTIONS AS SELECT * FROM TABLE(RESULT_SCAN(:x));
    END;
    """
    data = session.sql(code_to_run).collect(block=True);
    
    Copy