はじめに
先日、以下の記事を発表しました。
新しいテクノロジーに触れる時はいつでも楽しいものです。
まだまだ勉強中ですが、公式ドキュメントの学習過程の記録として、以下の記事をまとめてみました。
本稿情報のソースとして、下記ドキュメントを参照ください。
ビュー
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