This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-site.git
The following commit(s) were added to refs/heads/master by this push:
new 2383420 ARROW-15980: DataFusion-Contrib Announcement Blog Post (#201)
2383420 is described below
commit 2383420989a68c89cfb13b20edc63514eae1a1c8
Author: Matthew Turner <[email protected]>
AuthorDate: Mon Mar 21 15:37:09 2022 -0400
ARROW-15980: DataFusion-Contrib Announcement Blog Post (#201)
* python and s3
* Minor fixes
* Add placeholders
* S3 Select
* Details on more repos
* df tokomak
* Tokomak and tui
* datafusion-tui
* Review updates
* Introduce repos and add df streams
---
_posts/2022-03-21-datafusion-contrib.md | 182 ++++++++++++++++++++++++++++++++
1 file changed, 182 insertions(+)
diff --git a/_posts/2022-03-21-datafusion-contrib.md
b/_posts/2022-03-21-datafusion-contrib.md
new file mode 100644
index 0000000..877a224
--- /dev/null
+++ b/_posts/2022-03-21-datafusion-contrib.md
@@ -0,0 +1,182 @@
+---
+layout: post
+title: Introducing Apache Arrow DataFusion Contrib
+date: "2022-03-21 00:00:00"
+author: pmc
+categories: [release]
+---
+<!--
+{% comment %}
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to you under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+{% endcomment %}
+-->
+
+# Introduction
+
+Apache Arrow [DataFusion](https://arrow.apache.org/datafusion/) is an
extensible query execution framework, written in Rust, that uses [Apache
Arrow](https://arrow.apache.org) as its in-memory format.
+
+When you want to extend your Rust project with [SQL
support](https://arrow.apache.org/datafusion/user-guide/sql/sql_status.html), a
DataFrame API, or the ability to read and process Parquet, JSON, Avro or CSV
data, DataFusion is definitely worth checking out. DataFusion's pluggable
design makes creating extensions at various points particular easy to build.
+
+DataFusion's SQL, `DataFrame`, and manual `PlanBuilder` API let users access
a sophisticated query optimizer and execution engine capable of fast, resource
efficient, and parallel execution that takes optimal advantage of todays
multicore hardware. Being written in Rust means DataFusion can offer *both* the
safety of dynamic languages as well as the resource efficiency of a compiled
language.
+
+The DataFusion team is pleased to announce the creation of the
[DataFusion-Contrib](https://github.com/datafusion-contrib) GitHub organization
to support and accelerate other projects. While the core DataFusion library
remains under Apache governance, the contrib organization provides a more
flexible testing ground for new DataFusion features and a home for DataFusion
extensions. With this announcement, we are pleased to introduce the following
inaugural DataFusion-Contrib repositories.
+
+## DataFusion-Python
+
+This [project](https://github.com/datafusion-contrib/datafusion-python)
provides Python bindings to the core Rust implementation of DataFusion, which
allows users to:
+
+- Work with familiar SQL or DataFrame APIs to run queries in a safe,
multi-threaded environment, returning results in Python
+- Create User Defined Functions and User Defined Aggregate Functions for
complex operations
+- Pay no overhead to copy between Python and underlying Rust execution engine
(by way of Apache Arrow arrays)
+
+### Upcoming enhancements
+
+The team is focusing on exposing more features from the underlying Rust
implementation of DataFusion and improving documentation.
+
+### How to install
+
+From `pip`
+
+```bash
+pip install datafusion
+```
+
+Or
+
+```bash
+python -m pip install datafusion
+```
+
+## DataFusion-ObjectStore-S3
+
+This [crate](https://github.com/datafusion-contrib/datafusion-objectstore-s3)
provides an `ObjectStore` implementation for querying data stored in S3 or S3
compatible storage. This makes it almost as easy to query data that lives on S3
as lives in local files
+
+- Ability to create `S3FileSystem` to register as part of DataFusion
`ExecutionContext`
+- Register files or directories stored on S3 with `ctx.register_listing_table`
+
+### Upcoming enhancements
+
+The current priority is adding python bindings for `S3FileSystem`. After that
there will be async improvements as DataFusion adopts more of that
functionality and we are looking into S3 Select functionality.
+
+### How to Install
+
+Add the below to your `Cargo.toml` in your Rust Project with DataFusion.
+
+```toml
+datafusion-objectstore-s3 = "0.1.0"
+```
+
+## DataFusion-Substrait
+
+[Substrait](https://substrait.io/) is an emerging standard that provides a
cross-language serialization format for relational algebra (e.g. expressions
and query plans).
+
+This [crate](https://github.com/datafusion-contrib/datafusion-substrait)
provides a Substrait producer and consumer for DataFusion. A producer converts
a DataFusion logical plan into a Substrait protobuf and a consumer does the
reverse.
+
+Examples of how to use this crate can be found
[here](https://github.com/datafusion-contrib/datafusion-substrait/blob/main/src/lib.rs).
+
+### Potential Use Cases
+
+- Replace custom DataFusion protobuf serialization.
+- Make it easier to pass query plans over FFI boundaries, such as from Python
to Rust
+- Allow Apache Calcite query plans to be executed in DataFusion
+
+## DataFusion-BigTable
+
+This [crate](https://github.com/datafusion-contrib/datafusion-bigtable)
implements [Bigtable](https://cloud.google.com/bigtable) as a data source and
physical executor for DataFusion queries. It currently supports both UTF-8
string and 64-bit big-endian signed integers in Bigtable. From a SQL
perspective it supports both simple and composite row keys with `=`, `IN`, and
`BETWEEN` operators as well as projection pushdown. The physical execution for
queries is handled by this crate whil [...]
+
+### Upcoming Enhancements
+
+- Predicate pushdown
+ - Value range
+ - Value Regex
+ - Timestamp range
+- Multithreaded
+- Partition aware execution
+- Production ready
+
+### How to Install
+
+Add the below to your `Cargo.toml` in your Rust Project with DataFusion.
+
+```toml
+datafusion-bigtable = "0.1.0"
+```
+
+## DataFusion-HDFS
+
+This
[crate](https://github.com/datafusion-contrib/datafusion-objectstore-hdfs)
introduces `HadoopFileSystem` as a remote `ObjectStore` which provides the
ability to query HDFS files. For HDFS access the
[fs-hdfs](https://github.com/yahoNanJing/fs-hdfs) library is used.
+
+## DataFusion-Tokomak
+
+This [crate](https://github.com/datafusion-contrib/datafusion-tokomak)
provides an e-graph based DataFusion optimization framework based on the Rust
[egg](https://egraphs-good.github.io) library. An e-graph is a data structure
that powers the equality saturation optimization technique.
+
+As context, the optimizer framework within DataFusion is currently [under
review](https://github.com/apache/arrow-datafusion/issues/1972) with the
objective of implementing a more strategic long term solution that is more
efficient and simpler to develop.
+
+Some of the benefits of using `egg` within DataFusion are:
+
+- Implements optimized algorithms that are hard to match with manually written
optimization passes
+- Makes it easy and less verbose to add optimization rules
+- Plugin framework to add more complex optimizations
+- Egg does not depend on rule order and can lead to a higher level of
optimization by being able to apply multiple rules at the same time until it
converges
+- Allows for cost-based optimizations
+
+This is an exciting new area for DataFusion with lots of opportunity for
community involvement!
+
+## DataFusion-Tui
+
+[DataFusion-tui](https://github.com/datafusion-contrib/datafusion-tui) aka
`dft` provides a feature rich terminal application for using DataFusion. It
has drawn inspiration and several features from `datafusion-cli`. In contrast
to `datafusion-cli` the objective of this tool is to provide a light SQL IDE
experience for querying data with DataFusion. This includes features such as
the following which are currently implemented:
+
+- Tab Management to provide clean and structured organization of DataFusion
queries, results, `ExecutionContext` information, and logs
+ - SQL Editor
+ - Text editor for writing SQL queries
+ - Query History
+ - History of executed queries, their execution time, and the number of
returned rows
+ - `ExecutionContext` information
+ - Expose information on which physical optimizers are used and which
`ExecutionConfig` settings are set
+ - Logs
+ - Logs from `dft`, DataFusion, and any dependent libraries
+- Support for custom `ObjectStore`s
+ - S3
+- Preload DDL from `~/.datafusionrc` to enable having local "database"
available at startup
+
+### Upcoming Enhancements
+
+- SQL Editor
+ - Command to write query results to file
+ - Multiple SQL editor tabs
+- Expose more information from `ExecutionContext`
+- A help tab that provides information on functions
+- Query custom `TableProvider`s such as
[DeltaTable](https://github.com/delta-io/delta-rs) or
[BigTable](https://github.com/datafusion-contrib/datafusion-bigtable)
+
+## DataFusion-Streams
+
+[DataFusion-Stream](https://github.com/datafusion-contrib/datafusion-streams)
is a new testing ground for creating a `StreamProvider` in DataFusion that will
enable querying streaming data sources such as Apache Kafka. The
implementation for this feature is currently being designed and is under active
review. Once the design is finalized the trait and attendant data structures
will be added back to the core DataFusion crate.
+
+## DataFusion-Java
+
+This [project](https://github.com/datafusion-contrib/datafusion-java) created
an initial set of Java bindings to DataFusion. The project is currently in
maintenance mode and is looking for maintainers to drive future development.
+
+# How to Get Involved
+
+If you are interested in contributing to DataFusion, and learning about state
of
+the art query processing, we would love to have you join us on the journey! You
+can help by trying out DataFusion on some of your own data and projects and
let us know how it goes or contribute a PR with documentation, tests or code. A
list of open issues suitable for beginners is
[here](https://github.com/apache/arrow-datafusion/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
+
+The best way to find out about creating new extensions within
DataFusion-Contrib is reaching out on the `#arrow-rust` channel of the Apache
Software Foundation
[Slack](https://join.slack.com/t/the-asf/shared_invite/zt-vlfbf7ch-HkbNHiU_uDlcH_RvaHv9gQ)
workspace.
+
+You can also check out our new [Communication
Doc](https://arrow.apache.org/datafusion/community/communication.html) on more
ways to engage with the community.
+
+Links for each DataFusion-Contrib repository are provided above if you would
like to contribute to those.