0
0

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の宣言型クエリ言語 Fenl ~異なるエンティティの結合

Posted at

はじめに

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

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

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

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

異なるエンティティの結合

Fenl式によって生成される値はすべて、定数でなければ(たとえば、42も、Fenlの式だと言えます)、エンティティに関連付けられています。

エンティティは、以下の性質を持ちます。

  • 集計 (例sum: min、 、first) は、各値のエンティティ キーにスコープされます。
  • 複数の引数 (すなわちaddまたは eq) を受け入れる単純な関数では、非定数引数に互換性のあるエンティティ キー タイプがあり、同じエンティティ キーを持つ値の間で動作します。

このスコープ動作により、同一のエンティティ同士の一般的な操作を簡単に作成できますが、多くの場合、値を異なるエンティティ キーと組み合わせるニーズがあります。

例えば、式ProductReview.starsは、個々のレビューがキーとなりますが、それぞれの内容は、Productと言うエンティティに関係しています。

関数lookupサポートは、このようなユースケースをサポートします。lookup 関数は 2 つの引数を取ります。最初の引数key(キー式) は検索されるエンティティ キーを記述し、2 番目の引数value(外部式) は検索される値を記述します。

lookup(key, value)
  • キー式は「他の」エンティティ キーを識別し、「この」エンティティの値に対する操作として表現する必要があります。たとえば、個々の製品レビューに関連付けられたレビュー担当者に関する情報を検索したい場合、キー式はProductReview.reviewer_idのようになります 。
  • 外部表現valueは、検索する値を記述し、「他の」エンティティの値に対する操作として表現します。

以下のように、各製品レビューから、関連する情報をまとめることができます。

{
  product_id:     ProductReview.product_id,
  reviewer:       ProductReview.reviewer_id,
  reviewer_avg:   lookup(ProductReview.reviewer_id, ProductReviewByReviewer.stars | mean()),
  reviewer_count: lookup(ProductReview.reviewer_id, ProductReviewByReviewer.stars | count()),
}

ルックアップ式は、キー式が null 以外の値を生成するたびに、外部式の値を生成します。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?