LoginSignup
0
0

特徴量エンジンKaskadaリファレンス~ビュー

Posted at

はじめに

先日、以下の記事を発表しました。

新しいテクノロジーに触れる時はいつでも楽しいものです。

まだまだ勉強中ですが、公式ドキュメントの学習過程の記録として、以下の記事をまとめてみました。

本稿情報のソースとして、下記ドキュメントを参照ください。

ビュー

Fenl 式は、ビューを作成し、共有・再利用することできます。
ビューは名前付きの式です。ビュー定義により、それに続くFenl 式では、ビューの名前はビューの式と同義になります。
ビューは Kaskada マネージャーに保持され、あらゆるクエリからアクセスできます。

ビューを作成したら、Fenl内で、そのビューの式を使用できる場所ならどこでも、ビューの名前を用いて、式を使用することができます。ビューに課される唯一の制限は、ビューが有効なFenl式であることです。
また、ビュー内部では他のビューを参照することもできます。

ビューは、式を共有または再利用する必要がある場合、例えば以下のようなケースで、役立ちます。

  • 一般的なビジネス ロジック
  • ML 機能の定義
  • クリーニングオペレーション

ビューの管理

ビューの作成

ビューを作成するには、名前を付ける式を記述することから始めます。

この場合、各ユーザーの購入統計に興味があります。

from kaskada import view
from kaskada.api.session import LocalBuilder

session = LocalBuilder().build()

view.create_view(
    view_name = "PurchaseStats",
    expression = "{
        time: Purchase.purchase_time,
        entity: Purchase.customer_id,
        max_amount: Purchase.amount | max(),
        min_amount: Purchase.amount | min(),
    }"
)

以下は、上記のPythonプログラムと同内容の処理をCLIで実行する例です。

kaskada-cli view create PurchaseStats \
    "{time: Purchase.purchase_time,entity: Purchase.customer_id,max_amount: Purchase.amount | max(),min_amount: Purchase.amount | min()}"

これにより、ビューPurchaseStatsが作成されます。

Kaskadaにおける慣用

Kaskadaではビュー名にキャメルケースを使用することが好まれます。これはテーブルに使用するものと同じ命名規則であり、クエリの一部として作成される一時的なローカル値ではなく、Kaskada システム内の永続リソースを参照していることを伝えるのに役立ちます。

IPython/Jupyterコードブロックでの定義

IPython/Jupyter を使用している場合は、--var引数を%%fenlコマンドに使用してブロックの内容からビューを作成できます。

%%fenl --var purchase_stats
{
    time: Purchase.purchase_time,
    entity: Purchase.customer_id,
    max_amount: Purchase.amount | max(),
    min_amount: Purchase.amount | min(),
}

先頭行(マジック ブロック)に--var purchase_statsを追加すると、ブロックの実行時にクエリ結果を変数purchase_statsに割り当てます。

この変数を使用すると、式を再入力することなく、Python クライアントを使用してビューを作成できます。

from kaskada import view
from kaskada.api.session import LocalBuilder

session = LocalBuilder().build()

view.create_view(
    view_name = "PurchaseStats",
    expression = purchase_stats.expression,
)

リストビュー

list_views メソッドは、ユーザーに対して定義されたすべてのビューを返します。オプションの検索文字列を使用して、レスポンスをフィルタリングできます。

リストビューの例を次に示します。

from kaskada import view
from kaskada.api.session import LocalBuilder

session = LocalBuilder().build()

view.list_views()

以下は、上記のPythonプログラムと同内容の処理をCLIで実行する例です。

kaskada-cli view list

ビューの取得

名前を使用してビューを取得できます。

from kaskada import view
from kaskada.api.session import LocalBuilder

session = LocalBuilder().build()

view.get_view("PurchaseStats")

以下は、上記のPythonプログラムと同内容の処理をCLIで実行する例です。

kaskada-cli view get PurchaseStats

ビューの更新

ビューは現在不変です。ビューを更新するには、そのビューを削除してから再作成する必要があります。

ビューの削除

ビューは、その名前を使用して削除できます。

from kaskada import view
from kaskada.api.session import LocalBuilder

session = LocalBuilder().build()

view.delete_view("PurchaseStats")

以下は、上記のPythonプログラムと同内容の処理をCLIで実行する例です。

kaskada-cli view delete PurchaseStats

削除されたビューに対して、別のビューやマテリアライゼーションがそのビューを参照していると、失敗し前提条件エラーが返されます。ビューの削除を続行するには、別の削除操作で依存リソースを手動で削除するか、ビューを強制的に削除するforceフラグを指定します。依存リソースを削除せずにビューを強制的に削除すると、依存リソースが誤って機能する可能性があります。

from kaskada import view
from kaskada.api.session import LocalBuilder

session = LocalBuilder().build()

view.delete_view("PurchaseStats", force = True)

以下は、上記のPythonプログラムと同内容の処理をCLIで実行する例です。

kaskada-cli view delete PurchaseStats --force
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0