PythonによるSnowflakeアカウントと管理アカウントの管理¶
Pythonを使って、Snowflakeのアカウントや管理アカウントを管理することができます。
前提条件¶
このトピックの例では、Snowflakeと接続するコードを追加して Root
オブジェクトを作成し、そこからSnowflake Python 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
オブジェクトを使って、コードは API のタイプとメソッドを使う Root
オブジェクトを作成します。詳細については、 Snowflake Python APIs によるSnowflakeへの接続 をご参照ください。
アカウントの管理¶
Snowflake組織のアカウントを管理できます。Snowflake のアカウントの概要については、 組織内のアカウントの管理 をご参照ください。
Snowflake Python APIs は、2つのタイプに分かれたアカウントを表します。
Account
: 名前識別子、初期管理ユーザーのログイン名とパスワード、Snowflakeエディションなどのアカウントのプロパティを公開します。AccountResource
: 対応するAccount
オブジェクトを取得し、アカウントをドロップやアンド六腑をするために使用できるメソッドを公開します。
アカウントの作成¶
アカウントを作成するには、まず Account
オブジェクトを作成し、次に API Root
オブジェクトから AccountCollection
オブジェクトを作成します。 AccountCollection.create
を使って、新しいアカウントをSnowflakeに追加します。
以下の例のコードは、指定されたアカウント・プロパティを持つ my_account1
という名前のアカウントを表す Account
オブジェクトを作成します。
from snowflake.core.account import Account
my_account = Account(
name="my_account1",
admin_name="admin",
admin_password="TestPassword1",
first_name="Jane",
last_name="Smith",
email="myemail@myorg.org",
edition="ENTERPRISE",
region="aws_us_west_2",
comment="creating my account",
)
root.accounts.create(my_account)
アカウント詳細の取得¶
Account
オブジェクトを返す AccountResource.fetch
メソッドを呼び出すことで、イメージリポジトリに関する情報を取得できます。
次の例のコードは、 my_account1
という名前の管理アカウントに関する情報を取得します。
my_account = root.accounts["my_account1"].fetch()
print(my_account.to_dict())
アカウントのリスト¶
Account
オブジェクトの PagedIter
反復子を返す AccountCollection.iter
メソッドを使用して、ウェアハウスをリストすることができます。
次の例のコードは、名前が my
で始まるアカウントを一覧表示し、それぞれの名前を表示します。
account_iter = root.accounts.iter(like="my%") # returns a PagedIter[Account]
for account_obj in account_iter:
print(account_obj.name)
以下の例のコードは、まだ削除されていないドロップされたアカウントを含むアカウントの履歴をリストするために、オプションのパラメーター history=True
を設定します。
account_iter = root.accounts.iter(history=True) # returns a PagedIter[Account]
for account_obj in account_iter:
print(account_obj.name)
アカウント操作の実行¶
AccountResource
オブジェクトを使用して、アカウントの削除や削除解除など、一般的なアカウント操作を行うことができます。
アカウント・リソースでできる操作を示すために、次の例のコードでは次のようにしています。
my_account1
アカウント・リソース・オブジェクトを取得します。指定された猶予期間(アカウントが復元される(「undropped」)日数)でアカウントをドロップします。
アカウントをアンドロップします。
my_account_res = root.accounts["my_account1"]
my_account_res.drop(grace_period_in_days=4)
my_account_res.undrop()
管理アカウントの管理¶
現在、データプロバイダーがコンシューマーのリーダーアカウントを作成するために使用しているSnowflake管理アカウントを管理します。詳細については、 リーダーアカウントを管理する をご参照ください。
Snowflake Python APIs は、2つのタイプに分かれた管理アカウントを表します。
ManagedAccount
: 管理アカウントの名前識別子、初期管理ユーザーのログイン名とパスワード、アカウントタイプなどのプロパティを公開します。ManagedAccountResource
: 対応するManagedAccount
オブジェクトを取得し、管理アカウントをドロップするために使用できるメソッドを公開します。
管理アカウントの作成¶
ウェアハウスを作成するには、まず ManagedAccount
オブジェクトを作成して、 API Root
オブジェクトから ManagedAccountCollection
オブジェクトを作成します。 ManagedAccountCollection.create
を使用して、新しい管理アカウントをSnowflakeに追加します。
以下の例のコードは、指定されたアカウント・プロパティを持つ reader_acct1
という名前の管理アカウントを表す ManagedAccount
オブジェクトを作成します。
from snowflake.core.managed_account import ManagedAccount
my_managed_account = ManagedAccount(
name="reader_acct1",
admin_name="admin",
admin_password="TestPassword1",
type="READER",
comment="creating my managed account",
)
root.managed_accounts.create(my_managed_account)
管理アカウントの詳細を取得する¶
ManagedAccount
オブジェクトを返す ManagedAccountResource.fetch
メソッドを呼び出すことで、データベースに関する情報を取得できます。
次の例のコードは、 reader_acct1
という名前の管理アカウントに関する情報を取得します。
my_managed_account = root.managed_accounts["reader_acct1"].fetch()
print(my_managed_account.to_dict())
管理アカウントのリスト¶
ManagedAccount
オブジェクトの PagedIter
反復子を返す ManagedAccountCollection.iter
メソッドを使用して、ウェアハウスを一覧表示することができます。
以下の例のコードは、名前が reader
で始まる管理アカウントを一覧表示し、それぞれの名前を表示します。
account_iter = root.managed_accounts.iter(like="reader%") # returns a PagedIter[ManagedAccount]
for account_obj in account_iter:
print(account_obj.name)
管理アカウントのドロップ¶
ManagedAccountResource
オブジェクトで管理アカウントを削除することができます。
次の例のコードは、 reader_acct1
管理アカウント・リソース・オブジェクトを取得し、アカウントをドロップします。
my_managed_account_res = root.managed_accounts["reader_acct1"]
my_managed_account_res.drop()