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)
データベースの管理¶
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)
データベースの詳細を取得する¶
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())
データベースを一覧表示する¶
iter
メソッドを使用してデータベースを一覧表示できます。メソッドは PagedIter
反復子を返します。
次の例のコードは、名前が「my」で始まるデータベースを一覧表示し、それぞれの名前を印刷します。
from snowflake.core import Root
databases = root.databases.iter(like="my%")
for database in databases:
print(database.name)
データベースを削除する¶
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()
スキーマの管理¶
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)
スキーマの詳細を取得する¶
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())
スキーマを一覧表示する¶
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)
スキーマを削除する¶
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()
テーブルの管理¶
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)
テーブルの詳細を取得する¶
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())
テーブルを作成または更新する¶
既存のテーブルを表す Table
オブジェクトのプロパティを設定し、更新されたオブジェクトを TableResource.create_or_update
メソッドで Snowflake に渡すことで、既存のテーブルの特性を更新できます。
テーブルを作成するときに、新しいテーブルを記述する Table
オブジェクトを渡すこともできます。
次の例のコードは、 my_table
テーブルにデータ型 int
の c3
という新しい列を追加した上で、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)
テーブルを一覧表示する¶
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)
テーブルを削除する¶
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()