はじめに
先日、以下の記事を発表しました。
新しいテクノロジーに触れる時はいつでも楽しいものです。
中でも新しいプログラミング言語(のパラダイム)を学ぶことは、特別に楽しいことです。
ということで、まだまだ勉強中ですが、公式ドキュメントの学習過程の記録として、以下の記事をまとめてみました。
本稿情報のソースとして、下記ドキュメントを参照ください。
スライスとは何か?
Kaskada は、データセットのスライスを操作する機能を提供します。スライス は、大きなデータセットをフィルタリングして小さなデータセットを作成する方法を表します。大規模なデータセットをスライスすることにより、データのサブセットにアクセスできるようになるため、クエリの実行が大幅に高速化されます。
スライスは、データセット全体の統計的プロパティを保存します。一般に、スライスには特定のエンティティのデータがすべて含まれるか、まったく含まれないかのどちらかです。サンプリングは個々のエンティティの粒度で行われます。
スライスは、生成された結果のセットにのみ影響を及ぼし、特定の結果を生成するために使用されたデータには影響しません。 その結果、lookup
などの一部の式は、結果を生成するためにデータセット全体が必要になる可能性があるため、他の式ほど効率的にスライスできません。
スライスの種類
エンティティキーパーセントフィルタ
このフィルター タイプは、入力データセットをエンティティ キーのパーセンテージまでスライスします。Kaskada はテーブルでデータを管理し、テーブルの作成にはentity_key_column_name
が必要であることを思い出してください。エンティティ キーは、各行に関連付けられたキーです。エンティティは、各イベントに関連する世界の物事を特定する必要があります。
このフィルターは、すべての行を読み取り、エンティティ キー列に基づいて決定的かつスケーラブルな方法で行を削除します。フィルターは、テーブルにデータを追加するときにのみ、新しいデータに対して実行されます。以前にスライスされたデータを再計算する必要はありません。
以下は、Python でエンティティ キー フィルターを作成する例です。
from kaskada.slice_filters import EntityPercentFilter
filter_percentage = 12.34
entity_filter = EntityPercentFilter(filter_percentage)
上の例では、フィルタリング率 12.34% で Kaskada Compute モジュールから新しいEntityPercentFilter
モジュールを作成しています。
エンティティ キー パーセント フィルタ詳細
- 指定するフィルターの割合は 0.1% ~ 100% の範囲にする必要があります。
- パーセンテージが大きいスライスには、パーセンテージが小さいエンティティが含まれます。例えば:
- エンティティ A、B、C からの結果が 10% 含まれているスライスがあるとします。
- 20% のスライスには、少なくとも A、B、C に加えて、追加のエンティティ D、E、F が含まれます。
- 新しいデータがテーブルに追加されると、以前にスライスされたエンティティ キーも最新のデータに含まれ、新しいエンティティ キーが追加される可能性が高くなります。例えば:
- エンティティ A と B からの結果が 10% 含まれているスライスがあるとします。
- 新しいデータは、エンティティ A、C、D、E とともにテーブルにアップロードされます。A は自動的にスライスに含まれます。C、D、E はすべて、スライスに含まれる可能性が 10% あります。
エンティティキーフィルター
エンティティ キー フィルターは、入力データセットを提供されたエンティティ キーにスライスします。フィルターが適用されると、指定されたエンティティ キーにエンティティ キーを持つデータのみがクエリ可能になります。現在、数値および文字列エンティティ キー フィルタリングのみがサポートされています。
エンティティ キー フィルターの作成例を次に示します。
from kaskada.slice_filters import EntityFilter
entity_keys = ["customer_01", "customer_03"]
entity_filter = EntityFilter(entity_keys)
上の例では、「customer_01」と「customer_03」のエンティティ キー フィルターを使用して新しいモジュールEntityFilter
を作成します。
エンティティ キー フィルタ詳細
- 指定されたキーはテーブルのエンティティ キー タイプと一致する必要があり、数値/文字列タイプのみがサポートされます。
使用法
スライスの使用はクエリ時にのみ適用され、 クエリごとに適用できるフィルターは1 つだけです。クエリにフィルターを適用するには、Kaskada モジュール メソッドset_default_slice
を使用します。
スライスを設定すると、後続のすべてのクエリで同じセッション上のスライス フィルターが使用されます。
以下は、Pythonコードの例です。
from kaskada import compute
from kaskada.api.session import LocalBuilder
from kaskada.slice_filters import EntityPercentFilter
session = LocalBuilder().build()
filter_percentage = 12.34
entity_filter = EntityPercentFilter(filter_percentage)
kda.set_default_slice(entity_filter)
query = '''
{
time: Purchase.purchase_time,
entity: Purchase.customer_id,
max_amount: last(Purchase.amount) | max(),
min_amount: Purchase.amount | min()
}
'''
compute.query(query=query)
IPython (Jupyter) の場合、以下のようにコードセルの後に、Fenl式を直接実行することもできます。
from kaskada.slice_filters import EntityPercentFilter
filter_percentage = 12.34
entity_filter = EntityPercentFilter(filter_percentage)
kda.set_default_slice(entity_filter)
%%fenl
{
time: Purchase.purchase_time,
entity: Purchase.customer_id,
max_amount: Purchase.amount | max(),
min_amount: Purchase.amount | min(),
}