prosto VS dsq

Compare prosto vs dsq and see what are their differences.

prosto

Prosto is a data processing toolkit radically changing how data is processed by heavily relying on functions and operations with functions - an alternative to map-reduce and join-groupby (by asavinov)

dsq

Commandline tool for running SQL queries against JSON, CSV, Excel, Parquet, and more. (by multiprocessio)
Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
prosto dsq
9 20
89 3,619
- 4.4%
3.6 4.3
over 2 years ago 7 months ago
Python Go
MIT License GNU General Public License v3.0 or later
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
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.

prosto

Posts with mentions or reviews of prosto. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-06-27.
  • Show HN: PRQL 0.2 – Releasing a better SQL
    16 projects | news.ycombinator.com | 27 Jun 2022
    > Joins are what makes relational modeling interesting!

    It is the central part of RM which is difficult to model using other methods and which requires high expertise in non-trivial use cases. One alternative to how multiple tables can be analyzed without joins is proposed in the concept-oriented model [1] which relies on two equal modeling constructs: sets (like RM) and functions. In particular, it is implemented in the Prosto data processing toolkit [2] and its Column-SQL language. The idea is that links between tables are used instead of joins. A link is formally a function from one set to another set.

    [1] Joins vs. Links or Relational Join Considered Harmful https://www.researchgate.net/publication/301764816_Joins_vs_...

    [2] https://github.com/asavinov/prosto data processing toolkit radically changing how data is processed by heavily relying on functions and operations with functions - an alternative to map-reduce and join-groupby

  • Excel 2.0 – Is there a better visual data model than a grid of cells?
    5 projects | news.ycombinator.com | 31 Mar 2022
    One idea is to use columns instead of cells. Each column has a definition in terms of other columns which might also be defined in terms of other columns. If you change value(s) in some source column then these changes will propagate through the graph of these column definitions. Some fragments of this general idea were implemented in different systems, for example, Power BI or Airtable.

    This approach was formalized in the concept-oriented model of data which relies on two basic elements: mathematical functions and mathematical sets. In contrast, most traditional data models rely on only sets. Functions are implemented as columns. The main difficulty in any formalization is how to deal with columns in multiple tables.

    This approach was implemented in the Prosto data processing toolkit: https://github.com/asavinov/prosto

  • Show HN: Query any kind of data with SQL powered by Python
    6 projects | news.ycombinator.com | 25 Jan 2022
    Having Python expressions within a declarative language is a really good idea because we can combine low level logic of computations of values with high level logic of set processing.

    A similar approach is implemented in the Prosto data processing toolkit:

    https://github.com/asavinov/prosto

    Although Prosto is viewed as an alternative to Map-Reduce by relying on functions, it also supports Python User-Defined Functions in its Column-SQL:

  • No-Code Self-Service BI/Data Analytics Tool
    1 project | news.ycombinator.com | 13 Nov 2021
    Most of the self-service or no-code BI, ETL, data wrangling tools are am aware of (like airtable, fieldbook, rowshare, Power BI etc.) were thought of as a replacement for Excel: working with tables should be as easily as working with spreadsheets. This problem can be solved when defining columns within one table: ``ColumnA=ColumnB+ColumnC, ColumnD=ColumnAColumnE`` we get a graph of column computations* similar to the graph of cell dependencies in spreadsheets.

    Yet, the main problem is in working multiple tables: how can we define a column in one table in terms of columns in other tables? For example: ``Table1::ColumnA=FUNCTION(Table2::ColumnB, Table3::ColumnC)`` Different systems provided different answers to this question but all of them are highly specific and rather limited.

    Why it is difficult to define new columns in terms of other columns in other tables? Short answer is that working with columns is not the relational approach. The relational model is working with sets (rows of tables) and not with columns.

    One generic approach to working with columns in multiple tables is provided in the concept-oriented model of data which treats mathematical functions as first-class elements of the model. Previously it was implemented in a data wrangling tool called Data Commander. But them I decided to implement this model in the *Prosto* data processing toolkit which is an alternative to map-reduce and SQL:

    https://github.com/asavinov/prosto

    It defines data transformations as operations with columns in multiple tables. Since we use mathematical functions, no joins and no groupby operations are needed and this significantly simplifies and makes more natural the task of data transformations.

    Moreover, now it provides *Column-SQL* which makes it even easier to define new columns in terms of other columns:

    https://github.com/asavinov/prosto/blob/master/notebooks/col...

  • Show HN: Hamilton, a Microframework for Creating Dataframes
    6 projects | news.ycombinator.com | 8 Nov 2021
    Hamilton is more similar to the Prosto data processing toolkit which also relies on column operations defined via Python functions:

    https://github.com/asavinov/prosto

    However, Prosto allows for data processing via column operations in many tables (implemented as pandas data frames) by providing a column-oriented equivalents for joins and groupby (hence it has no joins and no groupbys which are known to be quite difficult and require high expertise).

    Prosto also provides Column-SQL which might be simpler and more natural in many use cases.

    The whole approach is based on the concept-oriented model of data which makes functions first-class elements of the model as opposed to having only sets in the relational model.

  • Against SQL
    8 projects | news.ycombinator.com | 10 Jul 2021
    One alternative to SQL (type of thinking) is Column-SQL [1] which is based on a new data model. This model is relies on two equal constructs: sets (tables) and functions (columns). It is opposed to the relational algebra which is based on only sets and set operations. One benefit of Column-SQL is that it does not use joins and group-by for connectivity and aggregation, respectively, which are known to be quite difficult to understand and error prone in use. Instead, many typical data processing patterns are implemented by defining new columns: link columns instead of join, and aggregate columns instead of group-by.

    More details about "Why functions and column-orientation" (as opposed to sets) can be found in [2]. Shortly, problems with set-orientation and SQL are because producing sets is not what we frequently need - we need new columns and not new table. And hence applying set operations is a kind of workaround due the absence of column operations.

    This approach is implemented in the Prosto data processing toolkit [0] and Column-SQL[1] is a syntactic way to define its operations.

    [0] https://github.com/asavinov/prosto Prosto is a data processing toolkit - an alternative to map-reduce and join-groupby

    [1] https://prosto.readthedocs.io/en/latest/text/column-sql.html Column-SQL (work in progress)

    [2] https://prosto.readthedocs.io/en/latest/text/why.html Why functions and column-orientation?

  • Functions matter – an alternative to SQL and map-reduce for data processing
    1 project | /r/datascience | 19 May 2021
  • NoSQL Data Modeling Techniques
    1 project | news.ycombinator.com | 10 Apr 2021
    > This is closer to the way that humans perceive the world — mapping between whatever aspect of external reality you are interested in and the data model is an order of magnitude easier than with relational databases.

    One approach to modeling data based on mappings (mathematical functions) is the concept-oriented model [1] implemented in [2]. Its main feature is that it gets rid of joins, groupby and map-reduce by manipulating data using operations with functions (mappings).

    > Everything is pre-joined — you don’t have to disassemble objects into normalised tables and reassemble them with joins.

    One old related general idea is to assume the existence of universal relation. Such an approach is referred to as the universal relation model (URM) [3, 4].

    [1] A. Savinov, Concept-oriented model: Modeling and processing data using functions, Eprint: arXiv:1911.07225 [cs.DB], 2019 https://www.researchgate.net/publication/337336089_Concept-o...

    [2] https://github.com/asavinov/prosto Prosto Data Processing Toolkit: No join-groupby, No map-reduce

    [3] https://en.wikipedia.org/wiki/Universal_relation_assumption

    [4] R. Fagin, A.O. Mendelzon and J.D. Ullman, A Simplified Universal Relation Assumption and Its Properties. ACM Trans. Database Syst., 7(3), 343-360 (1982).

  • Feature Processing in Go
    3 projects | news.ycombinator.com | 21 Dec 2020
    (Currently, it is not actively developed and the focus is moved to a similar project - https://github.com/asavinov/prosto - also focused on data preprocessing and feature engineering)

dsq

Posts with mentions or reviews of dsq. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-11-02.
  • Tracking SQLite Database Changes in Git
    7 projects | news.ycombinator.com | 2 Nov 2023
    You might want to look at tsv-utils, or a similar project: https://github.com/eBay/tsv-utils

    For the SQL part, but maybe a lot heavier, you can use one of the projects listed on this page: https://github.com/multiprocessio/dsq (No longer maintained, but has links to lots of other projects)

  • DuckDB: Querying JSON files as if they were tables
    9 projects | news.ycombinator.com | 3 Mar 2023
    Welcome to the gang! :)

    https://github.com/multiprocessio/dsq#comparisons

  • Ask HN: Programs that saved you 100 hours? (2022 edition)
    69 projects | news.ycombinator.com | 20 Dec 2022
  • Command-line data analytics made easy
    6 projects | news.ycombinator.com | 3 Nov 2022
    SPyQL is really cool and its design is very smart, with it being able to leverage normal Python functions!

    As far as similar tools go, I recommend taking a look at DataFusion[0], dsq[1], and OctoSQL[2].

    DataFusion is a very (very very) fast command-line SQL engine but with limited support for data formats.

    dsq is based on SQLite which means it has to load data into SQLite first, but then gives you the whole breath of SQLite, it also supports many data formats, but is slower at the same time.

    OctoSQL is faster, extensible through plugins, and supports incremental query execution, so you can i.e. calculate a running group by + count while tailing a log file. It also supports normal databases, not just file formats, so you can i.e. join with a Postgres table.

    [0]: https://github.com/apache/arrow-datafusion

    [1]: https://github.com/multiprocessio/dsq

    [2]: https://github.com/cube2222/octosql

    Disclaimer: Author of OctoSQL

  • Jq Internals: Backtracking
    10 projects | news.ycombinator.com | 5 Oct 2022
    > dsq registers go-sqlite3-stdlib so you get access to numerous statistics, url, math, string, and regexp functions that aren't part of the SQLite base. (https://github.com/multiprocessio/dsq#standard-library)

    Ah, I wondered if they rolled their own SQL parser, but no, I now see the sqlite.go in the repo and all is made clear

  • Run SQL on CSV, Parquet, JSON, Arrow, Unix Pipes and Google Sheet
    9 projects | news.ycombinator.com | 24 Sep 2022
    I am currently evaluating dsq and its partner desktop app DataStation. AIUI, the developer of DataStation realised that it would be useful to extract the underlying pieces into a standalone CLI, so they both support the same range of sources.

    dsq CLI - https://github.com/multiprocessio/dsq

  • multiprocessio / dsq :
    1 project | /r/golang | 1 Sep 2022
  • OctoSQL allows you to join data from different sources using SQL
    13 projects | news.ycombinator.com | 14 Jul 2022
    OctoSQL is an awesome project and Kuba has a lot of great experience to share from building this project I'm excited to learn from.

    And while building a custom database engine does allow you to do pretty quick queries, there are a few issues.

    First, the SQL implemented is nonstandard. As I was looking for documentation and it pointed me to `SELECT * FROM docs.functions fs`. I tried to count the number of functions but octosql crashed (a Go panic) when I ran `SELECT count(1) FROM docs.functions fs` and `SELECT count() FROM docs.functions fs` which is what I lazily do in standard SQL databases. (`SELECT count(fs.name) FROM docs.function fs` worked.)

    This kind of thing will keep happening because this project just doesn't have as much resources today as SQLite, Postgres, DuckDB, etc. It will support a limited subset of SQL.

    Second, the standard library seems pretty small. When I counted the builtin functions there were only 29. Now this is an easy thing to rectify over time but just noting about the state today.

    And third this project only has builtin support for querying CSV and JSON files. Again this could be easy to rectify over time but just mentioning the state today.

    octosql is a great project but there are also different ways to do the same thing.

    I build dsq [0] which runs all queries through SQLite so it avoids point 1. It has access to SQLite's standard builtin functions plus* a battery of extra statistic aggregation, string manipulation, url manipulation, date manipulation, hashing, and math functions custom built to help this kind of interactive querying developers commonly do [1].

    And dsq supports not just CSV and JSON but parquet, excel, ODS, ORC, YAML, TSV, and Apache and nginx logs.

    A downside to dsq is that it is slower for large files (say over 10GB) when you only want a few columns whereas octosql does better in some of those cases. I'm hoping to improve this over time by adding a SQL filtering frontend to dsq but in all cases dsq will ultimately use SQLite as the query engine.

    You can find more info about similar projects in octosql's Benchmark section but I also have a comparison section in dsq [2] and an extension of the octosql benchmark with different set of tools [3] including duckdb.

    Everyone should check out duckdb. :)

    [0] https://github.com/multiprocessio/dsq

    [1] https://github.com/multiprocessio/go-sqlite3-stdlib

    [2] https://github.com/multiprocessio/dsq#comparisons

    [3] https://github.com/multiprocessio/dsq#benchmark

  • GitHub Actions are down again
    2 projects | news.ycombinator.com | 29 Jun 2022
    What's annoying about this is that the PR doesn't even say it's trying to run tests. It says everything is passing and just doesn't list the actions.

    For a second I thought someone must have deleted the actions yaml files.

    This is a dangerous failure mode.

    https://github.com/multiprocessio/dsq/pull/82

  • Xlite: Query Excel, Open Document spreadsheets (.ods) as SQLite virtual tables
    6 projects | news.ycombinator.com | 25 Jun 2022
    This is a cool project! But if you query Excel and ODS files with dsq you get the same thing plus a growing standard library of functions that don't come built into SQLite such as best-effort date parsing, URL parsing/extraction, statistical aggregation functions, math functions, string and regex helpers, hashing functions and so on [1].

    [0] https://github.com/multiprocessio/dsq

    [1] https://github.com/multiprocessio/go-sqlite3-stdlib

What are some alternatives?

When comparing prosto and dsq you can also consider the following projects:

Preql - An interpreted relational query language that compiles to SQL.

go-duckdb - go-duckdb provides a database/sql driver for the DuckDB database engine.

mito - The mitosheet package, trymito.io, and other public Mito code.

q - q - Run SQL directly on delimited files and multi-file sqlite databases

rel8 - Hey! Hey! Can u rel8?

querycsv - QueryCSV enables you to load CSV files and manipulate them using SQL queries then after you finish you can export the new values to a CSV file

opaleye

octosql - OctoSQL is a query tool that allows you to join, analyse and transform data from multiple databases and file formats using SQL.

hamilton - A scalable general purpose micro-framework for defining dataflows. THIS REPOSITORY HAS BEEN MOVED TO www.github.com/dagworks-inc/hamilton

xlite - Query Excel spredsheets (.xlsx, .xls, .ods) using SQLite

Optimus - :truck: Agile Data Preparation Workflows made easy with Pandas, Dask, cuDF, Dask-cuDF, Vaex and PySpark

textql - Execute SQL against structured text like CSV or TSV