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

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

このトピックの例では、Snowflakeと接続するコードを追加して Root オブジェクトを作成し、そこからSnowflake Python API を使用することを想定しています。詳細については、 Snowflake Python API によるSnowflakeへの接続 をご参照ください。

次の例のコードは、構成ファイルで定義された接続パラメーターを使用して、Snowflakeへの接続を作成します。出来上がった Session オブジェクトを使って、コードは API のタイプとメソッドを使う Root オブジェクトを作成します。

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

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

データベースの管理

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

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

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

データベースを作成する

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

次の例のコードでは、 Database オブジェクトが my_db というデータベースを表します。次に、コードは 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

データベースを一覧表示する

iter メソッドを使用してデータベースを一覧表示できます。メソッドは PagedIter 反復子を返します。

次の例のコードは、名前が「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 オブジェクトを作成します。次に、コードは Schema オブジェクトを SchemaCollection.create メソッドに渡してスキーマを作成することで、 my_db データベースにスキーマを作成します。

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 オブジェクトを返す SchemaResource.fetch メソッドを呼び出すことで、スキーマの情報を取得できます。

次の例のコードは、 Schema スキーマを表す my_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 オブジェクトを作成します。

次の例のコードは、 Table オブジェクトを作成し、指定された列を持つ my_table というテーブルを表します。次に、コードは Table オブジェクトを TableCollection.create メソッドに渡してテーブルを作成することで、 my_db データベースと my_schema スキーマにテーブルを作成します。

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 オブジェクトを返す 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()
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