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.

O Snowflake Python APIs representa warehouses com dois tipos distintos:

  • 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 podem ser usados para buscar um objeto Warehouse correspondente, suspender e retomar o warehouse e descartar o warehouse.

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.

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 nomeado my_wh:

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 nomeado my_wh:

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

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

É possível definir propriedades de um objeto Warehouse e passá-las ao método WarehouseResource.create_or_alter para criar um warehouse, caso ele não exista, ou alterá-lo de acordo com a definição do warehouse, caso ele exista. O comportamento de create_or_alter é projetado para ser idempotente, o que significa que o objeto de warehouse resultante será o mesmo, independentemente de o warehouse existir antes de você executar o método.

Nota

O método create_or_alter usa valores padrão para quaisquer propriedades de warehouse que você não define explicitamente. Por exemplo, se você não definir auto_suspend, seu valor padrão será None mesmo que o warehouse já existisse com um valor diferente.

O código no exemplo a seguir atualiza o tamanho e a configuração de suspensão automática do warehouse my_wh e, em seguida, altera o warehouse no Snowflake.

from snowflake.core.warehouse import Warehouse

my_wh = root.warehouses["my_wh"].fetch()
my_wh.warehouse_size = "LARGE"
my_wh.auto_suspend = 1800

my_wh_res = root.warehouses["my_wh"]
my_wh_res.create_or_alter(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.warehouse import 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, aborta todas as consultas em execução ou na fila no warehouse e, em seguida, descarta o 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.drop()
Copy