0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

特徴量エンジンKaskadaリファレンス~スライス

Posted at

はじめに

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

新しいテクノロジーに触れる時はいつでも楽しいものです。
中でも新しいプログラミング言語(のパラダイム)を学ぶことは、特別に楽しいことです。

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

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

スライスとは何か?

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(),
}
0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?