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 all 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
143 changes: 53 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,69 @@

## 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
- [ ] Support for nested types (`ARRAY`/`LIST` and `STRUCT`. See [#2326](https://github.com/apache/arrow-datafusion/issues/2326) for details)
- [x] Read support
- [x] Write support
- [x] Field access (`col['field']` and [`col[1]`])
- [x] [Array Functions](./scalar_functions.md#array-functions)
- [ ] [Struct Functions](./scalar_functions.md#struct-functions)
Copy link
Contributor Author

@alamb alamb Jun 23, 2023

Choose a reason for hiding this comment

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

This link will work after #6754 is merged

- [x] `struct`
- [ ] [Postgres JSON operators](https://github.com/apache/arrow-datafusion/issues/6631) (`->`, `->>`, etc.)
- [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