PythonによるSnowflakeデータベース、スキーマ、テーブル、ビューの管理¶
Pythonを使ってSnowflakeデータベース、スキーマ、テーブル、ビューを管理することができます。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 Python APIs は、データベースを2つの別々のタイプで表します。
Database: データベースの名前などのプロパティを公開します。DatabaseResource: 対応するDatabaseオブジェクトを取得し、データベースをドロップするために使用できるメソッドを公開します。
トピックス
データベースの作成¶
DatabaseCollection.create メソッドを呼び出し、作成するデータベースを表す Database オブジェクトを渡すと、データベースを作成できます。データベースを作成するには、まずデータベース名を指定する Database オブジェクトを作成します。
次の例のコードは、 my_db という名前のデータベースを表す Database オブジェクトを作成してから、 Database オブジェクトを DatabaseCollection.create メソッドに渡してデータベースを作成します。
from snowflake.core.database import Database
my_db = Database(name="my_db")
root.databases.create(my_db)
データベースの詳細の取得¶
Database オブジェクトを返す DatabaseResource.fetch メソッドを呼び出すことで、データベースに関する情報を取得できます。
次の例のコードは、 my_db というデータベースに関する情報を取得します。
my_db = root.databases["my_db"].fetch()
print(my_db.to_dict())
データベースのリスト¶
PagedIter 反復子を返す iter メソッドを使用して、データベースをリストすることができます。
次の例のコードは、名前が my で始まるデータベースを一覧表示します。
databases = root.databases.iter(like="my%")
for database in databases:
print(database.name)
データベースのドロップまたは復元¶
DatabaseResource.drop メソッドを使ってデータベースをドロップしたり、 DatabaseResource.undrop メソッドを使ってデータベースを復元したりすることができます。
これらの操作を実証するために、次の例のコードでは、 my_db データベースの最新バージョンをドロップしてから復元します。
my_db_res = root.databases["my_db"]
my_db_res.drop()
my_db_res.undrop()
スキーマの管理¶
Snowflakeでスキーマを管理できます。スキーマはデータベースレベルのオブジェクトです。スキーマを作成または参照するときは、そのデータベースのコンテキスト内で行います。
Snowflake Python APIs は、スキーマを2つの別々のタイプで表します。
Schema: スキーマの名前などのプロパティを公開します。SchemaResource: 対応するSchemaオブジェクトを取得し、スキーマをドロップするために使用できるメソッドを公開します。
トピックス
スキーマの作成¶
スキーマを作成するには、まずスキーマ名を指定する Schema オブジェクトを作成します。
次の例のコードは、 my_schema という名前のスキーマを表す Schema オブジェクトを作成します。
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 オブジェクトを取得します。
my_schema = root.databases["my_db"].schemas["my_schema"].fetch()
print(my_schema.to_dict())
スキーマのリスト¶
iter メソッドを使用して指定したデータベース内のスキーマを一覧表示できます。このメソッドは Schema オブジェクトの PagedIter 反復子を返します。
次の例のコードは、 my_db データベースのスキーマ名をリストします。
schema_list = root.databases["my_db"].schemas.iter()
for schema_obj in schema_list:
print(schema_obj.name)
スキーマのドロップまたは復元¶
SchemaResource.drop メソッドを使ってスキーマをドロップしたり、 SchemaResource.undrop メソッドを使ってスキーマを復元したりすることができます。
これらの操作を実証するために、次の例のコードでは、 my_schema スキーマの最新バージョンをドロップしてから復元します。
my_schema_res = root.databases["my_db"].schemas["my_schema"]
my_schema_res.drop()
my_schema_res.undrop()
標準テーブルの管理¶
Snowflakeで標準テーブルを管理できます。テーブルはスキーマレベルのオブジェクトです。テーブルを作成または参照するときは、そのデータベースのコンテキスト内で行います。
Snowflake Python APIs は、テーブルを2つの別々のタイプで表します。
Table: テーブルの名前や列などのプロパティを公開します。TableResource: 対応するTableオブジェクトを取得し、テーブルのプロパティの更新、テーブルのドロップに使用できるメソッドを公開します。
トピックス
テーブルの作成¶
テーブルを作成するには、まずテーブル名、列名、列のデータ型を指定する Table オブジェクトを作成します。
次の例のコードは、指定された列を持つ my_table という名前のテーブルを表す Table オブジェクトを作成します。
from snowflake.core.table import Table, TableColumn
my_table = Table(
name="my_table",
columns=[TableColumn(name="c1", datatype="int", nullable=False),
TableColumn(name="c2", datatype="string")]
)
root.databases["my_db"].schemas["my_schema"].tables.create(my_table)
次に、コードは Table オブジェクトを TableCollection.create メソッドに渡して、 my_db データベースと my_schema スキーマにテーブルを作成します。
テーブルの詳細の取得¶
Table オブジェクトを返す TableResource.fetch メソッドを呼び出すことで、テーブルに関する情報を取得できます。
次の例のコードは、 my_table という名前のテーブルの情報を取得します。
my_table = root.databases["my_db"].schemas["my_schema"].tables["my_table"].fetch()
print(my_table.to_dict())
テーブルの作成と変更¶
Table オブジェクトのプロパティを設定し、 TableResource.create_or_alter メソッドに渡すことで、テーブルが存在しない場合は作成し、存在する場合はテーブル定義に従って変更することができます。 create_or_alter の動作はべき等であることを意図しています。つまり、メソッドを呼び出す前にテーブルが存在していたかどうかにかかわらず、結果のテーブルオブジェクトは同じになります。
注釈
create_or_alter メソッドは、明示的に定義していない テーブル プロパティにデフォルト値を使用します。例えば、 data_retention_time_in_days を設定しない場合、以前は異なる値でテーブルが存在していたとしても、その値はデフォルトで None になります。
次の例のコードは、 my_table テーブルにデータ型 int の c3 という新しい列を追加してから、Snowflakeのテーブルを更新します。
from snowflake.core.table import PrimaryKey, 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_alter(my_table)
テーブルのリスト¶
iter メソッドを使用して、指定したスキーマにあるテーブルをリストできます。これは、 Table オブジェクトの PagedIter 反復子を返します。
次の例のコードは、名前が my で始まるテーブルを一覧表示します。
tables = root.databases["my_db"].schemas["my_schema"].tables.iter(like="my%")
for table_obj in tables:
print(table_obj.name)
テーブル名の入れ替え¶
TableResource.swap_with メソッドを使用すると、1回のトランザクションでテーブルの名前を別のテーブルと入れ替える(交換する)ことができます。詳細については、 SWAP WITH パラメーターの説明を ALTER TABLE でご参照ください。
次の例のコードは、同じデータベースとスキーマで、 my_table と other_table を入れ替えます。
my_table_res = root.databases["my_db"].schemas["my_schema"].tables["my_table"]
my_table_res.swap_with("other_table")
次の例のコードは、 my_table (my_db データベースおよび my_schema スキーマ内)と other_table (other_db データベースおよび other_schema スキーマ内)を入れ替えます。
my_table_res = root.databases["my_db"].schemas["my_schema"].tables["my_table"]
my_table_res.swap_with(to_swap_table_name="other_table", target_database="other_db", target_schema="other_schema")
テーブル操作の実行¶
TableResource オブジェクトを使用して、テーブルの 再クラスタリング の管理、テーブルのドロップや復元など、一般的なテーブル操作を実行できます。
これらのテーブル操作の詳細情報については、 SQL コマンドリファレンスの テーブル、ビュー、およびシーケンスコマンド を参照してください。
テーブルリソースでできる操作をいくつか示すために、次の例のコードでは次のような操作を行っています。
my_dbデータベースおよびmy_schemaスキーマのmy_tableテーブルリソースオブジェクトを取得します。テーブルの再クラスタリングを中断します。
テーブルの再クラスタリングを再開します。
テーブルをドロップします。
ドロップされたテーブルの最新バージョンを復元します。
my_table_res = root.databases["my_db"].schemas["my_schema"].tables["my_table"]
my_table_res.suspend_recluster()
my_table_res.resume_recluster()
my_table_res.drop()
my_table_res.undrop()
イベントテーブルの管理¶
Snowflakeイベントテーブルは、Snowflakeがテレメトリーデータを収集できる、事前定義された一連の列を持つ特別な種類のデータベーステーブルです。詳細については、 イベントテーブルの概要 をご参照ください。
Snowflake Python APIs は、イベント・テーブルを2つの別々のタイプで表します。
EventTable: イベントテーブルの名前、データ保持時間、最大データ延長時間、変更追跡オプションなどのプロパティを公開します。EventTableResource: 対応するEventTableオブジェクトの取得、イベントテーブルの名前の変更、イベントテーブルのドロップに使用できるメソッドを公開します。
トピックス
イベントテーブルの作成¶
ウェアハウスを作成するには、まず EventTable オブジェクトを作成して、 API Root オブジェクトから EventTableCollection オブジェクトを作成します。 EventTableCollection.create を使用して、新しいイベントテーブルをSnowflakeに追加します。
以下の例のコードは、 my_event_table という名前のイベント・テーブルを表す EventTable オブジェクトを、指定されたパラメーターで作成します。
from snowflake.core.event_table import EventTable
event_table = EventTable(
name="my_event_table",
data_retention_time_in_days = 3,
max_data_extension_time_in_days = 5,
change_tracking = True,
default_ddl_collation = 'EN-CI',
comment = 'CREATE EVENT TABLE'
)
event_tables = root.databases["my_db"].schemas["my_schema"].event_tables
event_tables.create(my_event_table)
コードは、 EventTableCollection 変数 event_tables を作成し、 EventTableCollection.create を使用してSnowflakeに新しいウェアハウスを作成します。
イベントテーブルの詳細を取得する¶
EventTable オブジェクトを返す EventTableResource.fetch メソッドを呼び出すことで、テーブルに関する情報を取得できます。
次の例のコードは、 my_event_table という名前のイベント・テーブルの情報を取得します。
my_event_table = root.databases["my_db"].schemas["my_schema"].event_tables["my_event_table"].fetch()
print(my_event_table.to_dict())
イベントテーブルの一覧表示¶
EventTable オブジェクトの PagedIter 反復子を返す EventTableCollection.iter メソッドを使用して、ウェアハウスを一覧表示することができます。
次の例のコードは、 my_db データベースと my_schema スキーマの my で始まる名前のイベント・テーブルを一覧表示します。
from snowflake.core.event_table import EventTableCollection
event_tables: EventTableCollection = root.databases["my_db"].schemas["my_schema"].event_tables
event_table_iter = event_tables.iter(like="my%") # returns a PagedIter[EventTable]
for event_table_obj in event_table_iter:
print(event_table_obj.name)
次の例のコードも、 my で始まる名前のイベント・テーブルをリストしていますが、 like の代わりに starts_with パラメーターを使用しています。この例では、結果の数を 10 に制限するために、オプションのパラメーター show_limit=10 も設定しています。
event_tables: EventTableCollection = root.databases["my_db"].schemas["my_schema"].event_tables
event_table_iter = event_tables.iter(starts_with="my", show_limit=10)
for event_table_obj in event_table_iter:
print(event_table_obj.name)
イベントテーブルの操作の実行¶
EventTableResource オブジェクトを使用して、イベント・テーブルの名前の変更やイベント・テーブルのドロップなど、一般的なイベント・テーブルの操作を行うことができます。
注釈
現在のところ、 ALTER TABLE (イベントテーブル) の RENAME 機能のみがサポートされています。
RENAME はデフォルトのイベントテーブル、 SNOWFLAKE.TELEMETRY.EVENTS ではサポートされていません。
イベント・テーブル・リソースでできる操作を示すために、次の例のコードでは次のようにしています。
my_dbデータベースおよびmy_schemaスキーマのmy_event_tableイベントテーブルリソースオブジェクトを取得します。イベントテーブルの名前を変更する
イベントテーブルをドロップします。
my_event_table_res = root.databases["my_db"].schemas["my_schema"].event_tables["my_event_table"]
my_event_table_res.rename("my_other_event_table")
my_event_table_res.drop()
ビューの管理¶
Snowflakeではビューを管理することができます。ビューはスキーマレベルオブジェクトで、ビューを使用すると、クエリの結果がテーブルであるかのようにアクセスできます。ビューを作成または参照するときは、そのスキーマのコンテキスト内で行います。
注釈
ALTER VIEW は現在サポートされていません。
Snowflake Python APIs は、ビューを2つの別々のタイプで表します。
View: ビューの名前、列、 SQL クエリステートメントなど、ビューのプロパティを公開します。ViewResource: 対応するViewオブジェクトを取得し、ビューをドロップするために使用できるメソッドを公開します。
トピックス
ビューの作成¶
ビューを作成するには、まずビュー名、列、 SQL クエリステートメントを指定する View オブジェクトを作成します。
次の例のコードは、指定された列と SQL クエリを持つ my_view という名前のビューを表す View オブジェクトを作成します。
from snowflake.core.view import View, ViewColumn
my_view = View(
name="my_view",
columns=[
ViewColumn(name="c1"), ViewColumn(name="c2"), ViewColumn(name="c3"),
],
query="SELECT * FROM my_table",
)
root.databases["my_db"].schemas["my_schema"].views.create(my_view)
次に、コードは View オブジェクトを ViewCollection.create メソッドに渡して、 my_db データベースと my_schema スキーマにビューを作成します。
ビューの詳細を取得する¶
View オブジェクトを返す ViewResource.fetch メソッドを呼び出すことで、ビューに関する情報を取得できます。
次の例のコードは、 my_view ビューを表す View オブジェクトを取得します。
my_view = root.databases["my_db"].schemas["my_schema"].views["my_view"].fetch()
print(my_view.to_dict())
リストの表示¶
iter メソッドを使用して指定したデータベース内のビューを一覧表示できます。このメソッドは View オブジェクトの PagedIter 反復子を返します。
次の例のコードは、 my_db データベースと my_schema スキーマの my で始まる名前のビューを一覧表示します。
view_list = root.databases["my_db"].schemas["my_schema"].views.iter(like="my%")
for view_obj in view_list:
print(view_obj.name)
以下の例のコードも、名前が my で始まるビューをリストアップしていますが、 like の代わりに starts_with パラメーターを使用しています。この例では、結果の数を 10 に制限するために、オプションのパラメーター show_limit=10 も設定しています。
view_list = root.databases["my_db"].schemas["my_schema"].views.iter(starts_with="my", show_limit=10)
for view_obj in view_list:
print(view_obj.name)
ビューのドロップ¶
ViewResource.drop メソッドを使用してビューをドロップすることができます。
以下の例のコードは、 my_view のビューをドロップします。
my_view_res = root.databases["my_db"].schemas["my_schema"].views["my_view"]
my_view_res.drop()