sqlite_scanner
go-duckdb
Our great sponsors
sqlite_scanner | go-duckdb | |
---|---|---|
4 | 4 | |
184 | 488 | |
2.2% | - | |
8.3 | 8.2 | |
9 days ago | 14 days ago | |
C | Go | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
sqlite_scanner
-
DuckDB 0.7.0
It's not a dumb question at all. I'm pretty knowledgeable with DBs and still find it very difficult to understand how many of these front-end/pass-through engines work.
Checkout Postgres Foreign Data Wrappers. That might be the most well known approach for accessing one database through another. The Supabase team wrote an interesting piece about this recently.
https://supabase.com/blog/postgres-foreign-data-wrappers-rus...
You might also want to try out duckdb's approach to reading other DBs (or DB files). They talk about how they can "import" a sqlite DB in the above 0.7.0 announcement, but also have some other examples in their duckdblabs github project. Check out their "...-scanner" repos:
-
Notes on the SQLite DuckDB Paper
DuckDB can actually read SQLite or Postgres directly! In the SQLite case, something like Litestream plus DuckDB could work really well!
Also, with Pyarrow's help, DuckDB can already do this with Delta tables!
-
Friendlier SQL with DuckDB
Excellent question! I'll jump in - I am a part of the DuckDB team though, so if other users have thoughts it would be great to get other perspectives as well.
First things first - we really like quite a lot about the SQLite approach. DuckDB is similarly easy to install and is built without dependencies, just like SQLite. It also runs in the same process as your application just like SQLite does. SQLite is excellent as a transactional database - lots of very specific inserts, updates, and deletes (called OLTP workloads). DuckDB can also read directly out of SQLite files as well, so you can mix and match them! (https://github.com/duckdblabs/sqlitescanner)
DuckDB is much faster than SQLite when doing analytical queries (OLAP) like when calculating summaries or trends over time, or joining large tables together. It can use all of your CPU cores for sometimes ~100x speedup over SQLite.
DuckDB also has some enhancements with respect to data transfer in and out of it. It can natively read Pandas, R, and Julia dataframes, and can read parquet files directly also (meaning without inserting first!).
Does that help? Happy to add more details!
- DuckDB extension to read SQLite databases
go-duckdb
-
Embeddable Database for Go which have Date/Time type
DuckDB also has date functions and Go bindings
-
Range Joins in DuckDB
I've been beating my head trying to get duckdb to statically link into a Go program (I'm neither an expert with cgo nor ld). If anyone else has been able to do this I'd love to see your build steps.
https://github.com/marcboeker/go-duckdb produces a non-static binary by default.
-
Friendlier SQL with DuckDB
Here is a solved Github Issue related to CGO for the Go bindings! If you have another issue, please feel free to post it on their Github page!
-
Dsq: Commandline tool for running SQL queries against JSON, CSV, Parquet, etc.
Yeah frankly the q benchmark isn't the best even though dsq compares favorably in it. It isn't well documented and exercises a very limited amount of functionality and isn't very rigorous from what I can see. That said, the caching q does is likely very solid (and not something dsq does).
The biggest risk I think with octosql (and cube2222 is here somewhere to disagree with me if I'm wrong) is that they have their own entire SQL engine whereas textql, q and dsq use SQLite. But q is also in Python whereas textql, octosql, and dsq are in Go.
In the next few weeks I'll be posting some benchmarks that I hope are a little fairer (or at least well-documented and reproducible). Though of course it would be appropriate to have independent benchmarks too since I now have a dog in the fight.
On a tangent, once the go-duckdb binding [0] matures I'd love to offer duckdb as an alternative engine flag within dsq (and DataStation). Would be neat to see.
What are some alternatives?
ibis - the portable Python dataframe library
dsq - Commandline tool for running SQL queries against JSON, CSV, Excel, Parquet, and more.
react-native-quick-sqlite - Fast SQLite for react-native.
textql - Execute SQL against structured text like CSV or TSV
ClickBench - ClickBench: a Benchmark For Analytical Databases
roapi - Create full-fledged APIs for slowly moving datasets without writing a single line of code.
sqlitestudio - A free, open source, multi-platform SQLite database manager.
better-sqlite3 - The fastest and simplest library for SQLite3 in Node.js. [Moved to: https://github.com/WiseLibs/better-sqlite3]
duckdb - DuckDB is an in-process SQL OLAP Database Management System
postgres_scanner
budibase - Budibase is an open-source low code platform that helps you build internal tools in minutes 🚀
q - q - Run SQL directly on delimited files and multi-file sqlite databases