Snowpark Pythonを使用してサンプルデータをロードし、クエリする

紹介

このチュートリアルでは、Tasty Bytesという架空のフードトラックブランドを使用し、 Snowpark Python を使用してSnowflakeでデータをロードしてクエリする方法を紹介します。これらのタスクを完了するには、 Snowsight にあらかじめロードされているPythonワークシートを使用します。

次の図は、Tasty Bytesの概要を示しています。

いくつかの国や都市に15ブランドのローカライズされたフードトラックオプションを持つグローバルなフードトラックネットワーク、Tasty Bytesの概要が含まれています。イメージは、会社のミッション、ビジョン、所在地、現状、将来の目標について説明しています。

注釈

Snowflakeはこのチュートリアルのサンプルデータに使用されるディスク上のストレージに対して最小限の料金を請求します。このチュートリアルでは、データベースをドロップしてストレージコストを最小限に抑えるステップを示します。

Snowflakeには、サンプルデータをロードしてクエリを実行するために、 仮想ウェアハウス が必要です。稼働中の仮想ウェアハウスはSnowflakeのクレジットを消費します。このチュートリアルでは、無料クレジットを提供する 30日間のトライアルアカウント を使用するため、コストは発生しません。

学習内容

このチュートリアルでは、 Snowpark Python API:を使用して以下のタスクを完了する方法を学びます。

  • データベースとスキーマを作成します。

  • Amazon S3バケットにデータを保持するステージを作成します。

  • データのソースとなるステージを指定するために DataFrame を作成します。

  • ステージ上のファイルのデータを含むテーブルを作成します。

  • 新しいテーブルをクエリし、データをフィルターするために DataFrame をセットアップします。

前提条件

このチュートリアルでは、次を前提としています。

注釈

このチュートリアルは、トライアルアカウントを持つユーザーのみが利用できます。ワークシートのサンプルは、他のタイプのアカウントでは使用できません。

ステップ1: Snowsight を使用してサインインする

公共のインターネット経由で Snowsight にアクセスするには、次を実行します。

  1. サポートされているウェブブラウザーで、https://app.snowflake.comに移動します。

  2. アカウント識別子 またはアカウント URL を入力します。以前に Snowsight にログインしたことがある場合は、選択できるアカウント名が表示されることがあります。

  3. Snowflakeアカウントの認証情報を使用してサインインします。

ステップ2:Pythonワークシートを開く

Pythonワークシートを使用して、Pythonコードを書いたり実行したりすることができます。あなたのトライアルアカウントは、このチュートリアルのためにあらかじめロードされたPythonワークシートにアクセスできます。ワークシートには、データベースを作成し、そこにデータをロードしてデータをクエリするために実行するPythonコードがあります。Pythonワークシートの詳細については、 PythonワークシートでSnowparkコードを記述する をご参照ください。

あらかじめロードされたチュートリアルのPythonワークシートを開くには:

  1. Projects » Worksheets を選択して、ワークシートのリストを開きます。

  2. [Tutorial] Using Python to load and query sample data を開きます。

    ワークシートは次の画像のようになります。

Pythonのロードとクエリのワークシート。このチュートリアルのコードと説明的なコメントが含まれています。

このあらかじめロードされたPythonワークシートは、自動的に ACCOUNTADMIN システムロールを使用し、アカウント内のオブジェクトを表示および管理できるようにします。詳細については、 ACCOUNTADMIN ロールの使用 をご参照ください。

ワークシートは COMPUTE_WH 仮想ウェアハウスも使用します。ウェアハウスはオブジェクトの作成と管理、および SQL コマンドの実行に必要なリソースを提供します。これらのリソースには、CPU、メモリ、仮ストレージが含まれます。詳細については、 仮想ウェアハウス をご参照ください。

ステップ3。Pythonワークシートの使い方を学ぶ

Pythonワークシートを使用すると、 SQL ステートメントを実行するために Snowsight で Snowpark Python を使用できます。このチュートリアルのこのステップでは、Pythonワークシートの各ステップのコードを説明します。Pythonワークシートを使用する場合、個々のコードブロックを個別に実行することはできません。ワークシート全体を実行する必要があります。ワークシートで Run を選択する前に、Pythonコードをよりよく理解するために、以下のステップを確認してください。

  1. 開いているPythonワークシートでは、このステップに以下のコードが含まれています。

    import snowflake.snowpark as snowpark
    from snowflake.snowpark.functions import col
    from snowflake.snowpark.types import StructField, StructType, IntegerType, StringType, VariantType
    
    Copy

    このチュートリアルでは snowpark パッケージをインポートし、選択したクラスと関数をあなたのコードで使用できるようにします。

  2. ワークシートのこのステップには、以下のコードが含まれています。

    def main(session: snowpark.Session):
    
    Copy

    この行はデフォルトの main ハンドラー関数を定義しています。ハンドラー関数には、このチュートリアルで実行するコードが含まれています。この行は、Snowflake で SQL ステートメントを実行するために使用できる Session オブジェクトを渡します。

    # Use SQL to create our Tasty Bytes Database
    session.sql('CREATE OR REPLACE DATABASE tasty_bytes_sample_data;').collect()
    
    Copy

    この行は 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()
    
    Copy

    この行は 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()
    
    Copy

    この行は blob_stage という名前のステージを作成します。ステージは、Snowflakeデータベースにロードするデータファイルを保持する場所です。このチュートリアルでは、Amazon S3バケットからデータをロードするステージを作成します。このチュートリアルでは、データを含む CSV ファイルと既存のバケットを使用します。この CSV ファイルから、このチュートリアルの後半で作成するテーブルにデータをロードします。詳細については、 Amazon S3からの一括ロード をご参照ください。

  3. ワークシートのこのステップには、以下のコードが含まれています。

    # 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())])
    
    Copy

    このコードは、 menu_schema という名前の StructType オブジェクトを作成します。このオブジェクトは、ステージの CSV ファイル内のフィールドを説明する StructField オブジェクトの list で構成されています。詳細については、 ステージでのファイルの操作 をご参照ください。

  4. ワークシートのこのステップには、以下のコードが含まれています。

    # 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/')
    
    Copy

    この行は 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")
    
    Copy

    このコードでは、 save_as_table メソッドを使って menu テーブルを作成し、ステージからデータをロードします。

  5. ワークシートのこのステップには、以下のコードが含まれています。

    # 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')
    
    Copy

    この行は df_menu_freezing_point DataFrame を作成し、 menu テーブルにクエリするように構成します。 filter メソッドは、条件式を使って SQL を実行する準備をします。条件式は menu テーブルの行をフィルターし、 truck_brand_name 列が Freezing Point と等しい行を返します(WHERE 句と同様)。

    # return our Dataframe
    return df_menu_freezing_point
    
    Copy

    この行は、 df_menu_freezing_point DataFrame を返して、クエリの実行準備が完了します。DataFrames は遅延評価されます。つまり、この行はクエリを実行するためにサーバーに送信しません。

準備ができたら、 Run を選択してコードを実行し、出力を表示します。 Run を選択すると、PythonワークシートはPythonコードを実行し、SQL ステートメントを生成して実行します。返された DataFrame に対するクエリが実行され、結果がワークシートに表示されます。

出力は、次の画像に類似したものになります。

テーブル出力には、MENU_ID、 MENU_TYPE_ID、 MENU_TYPE、 TRUCK_BRAND_NAME、 MENU_ITEM_ID の列があります。最初の行には、10001、1、アイスクリーム、凝固点、10の値があります。

ステップ4。クリーンアップ、まとめ、追加リソース

おめでとうございます。トライアルアカウントのこのチュートリアルを完了しました。

数分かけて、短い要約とこのチュートリアルで説明されている重要な点を確認します。このチュートリアルで作成したオブジェクトをすべて削除して、クリーンアップすることを検討してください。詳細は、Snowflakeドキュメントの他のトピックをご参照ください。

チュートリアルオブジェクトのクリーンアップ(オプション)

このチュートリアルで作成したオブジェクトが不要になった場合は、 DROP <オブジェクト> コマンドでそれらをシステムから削除することができます。作成したデータベースを削除するには、次のコマンドを実行します。

DROP DATABASE IF EXISTS tasty_bytes_sample_data;
Copy

概要と重要なポイント

要約すると、 Snowsight にあらかじめロードされているPythonワークシートを使って、Pythonコードで以下のステップを完了しました。

  1. PythonアプリケーションにSnowparkモジュールをインポートします。

  2. Python関数を作成します。

  3. データベースとスキーマを作成します。

  4. Amazon S3バケットにデータを保持するステージを作成します。

  5. ステージでのデータのソースを指定するために DataFrame を作成します。

  6. ステージ上のファイルのデータを含むテーブルを作成します、

  7. 新しいテーブルをクエリし、データをフィルターするために DataFrame をセットアップします。

ここでは、データのロードとクエリについて覚えておくべきポイントをいくつかご紹介します。

  • Snowparkを使ってPythonコードで SQL ステートメントを実行しました。

  • CSV ファイルからデータをロードするステージを作成しました。

  • データを格納するデータベースと、データベースオブジェクトを論理的にグループ化するスキーマを作成しました。

  • データソースを指定して、クエリのためにデータをフィルターするために DataFrame を使用しました。

次の内容

次のリソースを使用して、Snowflakeについて引き続き学習しましょう。

  • Snowflakeが提供する他のチュートリアルを完了しましょう。

  • Snowflakeの主要な概念と機能、およびクエリの実行とデータの挿入/更新に使用される Snowpark Pythonクラスおよびメソッドをよく理解します。

  • Snowflakeが提供するTasty Bytes Quickstartsを試してみましょう。