フレーム操作

通常の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系列の挙動

filter(predicate)

Exprまたは呼び出し可能オブジェクトの評価結果が真になる行を残します

select(*columns)

指定した列だけを取り出します。存在しない名前の値はNoneになります

with_columns(**values)

定数、式、呼び出し可能オブジェクトから得た値を追加または置換します

sort(by, descending=False)

1列を並べ替えます。NULL値はPythonプランナーによってまとめて配置されます

limit(count)

先頭から、0以上で指定した件数の行を残します

join(other, on=..., how=...)

innerleftに対応します。右側で重複する列名には接尾辞が付きます

group_by(*columns).agg(...)

countsumminmaxlistに対応します

dedupe()

正規化されたcontent_hashの完全一致で判定します

rank(query, ranker=None)

行の順序を変えずにスコアを保存します

redact(pattern, replacement)

Textペイロードだけを正規表現で置換し、ハッシュと来歴を更新します

quarantine(predicate)

一致する行をTrust.QUARANTINEDへ変更します

demote(predicate, to=...)

保持要件を明示的に変更します。これはアプリケーションによる認可判断です

コンテキストフレームと探索用テーブル

collect()は各行をContextItemへ戻すため、idpayloadが必要です。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が発生します。