目次
開発

拡張を提案する

新しい演算、関数、ユーザー定義コードの要望がどう評価されるか、そして各種の要望が現時点ではどこに属するかを説明します。このページはv0.1以降の提案に対するプロジェクトの方針で、文法、プログラムの意味、契約の識別子を変えるものではありません。

ActQLにはユーザー定義関数がありません。提案は、次の2つのどちらかとしてレビューされます。提供元に依存しない演算が欠けているのか、それとも独自のロジックなのか。繰り返し現れる提供元に依存しない演算は、閉じた標準の演算子になることがあります。独自のロジックは、データ、型付きの取得の契約、Run Graphのタスク、またはActQLの外のコードにとどまります。

それぞれの要望はどこに行くか

要望最初の置き場所UDFが要らない理由
レコード内の計算スカラー式型付きで決定的な1つの値。
集合の変換、集計、ウィンドウリレーショナル代数、またはそのCarrierの代数順序、件数、上限が見えたままになる。
グラフ、ベクトル、イベントの計算グラフ、ベクトル、イベントの演算Carrierの法則が保たれる。
独自のアルゴリズムやリモートのサービス検査済みの外部SourceViewとの結合、または型付きの INFER外部の観測、送信、コスト、証拠が明示されたままになる。
レコードからバイト列へArtifactの導出、または SERIALIZE不変のコンテンツと、アップロードの権限が分離されたままになる。
外部への変更Effectプレビュー、承認、冪等性、受領記録がレビューできる。
保護された処理の前の承認HostのCheckpoint同じRunを止めて再開する。ソースの構文は増えない。
同じRunの再開、受け付けられた再試行、突き合わせHostのランタイム正確な継続、権限、冪等性の識別子が保たれる。
時間、スケジュール、結果に応じて駆動される処理Run Graph後続の有界なRunを開始したり調整したりする。
任意の、検証できないコードActQLの外、または制約された不透明なタスク弱い保証であることが見えたままになる。

次のソースの形は受け付けません。

- udf: {language: python, code: "..."}
- compute: {contract: custom-function:v1}
- transform: {wasm: sha256:...}
- fold: {initial: ..., function: ...}

ハッシュ、署名、型の宣言、サンドボックスがあっても、不透明な関数の代数的な法則は見えません。だから、実行前に並べ替え、融合、プッシュダウン、再生、見積もりを安全に行えるようにはなりません。

今後ありうる要望

ActQL 0.1には、正確なdecimalの算術、閉じたobjectとarrayの構築、レコードのアサーション、Unicodeとtimestampのヘルパーが含まれています。次のものは、ありうる不足であって、受け入れられた機能ではありません。

  • enum、範囲、文字列長の制約のような、スカラー値の精緻化
  • JSONのエントリの展開と集計、標準的なテキストの類似度、あと1つの標準的な集計やウィンドウの演算子
  • 登録済みの INFER の契約を超える、追加の型付きの取得の結果

これらの例は、汎用のバリデーター、動的なobjectのキー、再帰的なJSONの変更、あいまい結合やエンティティ解決の演算、任意のリデューサー、try/catch、ドメイン固有のモジュールを認めるものではありません。OCR、文字起こし、ジオコーディング、税務エンジン、祝日カレンダー、経路探索、最適化、XLSX/XML/ZIPの処理、独自のスコアリングは、Relationのデータか型付きのSourceViewの契約として始まります。非同期の形は、CommandとRun Graphを使います。繰り返し現れる、提供元に依存しない数学的な意味は、のちに代数に昇格することがあります。提供元の機能が、単に人気があるという理由で昇格することはありません。

提案に必要なもの

1つの新しい演算子を提案する前に、それを必要とする実際のコード片のコーパスを集めてください。各エントリには次を記録します。

source_fragment_cid
input_contract_cid
output_contract_cid
shape: row_local | aggregate | pairwise | artifact | external | process
deterministic_after_capture
external_io
stateful
current_actql_expansion
unexpressible_reason
independent_workload_family

演算子の提案が検討の対象になるのは、次のすべてが成り立つときだけです。

  1. 独立した3つ以上の実際のワークロードの系統が、同じ提供元に依存しない意味を必要としている。
  2. 既存の合成、データとしてのRelation、型付きの取得、Artifact、Run Graphの境界が、明らかに不自然か不十分である。
  3. 入力と出力の型、NULLの振る舞い、順序、失敗、コスト、メモリ、出力の上限を閉じることができる。
  4. 移植可能な適合性のベクトルと、独立したオラクルを書くことができる。
  5. 新しいルートのCarrier、権限の境界、実行のカテゴリーが不要である。
  6. それがないと何があいまいになるか、不健全になるかを、除去による証明で説明できる。

どれか1つでも成り立たなければ、その演算は追加されません。

振り分けの規則

existing composition?
  yes -> add nothing
business rule is data?
  yes -> Relation + join
external / provider / proprietary observation?
  yes -> checked external SourceView join or typed INFER
bytes?
  yes -> Artifact derivation / SERIALIZE / SourceView
time or a prior Effect outcome?
  yes -> Run Graph
general deterministic bounded semantics repeated across real workloads?
  yes -> propose one closed operator in the existing algebra
otherwise -> outside ActQL

すべての拡張の提案は、この規則に従います。

マスターデータ

将来のマスターデータのモジュールは、対応を主張する前に、次のワークフローを閉じる必要があります。

versioned persistent graph source
→ typed canonical entity and source binding
→ resolution evidence and merge/split proposal
→ graph delta preview against an exact base version
→ affected binding/relation/source-record counts and conflicts
→ required approval bound to the concrete preview identity
→ compare-and-set apply
→ graph mutation receipt and lineage

エンティティのマージと分割は、グラフの計算ではなくEffectになります。そのプレビューは、移動する束縛、書き換えられるRelation、競合する属性、下流のソースレコード、権限、最大のスコープ、基準となるグラフの識別子、承認の要件を見せるものになります。グラフの和集合をエンティティのマージと読み替えるのではなく、ActQLの承認、権限、プレビューの識別子、冪等性、受領記録の原則をそのまま使います。

Source: actql/actql/docs/contributing/extensions.md at d904416674e4 · Edit on GitHub