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 objetoWarehouse
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)
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)
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())
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)
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)
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()