PythonによるSnowflakeデータベース、スキーマ、テーブルの管理

Pythonを使ってSnowflakeデータベース、スキーマ、テーブルを管理することができます。Snowflakeでのデータの管理と操作の詳細については、 データベース、テーブル、およびビュー - 概要 をご参照ください。

前提条件

このトピックの例では、Snowflakeと接続するコードを追加して Root オブジェクトを作成し、そこからSnowflake Python API を使用することを想定しています。

たとえば、以下のコードでは、構成ファイルで定義された接続パラメーターを使用してSnowflakeへの接続を作成します。

from snowflake.core import Root
from snowflake.snowpark import Session

session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Copy

出来上がった Session オブジェクトを使って、コードは API のタイプとメソッドを使う Root オブジェクトを作成します。詳細については、 Snowflake Python API を使用してSnowflakeに接続する をご参照ください。

データベースの管理

Snowflakeでデータベースを管理できます。Snowflake Python API は、2つの別々のタイプでデータベースを表します。

  • Database: データベースの名前などのプロパティを公開します。

  • DatabaseResource: 対応する Database オブジェクトをフェッチし、データベースを削除するために使用できるメソッドを公開します。

データベースの作成

DatabaseCollection.create メソッドを呼び出し、作成するデータベースを表す Database オブジェクトを渡すと、データベースを作成できます。データベースを作成するには、まずデータベース名を指定する Database オブジェクトを作成します。

次の例のコードは、 my_db というデータベースを表す Database オブジェクトを作成してから、 Database オブジェクトを DatabaseCollection.create メソッドに渡してデータベースを作成します。

from snowflake.core import Root
from snowflake.core.database import Database

my_db = Database(name="my_db")
root.databases.create(my_db)
Copy

データベースの詳細の取得

Database オブジェクトを返す DatabaseResource.fetch メソッドを呼び出すことで、データベースに関する情報を取得できます。

次の例のコードは、 my_db というデータベースに関する情報を取得します。

from snowflake.core import Root
from snowflake.core.database import Database

my_db = root.databases["my_db"].fetch()
print(my_db.to_dict())
Copy

データベースのリスト

PagedIter 反復子を返す iter メソッドを使用して、データベースをリストすることができます。

次の例のコードは、名前が my で始まるデータベースをリストします。

from snowflake.core import Root

databases = root.databases.iter(like="my%")
for database in databases:
  print(database.name)
Copy

データベースを削除する

DatabaseResource.delete メソッドを使用してデータベースを削除できます。

次の例のコードは、 my_db データベースを削除します。

from snowflake.core import Root
from snowflake.core.database import Database

my_db_res = root.databases["my_db"]
my_db_res.delete()
Copy

スキーマの管理

Snowflakeでスキーマを管理できます。スキーマはデータベースレベルのオブジェクトです。スキーマを作成または参照するときは、そのデータベースのコンテキスト内で行います。

Snowflake Python API は、2つの別々のタイプでスキーマを表します。

  • Schema: スキーマの名前などのプロパティを公開します。

  • SchemaResource: 対応する Schema オブジェクトをフェッチし、スキーマを削除するためのメソッドを公開します。

スキーマの作成

スキーマを作成するには、まずスキーマ名を指定する Schema オブジェクトを作成します。

次の例のコードは、 my_schema というスキーマを表す Schema オブジェクトを作成します。

from snowflake.core import Root
from snowflake.core.schema import Schema

my_schema = Schema(name="my_schema")
root.databases["my_db"].schemas.create(my_schema)
Copy

次に、コードは Schema オブジェクトを SchemaCollection.create メソッドに渡して、 my_db データベースにスキーマを作成します。

スキーマの詳細を取得する

Schema オブジェクトを返す SchemaResource.fetch メソッドを呼び出すことで、スキーマの情報を取得できます。

次の例のコードは、 my_schema スキーマを表す Schema オブジェクトを取得します。

from snowflake.core import Root
from snowflake.core.schema import Schema

my_schema = root.databases["my_db"].schemas["my_schema"].fetch()
print(my_schema.to_dict())
Copy

スキーマのリスト

iter メソッドを使用して指定したデータベース内のスキーマを一覧表示できます。このメソッドは Schema オブジェクトの PagedIter 反復子を返します。

次の例のコードは、 my_db データベースのスキーマ名をリストします。

from snowflake.core import Root

schema_list = root.databases["my_db"].schemas.iter()
for schema_obj in schema_list:
  print(schema_obj.name)
Copy

スキーマの削除

SchemaResource.delete メソッドを使用してスキーマを削除できます。

次の例のコードは、 my_schema スキーマを削除します。

from snowflake.core import Root
from snowflake.core.schema import Schema

my_schema_res = root.databases["my_db"].schemas["my_schema"]
my_schema_res.delete()
Copy

テーブルの管理

Snowflakeでテーブルを管理できます。テーブルはスキーマレベルのオブジェクトです。テーブルを作成または参照するときは、そのデータベースのコンテキスト内で行います。

Snowflake Python API は、2つの別々のタイプでテーブルを表します。

  • Table: テーブルの名前や列などのプロパティを公開します。

  • TableResource: 対応する Table オブジェクトのフェッチ、テーブルのプロパティの更新、テーブルの削除に使用できるメソッドを公開します。

テーブルの作成

テーブルを作成するには、まずテーブル名、列名、列のデータ型を指定する Table オブジェクトを作成します。

次の例のコードは、指定された列を持つ my_table というテーブルを表す Table オブジェクトを作成します。

from snowflake.core import Root
from snowflake.core.table import Table, TableColumn

my_table = Table(
  name="my_table",
  columns=[TableColumn("c1", "int", nullable=False), TableColumn("c2", "string")]
)
root.databases["my_db"].schemas["my_schema"].tables.create(my_table)
Copy

次に、コードは Table オブジェクトを TableCollection.create メソッドに渡して、 my_db データベースと my_schema スキーマにテーブルを作成します。

テーブルの詳細の取得

Table オブジェクトを返す TableResource.fetch メソッドを呼び出すことで、テーブルに関する情報を取得できます。

次の例のコードは、 my_table というテーブルの情報を取得します。

from snowflake.core import Root
from snowflake.core.table import Table

my_table = root.databases["my_db"].schemas["my_schema"].tables["my_table"].fetch()
print(my_table.to_dict())
Copy

テーブルの作成と更新

既存のテーブルを表す Table オブジェクトのプロパティを設定してから、 TableResource.create_or_update メソッドを使用して更新されたオブジェクトをSnowflakeに渡すと、既存のテーブルの特性を更新できます。

テーブルを作成するときに、新しいテーブルを説明する Table オブジェクトを渡すこともできます。

次の例のコードは、 my_table テーブルにデータ型 intc3 という新しい列を追加してから、Snowflakeのテーブルを更新します。

from snowflake.core import Root
from snowflake.core.table import PrimaryKey, Table, TableColumn

my_table = root.databases["my_db"].schemas["my_schema"].tables["my_table"].fetch(deep=True)
my_table.columns.append(TableColumn(name="c3", datatype="int", nullable=False, constraints=[PrimaryKey()]))

my_table_res = root.databases["my_db"].schemas["my_schema"].tables["my_table"]
my_table_res.create_or_update(my_table)
Copy

テーブルのリスト

iter メソッドを使用して、指定したスキーマにあるテーブルをリストできます。これは、 Table オブジェクトの PagedIter 反復子を返します。

次の例のコードは、名前が my で始まるテーブルをリストします。

from snowflake.core import Root

tables = root.databases["my_db"].schemas["my_schema"].tables.iter(like="my%")
for table_obj in tables:
  print(table_obj.name)
Copy

テーブルの削除

TableResource.delete メソッドを使用してテーブルを削除できます。

次の例のコードは、 my_table テーブルを削除します。

from snowflake.core import Root
from snowflake.core.table import Table

my_table_res = root.databases["my_db"].schemas["my_schema"].tables["my_table"]
my_table_res.delete()
Copy