Gerenciamento de warehouses virtuais do Snowflake com Python

Você pode usar Python para gerenciar warehouses virtuais do Snowflake, que são clusters de recursos de computação no Snowflake. Para uma visão geral dos warehouses, consulte Warehouses virtuais.

A Snowflake Python API representa warehouses com dois tipos separados:

  • Warehouse: expõe as propriedades de um warehouse, como nome, tamanho, tipo e configurações de retomada automática e suspensão automática.

  • WarehouseResource: expõe métodos que você pode usar para buscar um objeto Warehouse correspondente, suspender e retomar o warehouse e excluir o warehouse.

Os exemplos neste tópico pressupõem que você adicionou código para se conectar ao Snowflake e criou um objeto Root a partir do qual usar a Snowflake Python API. Para obter mais informações, consulte Conexão ao Snowflake com a Snowflake Python API.

O código no exemplo a seguir usa parâmetros de conexão definidos em um arquivo de configuração para criar uma conexão com o Snowflake. Usando o objeto Session resultante, o código cria um objeto Root para usar os tipos e métodos de API.

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

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

Criação de um warehouse

Para criar um warehouse, primeiro crie um objeto Warehouse. Em seguida, crie um objeto WarehouseCollection a partir do objeto da API Root. Usando WarehouseCollection.create, adicione o novo warehouse ao Snowflake.

O código no exemplo a seguir cria um objeto Warehouse que representa um warehouse chamado my_wh. Ele cria uma variável WarehouseCollection warehouses e usa WarehouseCollection.create para criar um novo warehouse no Snowflake.

from snowflake.core import Root
from snowflake.core.warehouse import Warehouse

my_wh = Warehouse(
  name="my_wh",
  warehouse_size="SMALL",
  auto_suspend=600,
)
warehouses = root.warehouses
warehouses.create(my_wh)
Copy

Como obter detalhes do warehouse

Você pode obter informações sobre um warehouse chamando o método WarehouseResource.fetch, que retorna um objeto Warehouse.

O código no exemplo a seguir obtém informações sobre um warehouse chamado my_wh.

from snowflake.core import Root
from snowflake.core.warehouse import Warehouse

my_wh = root.warehouses["my_wh"].fetch()
print(my_wh.to_dict())
Copy

Criação ou atualização de um warehouse

Você pode atualizar as características de um warehouse existente definindo propriedades de um objeto Warehouse que representa o warehouse e, em seguida, passando o objeto para Snowflake com o método WarehouseResource.create_or_update.

Você também pode passar um objeto Warehouse descrevendo um novo warehouse quando quiser criar o warehouse.

O código no exemplo a seguir define o nome, o tamanho e a configuração de suspensão automática de um warehouse e, em seguida, atualiza o warehouse no Snowflake, criando o warehouse se ele ainda não existir. Nesse caso, ele altera o tamanho do warehouse my_wh para LARGE e sua configuração de suspensão automática para 1800 se você o criou anteriormente com propriedades diferentes.

from snowflake.core import Root
from snowflake.core.warehouse import Warehouse

my_wh = Warehouse(
  name="my_wh",
  warehouse_size="LARGE",
  auto_suspend=1800,
)
my_wh_res = root.warehouses["my_wh"]
my_wh_res.create_or_update(my_wh)
Copy

Listagem de warehouses

Você pode listar warehouses usando o método WarehouseCollection.iter. O método retorna um iterador PagedIter de objetos Warehouse.

O código no exemplo a seguir lista warehouses cujo nome inclui o texto “meu”, imprimindo o nome de cada uma.

from snowflake.core import Root
from snowflake.core.warehouse import Warehouse, WarehouseCollection

warehouses: WarehouseCollection = root.warehouses
wh_iter = warehouses.iter(like="my%")  # returns a PagedIter[Warehouse]
for wh_obj in wh_iter:
  print(wh_obj.name)
Copy

Execução operações de warehouse

Você pode realizar operações comuns de warehouse,—como suspender e retomar warehouses e anular todas as consultas em warehouses—com um objeto WarehouseResource.

O código no exemplo a seguir suspende e retoma o warehouse my_wh, anula todas as consultas em execução ou enfileiradas no warehouse e, em seguida, exclui o warehouse.

from snowflake.core import Root
from snowflake.core.warehouse import Warehouse

my_wh_res = root.warehouses["my_wh"]

my_wh_res.suspend()
my_wh_res.resume()
my_wh_res.abort_all_queries()
my_wh_res.delete()
Copy