チュートリアル1:データベース、スキーマ、テーブル、ウェアハウスの作成¶
概要¶
このチュートリアルでは、 Snowflake Python APIs を使用して Snowflake リソースオブジェクトを管理するための基礎を学びます。API を開始するにあたって、Snowflake データベース、スキーマ、テーブル、仮想ウェアハウスを作成し、管理します。
前提条件¶
注釈
Snowflake Python APIs チュートリアルの共通セットアップ のステップをすでに完了している場合は、これらの前提条件をスキップして、このチュートリアルの最初のステップに進むことができます。
このチュートリアルを始める前に、以下のステップを含む 共通セットアップ の説明を完了しておく必要があります。
開発環境を設定します。
Snowflake Python APIs パッケージをインストールします。
Snowflake接続を設定します。
Python API チュートリアルに必要なすべてのモジュールをインポートします。
API
Root
オブジェクトを作成します。
これらの前提条件が完了したら、 API を使い始める準備が整います。
データベース、スキーマ、テーブルの作成¶
root
オブジェクトを使用して、Snowflake アカウントにデータベース、スキーマ、テーブルを作成できます。
データベースを作成するには、ノートブックの次のセルで次のコードを実行します。
database = root.databases.create( Database( name="PYTHON_API_DB"), mode=CreateMode.or_replace )
このコードは、 SQL コマンド
CREATE OR REPLACE DATABASE PYTHON_API_DB
と機能的に同等であり、PYTHON_API_DB
という名前のデータベースをアカウントに作成します。このコードは、Snowflakeでオブジェクトを管理するための一般的なパターンに従っています。root.databases.create()
はSnowflakeでデータベースを作成します。受け入れられる引数はDatabase
オブジェクトとモードの2つです。Database(name="PYTHON_API_DB")
を使ってDatabase
オブジェクトを渡し、name
引数を使ってデータベース名を設定します。ノートブックの3行目にDatabase
をインポートしたことを思い出してください。作成モードを指定するには、
mode
引数を渡します。この場合、CreateMode.or_replace
に設定しますが、以下の値も有効です。CreateMode.if_not_exists
: 機能的に SQL の CREATE IF NOT EXISTS と同等です。CreateMode.error_if_exists
: オブジェクトがすでにSnowflakeに存在する場合、例外を発生させます。これは、モードが指定されていない場合のデフォルト値です。
database
という名前で作成したオブジェクトにデータベースへの参照を格納することで、プログラムでデータベースを管理します。
Snowsight で、Snowflake アカウントのデータベースセクションに移動します。コードが成功した場合、
PYTHON_API_DB
データベースが表示されます。Tip
VS Codeをお使いの場合は、 Snowflakeエクステンション をインストールすると、エディター内ですべてのSnowflakeオブジェクトを探索できます。
PYTHON_API_DB
データベースにスキーマを作成するには、次のセルで次のコードを実行します。schema = database.schemas.create( Schema( name="PYTHON_API_SCHEMA"), mode=CreateMode.or_replace, )
.schemas.create()
を先に作成したdatabase
で呼び出すことにご注意ください。先ほど作成したスキーマにテーブルを作成するには、次のセルで次のコードを実行します。
table = schema.tables.create( Table( name="PYTHON_API_TABLE", columns=[ TableColumn( name="TEMPERATURE", datatype="int", nullable=False, ), TableColumn( name="LOCATION", datatype="string", ), ], ), mode=CreateMode.or_replace )
このコードでは、
PYTHON_API_SCHEMA
スキーマに、TEMPERATURE
をint
、LOCATION
をstring
として、2つの列とそのデータ型を指定したテーブルを作成します。この最後の2つのコード例は、
PYTHON_API_DB
データベースを作成した最初のステップのパターンに従っているので、見覚えがあるはずです。オブジェクトが作成されたことを確認するには、 Snowsight の Snowflake アカウントに戻ります。
すべてのデータを取得する¶
Snowflakeのオブジェクトに関するメタデータを取得することができます。
先に作成した
PYTHON_API_TABLE
テーブルの詳細を取得するには、次のノートブックのセルで次のコードを実行します。table_details = table.fetch()
fetch()
はTableModel
オブジェクトを返します。そして、出来上がったオブジェクトに対して
.to_dict()
を呼び出すと、その詳細情報を表示することができます。テーブルの詳細を表示するには、次のセルで次のコードを実行します。
table_details.to_dict()
ノートブックは、このような
PYTHON_API_TABLE
テーブルに関するメタデータを含むディクショナリを表示します。{ "name": "PYTHON_API_TABLE", "kind": "TABLE", "enable_schema_evolution": False, "change_tracking": False, "data_retention_time_in_days": 1, "max_data_extension_time_in_days": 14, "default_ddl_collation": "", "columns": [ {"name": "TEMPERATURE", "datatype": "NUMBER(38,0)", "nullable": False}, {"name": "LOCATION", "datatype": "VARCHAR(16777216)", "nullable": True}, ], "created_on": datetime.datetime( 2024, 5, 9, 8, 59, 15, 832000, tzinfo=datetime.timezone.utc ), "database_name": "PYTHON_API_DB", "schema_name": "PYTHON_API_SCHEMA", "rows": 0, "bytes": 0, "owner": "ACCOUNTADMIN", "automatic_clustering": False, "search_optimization": False, "owner_role_type": "ROLE", }
図のように、このディクショナリには、以前に作成した
PYTHON_API_TABLE
テーブルの情報が含まれており、columns
、owner
、database
、schema
などの詳細情報が含まれています。
オブジェクト・メタデータは、アプリケーションでビジネス・ロジックを構築するときに便利です。例えば、オブジェクトに関する特定の情報に応じて実行されるロジックを構築することができます。このような場合、 fetch()
を使ってオブジェクトのメタデータを取得することができます。
プログラムでテーブルを変更する¶
プログラムで列をテーブルに追加することができます。 PYTHON_API_TABLE
テーブルには現在、 TEMPERATURE
と LOCATION
の2つの列があります。このシナリオでは、 int
型の ELEVATION
という新しい列を追加し、それをテーブルの主キーに設定します。
次のセルで次のコードを実行します。
table_details.columns.append( TableColumn( name="elevation", datatype="int", nullable=False, constraints=[PrimaryKey()], ) )
注釈
このコードは列を作成しません。代わりに、この列定義は、
TableModel
のテーブルの列を表す配列に追加されます。この配列を表示するには、テーブルのメタデータを表示する手順で説明したように、columns
の値を確認します。テーブルを修正して列を追加するには、次のセルで次のコードを実行します。
table.create_or_alter(table_details)
この行では、
PYTHON_API_TABLE
を表すオブジェクトでcreate_or_alter()
を呼び出し、table_details
の更新値を渡しています。この行はPYTHON_API_TABLE
にELEVATION
列を追加します。列が追加されたことを確認するために、次のセルで次のコードを実行します。
table.fetch().to_dict()
出力は次のようになります。
{ "name": "PYTHON_API_TABLE", "kind": "TABLE", "enable_schema_evolution": False, "change_tracking": False, "data_retention_time_in_days": 1, "max_data_extension_time_in_days": 14, "default_ddl_collation": "", "columns": [ {"name": "TEMPERATURE", "datatype": "NUMBER(38,0)", "nullable": False}, {"name": "LOCATION", "datatype": "VARCHAR(16777216)", "nullable": True}, {"name": "ELEVATION", "datatype": "NUMBER(38,0)", "nullable": False}, ], "created_on": datetime.datetime( 2024, 5, 9, 8, 59, 15, 832000, tzinfo=datetime.timezone.utc ), "database_name": "PYTHON_API_DB", "schema_name": "PYTHON_API_SCHEMA", "rows": 0, "bytes": 0, "owner": "ACCOUNTADMIN", "automatic_clustering": False, "search_optimization": False, "owner_role_type": "ROLE", "constraints": [ {"name": "ELEVATION", "column_names": ["ELEVATION"], "constraint_type": "PRIMARY KEY"} ] }
columns
の値とconstraints
の値を見直すと、両者ともELEVATION
列を含むようになっています。新しい列の存在を確認するには、 Snowsight の Snowflake アカウントに戻り、テーブルを検査します。
ウェアハウスの作成と管理¶
Snowflake Python APIs を使って仮想ウェアハウスを管理することもできます。例えば、特定のクエリを実行するために、一時的に別のウェアハウスを作成する必要があるかもしれません。このシナリオでは、 API を作成して、ウェアハウスを作成、一時停止、削除します。
セッションに関連するウェアハウスのコレクションを取得するには、次のセルで以下のコードを実行します。
warehouses = root.warehouses
出来上がった
warehouses
オブジェクトを使用して、セッションでウェアハウスを管理します。新しいウェアハウスを定義して作成するには、次のセルで次のコードを実行します。
python_api_wh = Warehouse( name="PYTHON_API_WH", warehouse_size="SMALL", auto_suspend=500, ) warehouse = warehouses.create(python_api_wh,mode=CreateMode.or_replace)
このコードでは、
Warehouse
をインスタンス化し、ウェアハウスの名前、サイズ、および自動一時停止ポリシーを指定することで、新しいウェアハウスを定義します。自動一時停止タイムアウトの単位は秒です。この場合、ウェアハウスは8.33分間使用されないと一時停止されます。次に、ウェアハウス コレクションで
create()
を呼び出してウェアハウスを作成します。出来上がったwarehouse
オブジェクトに参照を保存します。Snowsight のSnowflakeアカウントに移動し、ウェアハウスが作成されたことを確認します。
ウェアハウスに関する情報を取得するには、次のセルで次のコードを実行します。
warehouse_details = warehouse.fetch() warehouse_details.to_dict()
このコードは、前のステップでテーブルのメタデータを取得するのに使ったのと同じパターンなので、見覚えがあるはずです。出力はこのようになるはずです。
{ 'name': 'PYTHON_API_WH', 'auto_suspend': 500, 'auto_resume': 'true', 'resource_monitor': 'null', 'comment': '', 'max_concurrency_level': 8, 'statement_queued_timeout_in_seconds': 0, 'statement_timeout_in_seconds': 172800, 'tags': {}, 'warehouse_type': 'STANDARD', 'warehouse_size': 'Small' }
オプション: セッションに複数のウェアハウスがある場合、 API を使用して、それらのウェアハウスを繰り返し検索したり、特定のウェアハウスを検索することができます。
次のセルで次のコードを実行します。
warehouse_list = warehouses.iter(like="PYTHON_API_WH") result = next(warehouse_list) result.to_dict()
このコードでは、ウェアハウスコレクションで
iter()
を呼び出し、指定した文字列と名前が一致するウェアハウスをすべて返すlike
引数を呼び出します。この場合、先に定義したウェアハウスの名前を渡しますが、この引数は一般的に大文字と小文字を区別しない文字列で、%
や_
のような SQL ワイルドカード文字をサポートし、フィルターとして機能します。セルを実行すると、次のようなコードが出力され、一致するウェアハウスが正常に返されたことがわかります。
{ 'name': 'PYTHON_API_WH', 'auto_suspend': 500, 'auto_resume': 'true', 'resource_monitor': 'null', 'comment': '', 'max_concurrency_level': 8, 'statement_queued_timeout_in_seconds': 0, 'statement_timeout_in_seconds': 172800, 'tags': {}, 'warehouse_type': 'STANDARD', 'warehouse_size': 'Small' }
ウェアハウスのサイズを
LARGE
に変更し、プログラムで変更するには、次のセルで次のコードを実行します。warehouse = root.warehouses.create(Warehouse( name="PYTHON_API_WH", warehouse_size="LARGE", auto_suspend=500, ), mode=CreateMode.or_replace)
ウェアハウスのサイズが
LARGE
に更新されたことを確認するには、以下のいずれかを行います。次のセルで次のコードを実行します。
warehouse.fetch().size
Snowsight のSnowflakeアカウントに移動し、ウェアハウスサイズの変更を確認します。
オプション: ウェアハウスを使い続けたくない場合は、ウェアハウスを削除してください。次のセルで次のコードを実行します。
warehouse.drop()
ウェアハウスの削除を確認するには、 Snowsight のSnowflakeアカウントに戻ります。
次の内容¶
おめでとうございます。このチュートリアルでは、 Snowflake Python APIs を使用して Snowflake リソースオブジェクトを管理するための基礎を学びました。
概要¶
その過程で、あなたは以下のタスクを完了しました。
Snowflake Python APIs をインストールします。
Snowflakeへの接続を設定する。
データベース、スキーマ、テーブルを作成する。
エラー情報を取得しする。
プログラムでオブジェクトを変更する。
ウェアハウスを作成、中断、削除する。
次のチュートリアル¶
タスクとタスクグラフの作成と管理方法を説明する チュートリアル 2: タスクとタスクグラフの作成と管理 (DAGs) に進むことができます。
追加のリソース¶
API を使用して Snowflake で他のタイプのオブジェクトを管理する例については、以下の開発者ガイドを参照してください。
ガイド |
説明 |
---|---|
API を使用して、ユーザー、ロール、およびグラントを作成および管理します。 |
|
API を使用して、外部ボリューム、パイプ、ステージなど、データのロードとアンロードのリソースを作成および管理します。 |
|
タスクとタスクグラフの作成、実行、管理には API を使用します。 |
|
API を使用して、コンピューティングプール、イメージリポジトリ、サービスなど、Snowpark Container Servicesのコンポーネントを管理します。 |