Snowpark Pythonを使用してサンプルデータをロードし、クエリする¶
紹介¶
このチュートリアルでは、Tasty Bytesという架空のフードトラックブランドを使用し、 Snowpark Python を使用してSnowflakeでデータをロードしてクエリする方法を紹介します。これらのタスクを完了するには、 Snowsight にあらかじめロードされているPythonワークシートを使用します。
次の図は、Tasty Bytesの概要を示しています。
注釈
Snowflakeはこのチュートリアルのサンプルデータに使用されるディスク上のストレージに対して最小限の料金を請求します。このチュートリアルでは、データベースをドロップしてストレージコストを最小限に抑えるステップを示します。
Snowflakeには、サンプルデータをロードしてクエリを実行するために、 仮想ウェアハウス が必要です。稼働中の仮想ウェアハウスはSnowflakeのクレジットを消費します。このチュートリアルでは、無料クレジットを提供する 30日間のトライアルアカウント を使用するため、コストは発生しません。
学習内容¶
このチュートリアルでは、 Snowpark Python API:を使用して以下のタスクを完了する方法を学びます。
データベースとスキーマを作成します。
Amazon S3バケットにデータを保持するステージを作成します。
データのソースとなるステージを指定するために DataFrame を作成します。
ステージ上のファイルのデータを含むテーブルを作成します。
新しいテーブルをクエリし、データをフィルターするために DataFrame をセットアップします。
前提条件¶
このチュートリアルでは、次を前提としています。
対応ブラウザ を使用している。
トライアルアカウントがある。まだトライアルアカウントをお持ちでない場合は、 無料トライアル にご登録ください。任意の Snowflakeクラウドリージョン を選択できます。
あなたのユーザーはアカウント管理者であり、 ACCOUNTADMIN システムロールが付与されています。詳細については、 ACCOUNTADMIN ロールの使用 をご参照ください。
注釈
このチュートリアルは、トライアルアカウントを持つユーザーのみが利用できます。ワークシートのサンプルは、他のタイプのアカウントでは使用できません。
ステップ1: Snowsight を使用してサインインする¶
公共のインターネット経由で Snowsight にアクセスするには、次を実行します。
サポートされているウェブブラウザーで、https://app.snowflake.comに移動します。
アカウント識別子 またはアカウント URL を入力します。以前に Snowsight にログインしたことがある場合は、選択できるアカウント名が表示されることがあります。
Snowflakeアカウントの認証情報を使用してサインインします。
ステップ2:Pythonワークシートを開く¶
Pythonワークシートを使用して、Pythonコードを書いたり実行したりすることができます。あなたのトライアルアカウントは、このチュートリアルのためにあらかじめロードされたPythonワークシートにアクセスできます。ワークシートには、データベースを作成し、そこにデータをロードしてデータをクエリするために実行するPythonコードがあります。Pythonワークシートの詳細については、 PythonワークシートでSnowparkコードを記述する をご参照ください。
あらかじめロードされたチュートリアルのPythonワークシートを開くには:
Projects » Worksheets を選択して、ワークシートのリストを開きます。
[Tutorial] Using Python to load and query sample data を開きます。
ワークシートは次の画像のようになります。
このあらかじめロードされたPythonワークシートは、自動的に ACCOUNTADMIN システムロールを使用し、アカウント内のオブジェクトを表示および管理できるようにします。詳細については、 ACCOUNTADMIN ロールの使用 をご参照ください。
ワークシートは COMPUTE_WH 仮想ウェアハウスも使用します。ウェアハウスはオブジェクトの作成と管理、および SQL コマンドの実行に必要なリソースを提供します。これらのリソースには、CPU、メモリ、仮ストレージが含まれます。詳細については、 仮想ウェアハウス をご参照ください。
ステップ3。Pythonワークシートの使い方を学ぶ¶
Pythonワークシートを使用すると、 SQL ステートメントを実行するために Snowsight で Snowpark Python を使用できます。このチュートリアルのこのステップでは、Pythonワークシートの各ステップのコードを説明します。Pythonワークシートを使用する場合、個々のコードブロックを個別に実行することはできません。ワークシート全体を実行する必要があります。ワークシートで Run を選択する前に、Pythonコードをよりよく理解するために、以下のステップを確認してください。
開いているPythonワークシートでは、このステップに以下のコードが含まれています。
import snowflake.snowpark as snowpark from snowflake.snowpark.functions import col from snowflake.snowpark.types import StructField, StructType, IntegerType, StringType, VariantType
このチュートリアルでは
snowpark
パッケージをインポートし、選択したクラスと関数をあなたのコードで使用できるようにします。ワークシートのこのステップには、以下のコードが含まれています。
def main(session: snowpark.Session):
この行はデフォルトの
main
ハンドラー関数を定義しています。ハンドラー関数には、このチュートリアルで実行するコードが含まれています。この行は、Snowflake で SQL ステートメントを実行するために使用できるSession
オブジェクトを渡します。# Use SQL to create our Tasty Bytes Database session.sql('CREATE OR REPLACE DATABASE tasty_bytes_sample_data;').collect()
この行は
tasty_bytes_sample_data
という名前のデータベースを作成します。このデータベースは、あなたが管理し、クエリすることができるテーブルにデータを格納します。詳細については、 データベース、テーブル、およびビュー - 概要 をご参照ください。このコードでは sql メソッドを使って SQL ステートメントの結果を表す DataFrame を作成しています。Snowparkでは、 DataFrame でデータをクエリして処理することができます。また、このコードでは collect メソッドを使用して DataFrame で表される SQL ステートメントを実行しています。ワークシート内のこのステップの他のコード行も、これらのメソッドを使用します。
# Use SQL to create our Raw POS (Point-of-Sale) Schema session.sql('CREATE OR REPLACE SCHEMA tasty_bytes_sample_data.raw_pos;').collect()
この行は
raw_pos
というスキーマをtasty_bytes_sample_data
データベースに作成します。スキーマとは、テーブルやビューなどのデータベースオブジェクトを論理的にグループ化したものです。例えば、スキーマには特定のアプリケーションに必要なデータベースオブジェクトが含まれているかもしれません。# Use SQL to create our Blob Stage session.sql('CREATE OR REPLACE STAGE tasty_bytes_sample_data.public.blob_stage url = "s3://sfquickstarts/tastybytes/" file_format = (type = csv);').collect()
この行は
blob_stage
という名前のステージを作成します。ステージは、Snowflakeデータベースにロードするデータファイルを保持する場所です。このチュートリアルでは、Amazon S3バケットからデータをロードするステージを作成します。このチュートリアルでは、データを含む CSV ファイルと既存のバケットを使用します。この CSV ファイルから、このチュートリアルの後半で作成するテーブルにデータをロードします。詳細については、 Amazon S3からの一括ロード をご参照ください。ワークシートのこのステップには、以下のコードが含まれています。
# Define our Menu Schema menu_schema = StructType([StructField("menu_id",IntegerType()),\ StructField("menu_type_id",IntegerType()),\ StructField("menu_type",StringType()),\ StructField("truck_brand_name",StringType()),\ StructField("menu_item_id",IntegerType()),\ StructField("menu_item_name",StringType()),\ StructField("item_category",StringType()),\ StructField("item_subcategory",StringType()),\ StructField("cost_of_goods_usd",IntegerType()),\ StructField("sale_price_usd",IntegerType()),\ StructField("menu_item_health_metrics_obj",VariantType())])
このコードは、
menu_schema
という名前のStructType
オブジェクトを作成します。このオブジェクトは、ステージの CSV ファイル内のフィールドを説明するStructField
オブジェクトのlist
で構成されています。詳細については、 ステージでのファイルの操作 をご参照ください。ワークシートのこのステップには、以下のコードが含まれています。
# Create a Dataframe from our Menu file from our Blob Stage df_blob_stage_read = session.read.schema(menu_schema).csv('@tasty_bytes_sample_data.public.blob_stage/raw_pos/menu/')
この行は
df_blob_stage_read
DataFrame を作成します。この DataFrame は、指定されたmenu_schema
スキーマを使用して、指定されたステージにある CSV ファイルから、データを読み取るように構成されています。スキーマには、データ列の型と名前に関する情報が含まれています。# Save our Dataframe as a Menu table in our Tasty Bytes Database and Raw POS Schema df_blob_stage_read.write.mode("overwrite").save_as_table("tasty_bytes_sample_data.raw_pos.menu")
このコードでは、 save_as_table メソッドを使って
menu
テーブルを作成し、ステージからデータをロードします。ワークシートのこのステップには、以下のコードが含まれています。
# Create a new Dataframe reading from our Menu table and filtering for the Freezing Point brand df_menu_freezing_point = session.table("tasty_bytes_sample_data.raw_pos.menu").filter(col("truck_brand_name") == 'Freezing Point')
この行は
df_menu_freezing_point
DataFrame を作成し、menu
テーブルにクエリするように構成します。 filter メソッドは、条件式を使って SQL を実行する準備をします。条件式はmenu
テーブルの行をフィルターし、truck_brand_name
列がFreezing Point
と等しい行を返します(WHERE 句と同様)。# return our Dataframe return df_menu_freezing_point
この行は、
df_menu_freezing_point
DataFrame を返して、クエリの実行準備が完了します。DataFrames は遅延評価されます。つまり、この行はクエリを実行するためにサーバーに送信しません。
準備ができたら、 Run を選択してコードを実行し、出力を表示します。 Run を選択すると、PythonワークシートはPythonコードを実行し、SQL ステートメントを生成して実行します。返された DataFrame に対するクエリが実行され、結果がワークシートに表示されます。
出力は、次の画像に類似したものになります。
ステップ4。クリーンアップ、まとめ、追加リソース¶
おめでとうございます。トライアルアカウントのこのチュートリアルを完了しました。
数分かけて、短い要約とこのチュートリアルで説明されている重要な点を確認します。このチュートリアルで作成したオブジェクトをすべて削除して、クリーンアップすることを検討してください。詳細は、Snowflakeドキュメントの他のトピックをご参照ください。
チュートリアルオブジェクトのクリーンアップ(オプション)¶
このチュートリアルで作成したオブジェクトが不要になった場合は、 DROP <オブジェクト> コマンドでそれらをシステムから削除することができます。作成したデータベースを削除するには、次のコマンドを実行します。
DROP DATABASE IF EXISTS tasty_bytes_sample_data;
概要と重要なポイント¶
要約すると、 Snowsight にあらかじめロードされているPythonワークシートを使って、Pythonコードで以下のステップを完了しました。
PythonアプリケーションにSnowparkモジュールをインポートします。
Python関数を作成します。
データベースとスキーマを作成します。
Amazon S3バケットにデータを保持するステージを作成します。
ステージでのデータのソースを指定するために DataFrame を作成します。
ステージ上のファイルのデータを含むテーブルを作成します、
新しいテーブルをクエリし、データをフィルターするために DataFrame をセットアップします。
ここでは、データのロードとクエリについて覚えておくべきポイントをいくつかご紹介します。
Snowparkを使ってPythonコードで SQL ステートメントを実行しました。
CSV ファイルからデータをロードするステージを作成しました。
データを格納するデータベースと、データベースオブジェクトを論理的にグループ化するスキーマを作成しました。
データソースを指定して、クエリのためにデータをフィルターするために DataFrame を使用しました。
次の内容¶
次のリソースを使用して、Snowflakeについて引き続き学習しましょう。
Snowflakeが提供する他のチュートリアルを完了しましょう。
Snowflakeの主要な概念と機能、およびクエリの実行とデータの挿入/更新に使用される Snowpark Pythonクラスおよびメソッドをよく理解します。
Snowflakeが提供するTasty Bytes Quickstartsを試してみましょう。