| <!--- | |
| 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. | |
| --> | |
| # DataFusion Python Examples | |
| Some examples rely on data which can be downloaded from the following site: | |
| - https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page | |
| Here is a direct link to the file used in the examples: | |
| - https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2021-01.parquet | |
| ### Creating a SessionContext | |
| - [Creating a SessionContext](./create-context.py) | |
| ### Executing Queries with DataFusion | |
| - [Query a Parquet file using SQL](./sql-parquet.py) | |
| - [Query a Parquet file using the DataFrame API](./dataframe-parquet.py) | |
| - [Run a SQL query and store the results in a Pandas DataFrame](./sql-to-pandas.py) | |
| - [Query PyArrow Data](./query-pyarrow-data.py) | |
| - [Array operations: membership tests, array_agg patterns, array inspection](./array-operations.py) | |
| ### Running User-Defined Python Code | |
| - [Register a Python UDF with DataFusion](./python-udf.py) | |
| - [Register a Python UDAF with DataFusion](./python-udaf.py) | |
| ### Distributing DataFusion expressions | |
| - [Fan out distinct expressions to a multiprocessing pool](./multiprocessing_pickle_expr.py) | |
| - [Distribute expression evaluation across Ray actors](./ray_pickle_expr.py) | |
| ### Rust FFI Extensions | |
| - [Table providers, functions, and codecs](./datafusion-ffi-example/) | |
| - [Independent query planner and planner configuration](./datafusion-ffi-query-planner-example/) | |
| These two crates form a three-library interoperability example with | |
| `datafusion-python`. They are separate shared libraries so the tests exercise real FFI | |
| type and codec boundaries rather than same-library Rust downcasts. | |
| ### Substrait Support | |
| - [Serialize query plans using Substrait](./substrait.py) | |
| ### Executing SQL against DataFrame Libraries (Experimental) | |
| - [Executing SQL on Polars](./sql-on-polars.py) | |
| - [Executing SQL on Pandas](./sql-on-pandas.py) | |
| - [Executing SQL on cuDF](./sql-on-cudf.py) | |
| ## TPC-H Examples | |
| Within the subdirectory `tpch` there are 22 examples that reproduce queries in | |
| the TPC-H specification. These include realistic data that can be generated at | |
| arbitrary scale and allow the user to see use cases for a variety of data frame | |
| operations. | |
| In the list below we describe which new operations can be found in the examples. | |
| The queries are designed to be of increasing complexity, so it is recommended to | |
| review them in order. For brevity, the following list does not include operations | |
| found in previous examples. | |
| - [Convert CSV to Parquet](./tpch/convert_data_to_parquet.py) | |
| - Read from a CSV files where the delimiter is something other than a comma | |
| - Specify schema during CVS reading | |
| - Write to a parquet file | |
| - [Pricing Summary Report](./tpch/q01_pricing_summary_report.py) | |
| - Aggregation computing the maximum value, average, sum, and number of entries | |
| - Filter data by date and interval | |
| - Sorting | |
| - [Minimum Cost Supplier](./tpch/q02_minimum_cost_supplier.py) | |
| - Window operation to find minimum | |
| - Sorting in descending order | |
| - [Shipping Priority](./tpch/q03_shipping_priority.py) | |
| - [Order Priority Checking](./tpch/q04_order_priority_checking.py) | |
| - Aggregating multiple times in one data frame | |
| - [Local Supplier Volume](./tpch/q05_local_supplier_volume.py) | |
| - [Forecasting Revenue Change](./tpch/q06_forecasting_revenue_change.py) | |
| - Using collect and extracting values as a python object | |
| - [Volume Shipping](./tpch/q07_volume_shipping.py) | |
| - Finding multiple distinct and mutually exclusive values within one dataframe | |
| - Using `case` and `when` statements | |
| - [Market Share](./tpch/q08_market_share.py) | |
| - The operations in this query are similar to those in the prior examples, but | |
| it is a more complex example of using filters, joins, and aggregates | |
| - Using left outer joins | |
| - [Product Type Profit Measure](./tpch/q09_product_type_profit_measure.py) | |
| - Extract year from a date | |
| - [Returned Item Reporting](./tpch/q10_returned_item_reporting.py) | |
| - [Important Stock Identification](./tpch/q11_important_stock_identification.py) | |
| - [Shipping Modes and Order](./tpch/q12_ship_mode_order_priority.py) | |
| - Finding non-null values using a boolean operation in a filter | |
| - Case statement with default value | |
| - [Customer Distribution](./tpch/q13_customer_distribution.py) | |
| - [Promotion Effect](./tpch/q14_promotion_effect.py) | |
| - [Top Supplier](./tpch/q15_top_supplier.py) | |
| - [Parts/Supplier Relationship](./tpch/q16_part_supplier_relationship.py) | |
| - Using anti joins | |
| - Using regular expressions (regex) | |
| - Creating arrays of literal values | |
| - Determine if an element exists within an array | |
| - [Small-Quantity-Order Revenue](./tpch/q17_small_quantity_order.py) | |
| - [Large Volume Customer](./tpch/q18_large_volume_customer.py) | |
| - [Discounted Revenue](./tpch/q19_discounted_revenue.py) | |
| - Creating a user defined function (UDF) | |
| - Convert pyarrow Array to python values | |
| - Filtering based on a UDF | |
| - [Potential Part Promotion](./tpch/q20_potential_part_promotion.py) | |
| - Extracting part of a string using substr | |
| - [Suppliers Who Kept Orders Waiting](./tpch/q21_suppliers_kept_orders_waiting.py) | |
| - Using array aggregation | |
| - Determining the size of array elements | |
| - [Global Sales Opportunity](./tpch/q22_global_sales_opportunity.py) |