`Expr::Not` and `PhysicalExpr::NotExpr` have different metadata propagation rules
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 57/100
調査の方向性
The reproduction identifies Expr::Not::to_field and physical NotExpr::return_field as the paths with different metadata results. Read those implementations and nearby expression metadata tests first; the issue leaves open which behavior is correct. Decide on consistent propagation rules, add a regression test for the chosen behavior, and verify logical and physical fields agree.
索引モデルが issue の本文から書いたものです。
説明
Describe the bug
The logical an physical representations of NOT propagate metadata differently.
I'm actually not sure which one is more correct...some metadata uses like "sensor" or "where this value came from" probably are not lying after a NOT operation; however, it's also a little like a function call which would discard its output metadata.
To Reproduce
#[test]
fn not_metadata_differs_between_logical_and_physical() -> Result<()> {
let schema = Schema::new(vec![Field::new("flag", DataType::Boolean, false)]);
let df_schema = DFSchema::try_from(schema.clone())?;
let metadata = FieldMetadata::from(HashMap::from([(
"source".to_string(),
"input".to_string(),
)]));
let expr = Expr::Not(Box::new(
col("flag").alias_with_metadata("flag", Some(metadata)),
));
let logical_field = expr.to_field(&df_schema)?.1;
let physical_expr = create_physical_expr(
&expr,
&df_schema,
&ExecutionProps::new(),
&PhysicalPlanningContext::default(),
)?;
let physical_field = physical_expr.return_field(&schema)?;
// Logical NOT creates a metadata-free Boolean field.
assert_eq!(logical_field.metadata().get("source"), None);
// Physical NotExpr forwards its child's field metadata.
assert_eq!(
physical_field.metadata().get("source").map(String::as_str),
Some("input")
);
Ok(())
}
Expected behavior
I'd expect the result to match
Additional context
No response
Willingness to contribute
I would like to contribute a fix for this bug, but request guidance from the DataFusion community
- 主要言語
- Rust
- スター
- 9.6k
- フォーク
- 2.6k
- 平均マージ
- 3日 4時間
- マージ済み PR(30日)
- 345
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/datafusion のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
apache/datafusion#27315 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
apache/datafusion#27094 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Substrait consumer doesn't recognise `shift_left` / `shift_right` from functions_arithmetic.yaml対応中かも @jonasHanhan が 9 日前に担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
apache/datafusion#27059 ·
メンテナーはふだん 1 日以内に返信
-
`ProjectionExprs::project_statistics` computes approximate `Statistics::total_byte_size` ignoring column stats対応中かも @joseph-isaacs が 10 日前に担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
apache/datafusion#27050 ·
メンテナーはふだん 1 日以内に返信
-
physical-plan: decoding an Unnest or Explain node with an unset field panics対応中かも @geoHeil が 8 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
apache/datafusion#26999 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
apache/datafusion の issue をすべて見る
似ている issue
-
P3
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
HerringtonDarkholme/hd-lang#1770 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
jonathanong/no-mistakes#3332 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
swc-project/swc-next-issues#310 ·
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
swc-project/swc-ai-issues#653 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
lbjlaq/Antigravity-Manager#3937 ·
メンテナーはふだん 1 日以内に返信