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)
出来上がった 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)
データベースの詳細の取得¶
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())
データベースのリスト¶
PagedIter
反復子を返す iter
メソッドを使用して、データベースをリストすることができます。
次の例のコードは、名前が 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
オブジェクトを作成します。
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
オブジェクトを 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())
スキーマのリスト¶
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
オブジェクトを作成します。
次の例のコードは、指定された列を持つ 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)
次に、コードは 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())
テーブルの作成と更新¶
既存のテーブルを表す 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(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)
テーブルのリスト¶
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()