フレーム操作¶
通常のCognitionFrame変換は不変かつ遅延実行です。計画を実行するには、collect()、collect_records()、to_records()、エクスポート用メソッド、またはpack()を呼び出します。v0.1系列では、group_by().agg()は入力元を直ちに評価します。
active = (
frame
.filter(cx.col("expires_at").is_null() | (cx.col("expires_at") > cx.now()))
.with_columns(priority=lambda row: row["priority"] + 1)
.sort("priority", descending=True)
.limit(100)
)
print(active.explain())
操作の概要¶
操作 |
v0.1系列の挙動 |
|---|---|
|
|
|
指定した列だけを取り出します。存在しない名前の値は |
|
定数、式、呼び出し可能オブジェクトから得た値を追加または置換します |
|
1列を並べ替えます。NULL値はPythonプランナーによってまとめて配置されます |
|
先頭から、0以上で指定した件数の行を残します |
|
|
|
|
|
正規化された |
|
行の順序を変えずにスコアを保存します |
|
Textペイロードだけを正規表現で置換し、ハッシュと来歴を更新します |
|
一致する行を |
|
保持要件を明示的に変更します。これはアプリケーションによる認可判断です |
コンテキストフレームと探索用テーブル¶
collect()は各行をContextItemへ戻すため、idとpayloadが必要です。collect_records()は通常の辞書を返すので、列を絞り込んだ行や集約した行も確認できます。
import cognoxium as cx
frame = cx.CognitionFrame.from_records([
{"id": "a", "payload": "one", "metadata": {"team": "x"}},
{"id": "b", "payload": "two", "metadata": {"team": "x"}},
]).with_columns(team=lambda row: row["metadata"]["team"])
summary = frame.group_by("team").agg(count=("count", "*"))
print(summary.collect_records())
[{'team': 'x', 'count': 2}]
集約テーブルはモデル用コンテキストではないため、summary.collect()またはsummary.pack()を呼び出すとSchemaErrorが発生します。