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