Skip to content

Commit 31c4727

Browse files
authored
Upgrade materialized views to DataFusion 53 (#46)
1 parent 152c885 commit 31c4727

4 files changed

Lines changed: 287 additions & 46 deletions

File tree

Cargo.toml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,27 @@ authors = ["Matthew Cramerus <matt@polygon.io>"]
2525
license = "Apache-2.0"
2626
description = "Materialized Views & Query Rewriting in DataFusion"
2727
keywords = ["arrow", "arrow-rs", "datafusion"]
28-
rust-version = "1.85.1"
28+
rust-version = "1.88.0"
2929

3030
[dependencies]
3131
aquamarine = "0.6.0"
32-
arrow = "57.1.0"
33-
arrow-schema = "57.1.0"
32+
arrow = "58.0.0"
33+
arrow-schema = "58.0.0"
3434
async-trait = "0.1.89"
3535
dashmap = "6"
36-
datafusion = "52"
37-
datafusion-common = "52"
38-
datafusion-expr = "52"
39-
datafusion-functions = "52"
40-
datafusion-functions-aggregate = "52"
41-
datafusion-optimizer = "52"
42-
datafusion-physical-expr = "52"
43-
datafusion-physical-plan = "52"
44-
datafusion-sql = "52"
36+
datafusion = { git = "https://github.com/massive-com/arrow-datafusion", rev = "f069fa60c2ff13411922fca07f1e4980571e80fb" }
37+
datafusion-common = { git = "https://github.com/massive-com/arrow-datafusion", rev = "f069fa60c2ff13411922fca07f1e4980571e80fb" }
38+
datafusion-expr = { git = "https://github.com/massive-com/arrow-datafusion", rev = "f069fa60c2ff13411922fca07f1e4980571e80fb" }
39+
datafusion-functions = { git = "https://github.com/massive-com/arrow-datafusion", rev = "f069fa60c2ff13411922fca07f1e4980571e80fb" }
40+
datafusion-functions-aggregate = { git = "https://github.com/massive-com/arrow-datafusion", rev = "f069fa60c2ff13411922fca07f1e4980571e80fb" }
41+
datafusion-optimizer = { git = "https://github.com/massive-com/arrow-datafusion", rev = "f069fa60c2ff13411922fca07f1e4980571e80fb" }
42+
datafusion-physical-expr = { git = "https://github.com/massive-com/arrow-datafusion", rev = "f069fa60c2ff13411922fca07f1e4980571e80fb" }
43+
datafusion-physical-plan = { git = "https://github.com/massive-com/arrow-datafusion", rev = "f069fa60c2ff13411922fca07f1e4980571e80fb" }
44+
datafusion-sql = { git = "https://github.com/massive-com/arrow-datafusion", rev = "f069fa60c2ff13411922fca07f1e4980571e80fb" }
4545
futures = "0.3"
4646
itertools = "0.14"
4747
log = "0.4"
48-
object_store = "0.12.4"
48+
object_store = "0.13.1"
4949
ordered-float = "5.0.0"
5050

5151
[dev-dependencies]

src/materialized/dependencies.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ use datafusion::{
4242
catalog::{CatalogProviderList, TableFunctionImpl},
4343
config::{CatalogOptions, ConfigOptions},
4444
datasource::{provider_as_source, TableProvider, ViewTable},
45-
prelude::{flatten, get_field, make_array},
45+
prelude::{flatten, make_array},
4646
};
4747
use datafusion_common::{
4848
alias::AliasGenerator,
4949
internal_err,
5050
tree_node::{Transformed, TreeNode},
51-
DFSchema, DataFusionError, Result, ScalarValue,
51+
Column as DFColumn, DFSchema, DataFusionError, Result, ScalarValue,
5252
};
5353
use datafusion_expr::{
5454
col, lit, utils::split_conjunction, Expr, LogicalPlan, LogicalPlanBuilder, TableScan,
@@ -400,17 +400,25 @@ pub fn mv_dependencies_plan(
400400
.into_iter()
401401
.find(|c| c.name.starts_with(META_COLUMN))
402402
.ok_or_else(|| DataFusionError::Plan(format!("Plan contains no {META_COLUMN} column")))?;
403-
let files_col = Expr::Column(files.clone());
403+
let meta_table_catalog =
404+
Expr::Column(DFColumn::from_name(format!("{}.table_catalog", files.name)));
405+
let meta_table_schema =
406+
Expr::Column(DFColumn::from_name(format!("{}.table_schema", files.name)));
407+
let meta_table_name = Expr::Column(DFColumn::from_name(format!("{}.table_name", files.name)));
408+
let meta_source_uri = Expr::Column(DFColumn::from_name(format!("{}.source_uri", files.name)));
409+
let meta_last_modified =
410+
Expr::Column(DFColumn::from_name(format!("{}.last_modified", files.name)));
404411

405412
LogicalPlanBuilder::from(pruned_plan_with_source_files)
413+
.unnest_column(files.clone())?
406414
.unnest_column(files)?
407415
.project(vec![
408416
construct_target_path_from_static_partition_columns(materialized_view).alias("target"),
409-
get_field(files_col.clone(), "table_catalog").alias("source_table_catalog"),
410-
get_field(files_col.clone(), "table_schema").alias("source_table_schema"),
411-
get_field(files_col.clone(), "table_name").alias("source_table_name"),
412-
get_field(files_col.clone(), "source_uri").alias("source_uri"),
413-
get_field(files_col.clone(), "last_modified").alias("source_last_modified"),
417+
meta_table_catalog.alias("source_table_catalog"),
418+
meta_table_schema.alias("source_table_schema"),
419+
meta_table_name.alias("source_table_name"),
420+
meta_source_uri.alias("source_uri"),
421+
meta_last_modified.alias("source_last_modified"),
414422
])?
415423
.distinct()?
416424
.build()

src/materialized/file_metadata.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use futures::stream::{self, BoxStream};
4343
use futures::{future, Future, FutureExt, StreamExt, TryStreamExt};
4444
use itertools::Itertools;
4545
use log::debug;
46-
use object_store::{ObjectMeta, ObjectStore};
46+
use object_store::{ObjectMeta, ObjectStore, ObjectStoreExt};
4747
use std::any::Any;
4848
use std::sync::Arc;
4949

@@ -137,7 +137,7 @@ impl TableProvider for FileMetadata {
137137
/// An [`ExecutionPlan`] that scans object store metadata.
138138
pub struct FileMetadataExec {
139139
table_schema: SchemaRef,
140-
plan_properties: PlanProperties,
140+
plan_properties: Arc<PlanProperties>,
141141
projection: Option<Vec<usize>>,
142142
filters: Vec<Arc<dyn PhysicalExpr>>,
143143
limit: Option<usize>,
@@ -170,7 +170,7 @@ impl FileMetadataExec {
170170

171171
let exec = Self {
172172
table_schema,
173-
plan_properties,
173+
plan_properties: Arc::new(plan_properties),
174174
projection,
175175
filters,
176176
limit,
@@ -192,7 +192,7 @@ impl ExecutionPlan for FileMetadataExec {
192192
"FileMetadataExec"
193193
}
194194

195-
fn properties(&self) -> &PlanProperties {
195+
fn properties(&self) -> &Arc<PlanProperties> {
196196
&self.plan_properties
197197
}
198198

0 commit comments

Comments
 (0)