用 Python 管理 Snowflake 虚拟仓库¶
您可以使用 Python 管理 Snowflake 虚拟仓库,虚拟仓库是 Snowflake 中的计算资源集群。有关仓库的概述,请参阅 虚拟仓库。
Snowflake Python APIs 使用两种不同类型来表示仓库:
Warehouse
:显示仓库的属性,如名称、大小、类型、自动恢复和自动暂停设置。WarehouseResource
:显示可用于提取相应的Warehouse
对象、暂停和恢复仓库以及删除仓库的方法。
先决条件¶
在本主题中的示例中,假设您已添加了用来连接 Snowflake 和创建 Root
对象以使用 Snowflake Python APIs 的代码。
例如,以下代码使用配置文件中定义的连接参数来创建与 Snowflake 的连接:
from snowflake.core import Root
from snowflake.snowpark import Session
session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
代码可通过生成的 Session
对象创建 Root
对象,从而使用 API 的类型和方法。有关更多信息,请参阅 使用 Snowflake Python APIs 连接到 Snowflake。
创建仓库¶
要创建仓库,请先创建 Warehouse
对象,然后根据 API Root
对象创建 WarehouseCollection
对象。使用 WarehouseCollection.create
将新仓库添加到 Snowflake。
以下示例中的代码会创建一个 Warehouse
对象,其表示名为 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)
该代码会创建一个 WarehouseCollection
变量 warehouses
,并使用 WarehouseCollection.create
在 Snowflake 中创建了一个新仓库。
获取仓库详细信息¶
您可以通过调用 WarehouseResource.fetch
方法获取有关的仓库信息,该方法会返回一个 Warehouse
对象。
以下示例中的代码会获取有关名为 my_wh
的仓库的信息:
my_wh = root.warehouses["my_wh"].fetch()
print(my_wh.to_dict())
创建或更改仓库¶
您可以设置 Warehouse
对象的属性并将其传递给 WarehouseResource.create_or_alter
方法以创建仓库(如果仓库不存在)或者根据仓库定义更改仓库(如果仓库存在)。create_or_alter
的行为旨在实现幂等性,这意味着无论在调用该方法之前仓库是否存在,生成的仓库对象都是一样的。
备注
对于任何没有显式定义的 仓库 属性,create_or_alter
方法会使用默认值。例如,如果您没有设置 auto_suspend
,即使仓库以前存在不同的值,其值也会默认为 None
。
以下示例中的代码会更新 my_wh
仓库的大小和自动暂停设置,然后在 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)
在此示例中,它将 my_wh
仓库的大小更改为 LARGE
,并将其自动暂停设置更改为 ``1800``(如果您之前使用不同的属性创建它)。
列出仓库¶
您可以使用 WarehouseCollection.iter
方法列出仓库,该方法会返回 Warehouse
对象的 PagedIter
迭代器。
以下示例中的代码会列出名称中包含 my 文本的仓库,并打印每个仓库的名称:
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)
执行仓库操作¶
您可以通过 WarehouseResource
对象执行常见的仓库操作,如暂停和恢复仓库以及中止仓库上的所有查询。
以下示例中的代码会暂停和恢复 my_wh
仓库,中止仓库上所有正在运行或排队的查询,然后删除仓库:
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()