Gerenciamento de Snowflake Notebooks com Python

É possível usar Python para gerenciar Snowflake Notebooks, que é uma interface de desenvolvimento no Snowsight que oferece um ambiente de programação interativo baseado em células para Python e SQL. Para obter mais informações, consulte Sobre os notebooks Snowflake.

O Snowflake Python APIs representa notebooks com dois tipos separados:

  • Notebook: Expõe as propriedades de um notebook, como nome, versão, warehouse de consulta e arquivo .ipynb.

  • NotebookResource: Expõe métodos que podem ser usados para buscar um objeto Notebook correspondente, gerenciar versões do notebook e executar o notebook.

Pré-requisitos

Os exemplos neste tópico pressupõem que você tenha adicionado código para se conectar ao Snowflake e criar um objeto Root a partir do qual usar o Snowflake Python APIs.

Por exemplo, o seguinte código usa parâmetros de conexão definidos em um arquivo de configuração para criar uma conexão com o Snowflake:

from snowflake.core import Root
from snowflake.snowpark import Session

session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Copy

Usando o objeto Session resultante, o código cria um objeto Root para usar os tipos e métodos de API. Para obter mais informações, consulte Conexão ao Snowflake com o Snowflake Python APIs.

Criação de um notebook

Para criar um notebook, primeiro crie um objeto Notebook e depois crie um objeto NotebookCollection a partir do objeto Root da API. Usando NotebookCollection.create, adicione o novo notebook ao Snowflake.

O código no exemplo a seguir cria um objeto Notebook que representa um notebook nomeado my_nb no banco de dados my_db e no esquema my_schema:

from snowflake.core.notebook import Notebook

my_nb = Notebook(name="my_nb")

notebooks = root.databases["my_db"].schemas["my_schema"].notebooks
notebooks.create(my_nb)
Copy

O código cria uma variável NotebookCollection chamada notebooks e usa NotebookCollection.create para criar um novo notebook no Snowflake.

Você também pode criar um notebook a partir de um estágio com um arquivo .ipynb existente. O código no exemplo a seguir cria um notebook a partir do estágio @my_stage com o arquivo notebook_file.ipynb:

from snowflake.core.notebook import Notebook

my_nb = Notebook(name="my_nb",
  query_warehouse="my_wh",
  from_location="@my_stage",
  main_file="notebook_file.ipynb")

notebooks = root.databases["my_db"].schemas["my_schema"].notebooks
notebooks.create(my_nb)
Copy

Como obter detalhes do notebook

É possível obter informações sobre um notebook chamando o método NotebookResource.fetch, que retorna um objeto Notebook.

O código no exemplo a seguir obtém informações sobre um notebook nomeado my_nb no banco de dados my_db e no esquema my_schema:

my_nb = root.databases["my_db"].schemas["my_schema"].notebooks["my_nb"].fetch()
print(my_nb.to_dict())
Copy

Listagem de cadernos

É possível listar notebooks usando o método NotebookCollection.iter, que retorna um iterador PagedIter de objetos Notebook.

O código no exemplo a seguir lista os notebooks cujo nome começa com my no banco de dados my_db e no esquema my_schema e, em seguida, imprime o nome de cada um:

from snowflake.core.notebook import NotebookCollection

notebooks: NotebookCollection = root.databases["my_db"].schemas["my_schema"].notebooks
nb_iter = notebooks.iter(like="my%")  # returns a PagedIter[Notebook]
for nb_obj in nb_iter:
  print(nb_obj.name)
Copy

Execução de operações de notebook

É possível executar operações comuns de notebook – como gerenciar versões e executar notebooks – com um objeto NotebookResource.

Para demonstrar algumas operações que é possível realizar com um recurso de notebook, o código no exemplo a seguir faz o seguinte:

  1. Busca o objeto de recurso de notebook my_nb.

  2. Adiciona uma versão ativa ao objeto notebook. Isso equivale a ALTER NOTEBOOK … ADD LIVE VERSION.

  3. Envia a versão ativa do notebook para um repositório Git, se uma conexão Git estiver definida. Caso contrário, define a versão ativa para null.

    Para obter mais informações, consulte ALTER NOTEBOOK.

  4. Executa o notebook.

    Nota

    Para executar um notebook, é necessário primeiro adicionar uma versão ativa a ele.

  5. Descarta o notebook.

my_nb_res = root.databases["my_db"].schemas["my_schema"].notebooks["my_nb"]

my_nb_res.add_live_version(from_last=True)
my_nb_res.commit()
my_nb_res.execute()
my_nb_res.drop()
Copy