sqlite-utils - CLI & Python utility functions for manipulating SQLite databases
sqlite-utils.datasette.io
sqlite-utils.datasette.io
I'm particularly proud of the `sqlite-utils memory` command, which lets you run joins across data from CSV and JSON files as a shell one-liner: https://simonwillison.net/2021/Jun/19/sqlite-utils-memory/
> The max(t1.date) and group by t1.state is a useful SQLite trick[0]: if you perform a group by and then ask for the max() of a value, the other columns returned from that table will be the columns for the row that contains that maximum value.
I had no idea that "bare columns" were an actual advertised feature of SQLite — I just assumed the bare column results were a happy accident (a consequence of SQLite's easy-going conventions) that seems to work (i.e. not throw an error) — but should otherwise be avoided, especially as it can't be depended on when migrating to stricter standards like pgsql or bigquery.
I'll think I'll continue to avoid it, but good to know that the seemingly correct-by-coincidence results are actually by intentional design.
- I point it to a bunch of JSON files on disk. They have similar schema but not exact (slight variations)
- I SQLite import them into one virtual table (I would rather not literally import them - think PostgreSQL JSON FDW)
- Then index certain fields so looking up records by certain fields is very fast (faster than having to "FTS" through all the files)
- Allow fuzzy text search on certain fields (say a field was company name and other fields were city, street and human names)
All the while (best case) not actually having to import the files into the DB (it's ok if the indices need to be rebuilt everytime)
Unless you're talking about 10+GBs of JSON I'd recommend importing them and seeing how far you get.
Once the JSON has been loaded into tables the other things you want to do should all be very feasible.
- Fuzzy text search can be done using SQLite trigram indexes https://www.sqlite.org/fts5.html#the_experimental_trigram_to...
- I'd split JSON columns that you want to index out into indexed regular columns - there are a bunch of tricks in sqlite-utils for doing that, see https://simonwillison.net/2021/Aug/6/sqlite-utils-convert/
Have you looked at unqlite?
Have you looked at unqlite?
I basically made a python script that open each of the json file and insert it into a sqlite inmemory db using sqlite-utils insert.
Then you have a regular sqlite db (in memory) that you can work it!
I've read your site, but could you offer a brief summary?
I've not worked with Jetbrains Datagrip.