Skip to content

Commit 0072e2a

Browse files
Merge commit 'ea46e82088ceb27f85de5a994495649ef0bd4747' into chunchun/update-df-june-week-3
2 parents 2473c03 + ea46e82 commit 0072e2a

File tree

81 files changed

+2143
-635
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+2143
-635
lines changed

datafusion-cli/Cargo.lock

Lines changed: 112 additions & 58 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

datafusion-examples/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ cargo run --example csv_sql
4545
- [`advanced_udaf.rs`](examples/advanced_udaf.rs): Define and invoke a more complicated User Defined Aggregate Function (UDAF)
4646
- [`advanced_udf.rs`](examples/advanced_udf.rs): Define and invoke a more complicated User Defined Scalar Function (UDF)
4747
- [`advanced_udwf.rs`](examples/advanced_udwf.rs): Define and invoke a more complicated User Defined Window Function (UDWF)
48+
- [`advanced_parquet_index.rs`](examples/advanced_parquet_index.rs): Creates a detailed secondary index that covers the contents of several parquet files
4849
- [`avro_sql.rs`](examples/avro_sql.rs): Build and run a query plan from a SQL statement against a local AVRO file
4950
- [`catalog.rs`](examples/catalog.rs): Register the table into a custom catalog
5051
- [`csv_sql.rs`](examples/csv_sql.rs): Build and run a query plan from a SQL statement against a local CSV file

datafusion-examples/examples/advanced_parquet_index.rs

Lines changed: 664 additions & 0 deletions
Large diffs are not rendered by default.

datafusion-examples/examples/rewrite_expr.rs

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
use arrow::datatypes::{DataType, Field, Schema, SchemaRef};
1919
use datafusion_common::config::ConfigOptions;
2020
use datafusion_common::tree_node::{Transformed, TransformedResult, TreeNode};
21-
use datafusion_common::{plan_err, Result, ScalarValue};
21+
use datafusion_common::{plan_err, DataFusionError, Result, ScalarValue};
2222
use datafusion_expr::{
2323
AggregateUDF, Between, Expr, Filter, LogicalPlan, ScalarUDF, TableSource, WindowUDF,
2424
};
2525
use datafusion_optimizer::analyzer::{Analyzer, AnalyzerRule};
26-
use datafusion_optimizer::optimizer::Optimizer;
27-
use datafusion_optimizer::{utils, OptimizerConfig, OptimizerContext, OptimizerRule};
26+
use datafusion_optimizer::optimizer::{ApplyOrder, Optimizer};
27+
use datafusion_optimizer::{OptimizerConfig, OptimizerContext, OptimizerRule};
2828
use datafusion_sql::planner::{ContextProvider, SqlToRel};
2929
use datafusion_sql::sqlparser::dialect::PostgreSqlDialect;
3030
use datafusion_sql::sqlparser::parser::Parser;
@@ -133,30 +133,34 @@ impl OptimizerRule for MyOptimizerRule {
133133

134134
fn try_optimize(
135135
&self,
136-
plan: &LogicalPlan,
137-
config: &dyn OptimizerConfig,
136+
_plan: &LogicalPlan,
137+
_config: &dyn OptimizerConfig,
138138
) -> Result<Option<LogicalPlan>> {
139-
// recurse down and optimize children first
140-
let optimized_plan = utils::optimize_children(self, plan, config)?;
141-
match optimized_plan {
142-
Some(LogicalPlan::Filter(filter)) => {
139+
unreachable!()
140+
}
141+
142+
fn apply_order(&self) -> Option<ApplyOrder> {
143+
Some(ApplyOrder::BottomUp)
144+
}
145+
146+
fn supports_rewrite(&self) -> bool {
147+
true
148+
}
149+
150+
fn rewrite(
151+
&self,
152+
plan: LogicalPlan,
153+
_config: &dyn OptimizerConfig,
154+
) -> Result<Transformed<LogicalPlan>, DataFusionError> {
155+
match plan {
156+
LogicalPlan::Filter(filter) => {
143157
let predicate = my_rewrite(filter.predicate.clone())?;
144-
Ok(Some(LogicalPlan::Filter(Filter::try_new(
158+
Ok(Transformed::yes(LogicalPlan::Filter(Filter::try_new(
145159
predicate,
146-
filter.input,
160+
filter.input.clone(),
147161
)?)))
148162
}
149-
Some(optimized_plan) => Ok(Some(optimized_plan)),
150-
None => match plan {
151-
LogicalPlan::Filter(filter) => {
152-
let predicate = my_rewrite(filter.predicate.clone())?;
153-
Ok(Some(LogicalPlan::Filter(Filter::try_new(
154-
predicate,
155-
filter.input.clone(),
156-
)?)))
157-
}
158-
_ => Ok(None),
159-
},
163+
_ => Ok(Transformed::no(plan)),
160164
}
161165
}
162166
}

datafusion/common/src/column.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,13 @@ impl Column {
127127
})
128128
}
129129

130+
/// return the column's name.
131+
///
132+
/// Note: This ignores the relation and returns the column name only.
133+
pub fn name(&self) -> &str {
134+
&self.name
135+
}
136+
130137
/// Serialize column into a flat name string
131138
pub fn flat_name(&self) -> String {
132139
match &self.relation {

datafusion/common/src/config.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,6 +1393,13 @@ pub struct TableParquetOptions {
13931393
pub key_value_metadata: HashMap<String, Option<String>>,
13941394
}
13951395

1396+
impl TableParquetOptions {
1397+
/// Return new default TableParquetOptions
1398+
pub fn new() -> Self {
1399+
Self::default()
1400+
}
1401+
}
1402+
13961403
impl ConfigField for TableParquetOptions {
13971404
fn visit<V: Visit>(&self, v: &mut V, key_prefix: &str, description: &'static str) {
13981405
self.global.visit(v, key_prefix, description);

0 commit comments

Comments
 (0)