-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
It can't work like this:
SELECT foo AS bar FROM t WHERE bar > 10I have the field foo just give it an alias bar then as a where clause, it will report the error:
Error: SchemaError(FieldNotFound { qualifier: None, name: "bar", valid_fields: Some(["t.foo"]) })
To Reproduce
Steps to reproduce the behavior:
Expected behavior
It can work.
Additional context
My demo code:
use std::sync::Arc;
use datafusion::arrow::array::Int32Array;
use datafusion::arrow::datatypes::{DataType, Field, Schema};
use datafusion::arrow::record_batch::RecordBatch;
use datafusion::datasource::MemTable;
use datafusion::error::Result;
use datafusion::from_slice::FromSlice;
use datafusion::prelude::SessionContext;
/// This example demonstrates how to use the DataFrame API against in-memory data.
#[tokio::main]
async fn main() -> Result<()> {
// define a schema.
let schema = Arc::new(Schema::new(vec![Field::new("foo", DataType::Int32, false)]));
// define data.
let batch = RecordBatch::try_new(
schema.clone(),
vec![Arc::new(Int32Array::from_slice([1, 10, 10, 100]))],
)?;
// declare a new context. In spark API, this corresponds to a new spark SQLsession
let ctx = SessionContext::new();
// declare a table in memory. In spark API, this corresponds to createDataFrame(...).
let provider = MemTable::try_new(schema.clone(), vec![vec![batch]])?;
ctx.register_table("t", Arc::new(provider))?;
let df = ctx.sql("SELECT foo AS bar FROM t WHERE bar > 10").await?;
// print the results
df.show().await?;
Ok(())
}Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working