Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docs: Update SQL status page #6736

Merged
merged 5 commits into from
Jun 23, 2023
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 47 additions & 90 deletions docs/source/user-guide/sql/sql_status.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,106 +34,63 @@

## SQL Support

- [x] Projection
- [x] Filter (WHERE)
- [x] Filter post-aggregate (HAVING)
- [x] Limit
- [x] Aggregate
- [x] Common math functions
- [x] cast
- [x] try_cast
- [x] Projection (`SELECT`)
- [x] Filter (`WHERE`)
- [x] Filter post-aggregate (`HAVING`)
- [x] Sorting (`ORDER BY`)
- [x] Limit (`LIMIT`
- [x] Aggregate (`GROUP BY`)
- [x] cast /try_cast
- [x] [`VALUES` lists](https://www.postgresql.org/docs/current/queries-values.html)
- Postgres compatible String functions
- [x] ascii
- [x] bit_length
- [x] btrim
- [x] char_length
- [x] character_length
- [x] chr
- [x] concat
- [x] concat_ws
- [x] initcap
- [x] left
- [x] length
- [x] lpad
- [x] ltrim
- [x] octet_length
- [x] regexp_replace
- [x] repeat
- [x] replace
- [x] reverse
- [x] right
- [x] rpad
- [x] rtrim
- [x] split_part
- [x] starts_with
- [x] strpos
- [x] substr
- [x] to_hex
- [x] translate
- [x] trim
- Conditional functions
- [x] nullif
- [x] case
- [x] coalesce
- Approximation functions
- [x] approx_distinct
- [x] approx_median
- [x] approx_percentile_cont
- [x] approx_percentile_cont_with_weight
- Common date/time functions
- [ ] Basic date functions
- [ ] Basic time functions
- [x] Basic timestamp functions
- [x] [to_timestamp](./scalar_functions.md#to_timestamp)
- [x] [to_timestamp_millis](./scalar_functions.md#to_timestamp_millis)
- [x] [to_timestamp_micros](./scalar_functions.md#to_timestamp_micros)
- [x] [to_timestamp_seconds](./scalar_functions.md#to_timestamp_seconds)
- [x] [extract](./scalar_functions.md#extract)
- [x] [date_part](./scalar_functions.md#date_part)
- nested functions
- [x] Array of columns
- [x] [String Functions](./scalar_functions.md#string-functions)
- [x] [Conditional Functions](./scalar_functions.md#conditional-functions)
- [x] [Time and Date Functions](./scalar_functions.md#time-and-date-functions)
- [x] [Math Functions](./scalar_functions.md#math-functions)
- [x] [Aggregate Functions](./aggregate_functions.md) (`SUM`, `MEDIAN`, and many more)
- [x] Schema Queries
- [x] SHOW TABLES
- [x] SHOW COLUMNS FROM <table/view>
- [x] SHOW CREATE TABLE <view>
- [x] information_schema.{tables, columns, views}
- [ ] information_schema other views
- [x] Sorting
- [ ] Nested types
- [ ] Lists
- [x] `SHOW TABLES`
- [x] `SHOW COLUMNS FROM <table/view>`
- [x] `SHOW CREATE TABLE <view>`
- [x] Basic SQL [Information Schema](./information_schema.md) (`TABLES`, `VIEWS`, `COLUMNS`)
- [ ] Full SQL [Information Schema](./information_schema.md) support
- [x] Support for nested types (`ARRAY`/`LIST` and `STRUCT`)- see [Array Functions](./scalar_functions.md#array-functions)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure whether DF have fully supported it

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you are right that the support is only partial - I'll see if I can find some way to make this clearer

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this better reflects the current status:

Screenshot 2023-06-23 at 12 04 47 PM

Copy link
Contributor

@ozankabak ozankabak Jun 23, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think good JSON support is very important for Datafusion to get more traction in the general community. SQL2023 has some good stuff about this (see here for a good summary.).

While we are on the SQL support/ease-of-use topic, this DuckDB page is also a good list of desiderata for us (some of these we implemented already).

I plan to actively talk about/promote Datafusion in various venues once we get into a state where these things "just work".

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think good JSON support is very important for Datafusion to get more traction in the general community. SQL2023 has some good stuff about this (see here for a good summary.).

I agree.

While we are on the SQL support/ease-of-use topic, this DuckDB page is also a good list of desiderata for us (some of these we implemented already).

It would be great to file tickets about these features -- I have found clearly written tickets with a "good first issue" often attracts contributions. If you have a chance to file the tickets that would be awesome, otherwise I will try and find time to do so

I plan to actively talk about/promote Datafusion in various venues once we get into a state where these things "just work".

I think it is a balance -- part of the way we grow the DataFusion community (to get the resources to make it better) is to talk about it publically.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We will file tickets for these 👍

- [x] Nested types (`ARRAY`/`LIST` and `STRUCT`)- see [Array Functions](./scalar_functions.md#array-functions)
- [x] Subqueries
- [x] Common table expressions
- [x] Set Operations
- [x] UNION ALL
- [x] UNION
- [x] INTERSECT
- [x] INTERSECT ALL
- [x] EXCEPT
- [x] EXCEPT ALL
- [x] Joins
- [x] INNER JOIN
- [x] LEFT JOIN
- [x] RIGHT JOIN
- [x] FULL JOIN
- [x] CROSS JOIN
- [ ] Window
- [x] Empty window
- [x] Common window functions
- [x] Window with PARTITION BY clause
- [x] Window with ORDER BY clause
- [ ] Window with FILTER clause
- [ ] [Window with custom WINDOW FRAME](https://github.com/apache/arrow-datafusion/issues/361)
- [ ] UDF and UDAF for window functions
- [x] Common Table Expressions (CTE)
- [x] Set Operations (`UNION [ALL]`, `INTERSECT [ALL]`, `EXCEPT[ALL]`)
- [x] Joins (`INNER`, `LEFT`, `RIGHT`, `FULL`, `CROSS`)
- [x] Window Functions
- [x] Empty (`OVER()`)
- [x] Partitioning and ordering: (`OVER(PARTITION BY <..> ORDER BY <..>)`)
- [x] Custom Window (`ORDER BY time ROWS BETWEEN 2 PRECEDING AND 0 FOLLOWING)`)
- [x] User Defined Window and Aggregate Functions
- [x] Catalogs
- [x] Schemas (`CREATE / DROP SCHEMA`)
- [x] Tables (`CREATE / DROP TABLE`, `CREATE TABLE AS SELECT`)
- [ ] Data Insert
- [x] `INSERT INTO`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @alamb that is not very clear to me.
Do you mean DF supports SQL syntax to insert data into CSV file?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that is correct Here is an example:

(arrow_dev) alamb@MacBook-Pro-8:~/Software/arrow-site$ touch /tmp/foo.csv
(arrow_dev) alamb@MacBook-Pro-8:~/Software/arrow-site$ datafusion-cli
DataFusion CLI v26.0.0
❯ create external table foo (x int) stored as csv location '/tmp/foo.csv';
0 rows in set. Query took 0.004 seconds.
❯ insert into foo values (1), (2), (3);
+-------+
| count |
+-------+
| 3     |
+-------+
1 row in set. Query took 0.005 seconds.
❯
\q
(arrow_dev) alamb@MacBook-Pro-8:~/Software/arrow-site$ cat /tmp/foo.csv
1
2
3

The UX is somewhat awkward at the moment as it can only append into existing files (not create new ones). I have real hopes it will be improved

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh that is really cool, I want to make this happen for parquet asap. Will create a ticket and implement it. Should be straightfwd as we have parquetwriter

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❤️ -- I also think #5654 is very related (rather than having to define the table in order to add to it). See #6539 where I started the basics

- [ ] `COPY .. INTO ..`
- [x] CSV
- [ ] JSON
- [ ] Parquet
- [ ] Avro

## Runtime

- [x] Streaming Grouping
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure if there are other features to highlight in the RUNTIME

- [x] Streaming Window Evaluation
- [x] Memory limits enforced
- [x] Spilling (to disk) Sort
- [ ] Spilling (to disk) Grouping
- [ ] Spilling (to disk) Joins

## Data Sources

In addition to allowing arbitrary datasources via the `TableProvider`
trait, DataFusion includes built in support for the following formats:

- [x] CSV
- [x] Parquet primitive types
- [x] Parquet nested types
- [x] Parquet (for all primitive and nested types)
- [x] JSON
- [x] Avro
- [x] Arrow