1 // Licensed to the Apache Software Foundation (ASF) under one
2 // or more contributor license agreements. See the NOTICE file
3 // distributed with this work for additional information
4 // regarding copyright ownership. The ASF licenses this file
5 // to you under the Apache License, Version 2.0 (the
6 // "License"); you may not use this file except in compliance
7 // with the License. You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing,
12 // software distributed under the License is distributed on an
13 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 // KIND, either express or implied. See the License for the
15 // specific language governing permissions and limitations
16 // under the License.
17
18 use arrow::util::pretty;
19 use datafusion::error::Result;
20 use datafusion::execution::context::ExecutionContext;
21
22 /// This example demonstrates executing a simple query against an Arrow data source (Parquet) and
23 /// fetching results
main() -> Result<()>24 fn main() -> Result<()> {
25 // create local execution context
26 let mut ctx = ExecutionContext::new();
27
28 let testdata =
29 std::env::var("PARQUET_TEST_DATA").expect("PARQUET_TEST_DATA not defined");
30
31 // register parquet file with the execution context
32 ctx.register_parquet(
33 "alltypes_plain",
34 &format!("{}/alltypes_plain.parquet", testdata),
35 )?;
36
37 // simple selection
38 let sql = "SELECT int_col, double_col, CAST(date_string_col as VARCHAR) FROM alltypes_plain WHERE id > 1 AND tinyint_col < double_col";
39
40 // create the query plan
41 let plan = ctx.create_logical_plan(&sql)?;
42 let plan = ctx.optimize(&plan)?;
43 let plan = ctx.create_physical_plan(&plan, 1024 * 1024)?;
44
45 // execute the query
46 let results = ctx.collect(plan.as_ref())?;
47
48 // print the results
49 pretty::print_batches(&results)?;
50
51 Ok(())
52 }
53