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.

Pré-requisitos

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

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 a Snowflake Python API.

Como criar um warehouse

Para criar um warehouse, primeiro crie um objeto Warehouse e, em seguida, crie um objeto WarehouseCollection a partir do objeto 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:

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

O código cria uma variável WarehouseCollection warehouses e usa WarehouseCollection.create para criar um novo warehouse no Snowflake.

Obtenção 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 do warehouse

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

Você também pode passar um objeto Warehouse que descreve 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:

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

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.

Listagem de warehouses

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

O código no exemplo a seguir lista os warehouses cujo nome inclui o texto my e imprime o nome de cada um deles:

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 de operações do 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