CouncilDataProject / CouncilDataProject/cdp-data

Add a `dump_to_sqlite` function to the library

Aperta
#13 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
enhancement
Lingua principale
Jupyter Notebook
Stelle
5
Fork
4
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

### Feature Description

Add a function to dump all data stored in a CDP Firestore database to a local `sqlite` file.

### Use Case

A lot more people know how to use SQL than our weird combination of Firestore + ORM in Python. And for tabular data (related to voting, legislation, people info, etc.), SQL is likely the best choice for quick and easy processing. There are also visualization engines that can read sqlite I believe??

### Solution

Add a function to the library (prototype fine for now) that takes in the CDP Instance name the user wants to create a CDP sqlite file for and the filepath / filename for where to dump the data to something like:

```python
def dump_to_sqlite(instance: str, path: Union[str, Path]):
```

That takes iteratively goes through each collection and requests data in batches from Firestore and writes in batches to the sqlite file.

### Notes

I assume the database models themselves should stay the same: [schema-diagram](https://councildataproject.org/cdp-backend/database_schema.html) & [model-docs](https://councildataproject.org/cdp-backend/cdp_backend.database.html#module-cdp_backend.database.models)

Since we use `FireO` for our "Firestore ORM" -- their docs on querying data (including batched) are likely important: https://octabyte.io/FireO/querying-data

An example of using the FireO models can be seen in [this notebook](https://github.com/CouncilDataProject/cdp-data/blob/main/notebooks/historical_vote_proportions.ipynb) or in our [source code](https://github.com/CouncilDataProject/cdp-data/blob/main/cdp_data/datasets.py#L338)

I say just use the [sqlite3](https://docs.python.org/3/library/sqlite3.html) library that ships with Python?

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia con cdp_data/datasets.py e l’esempio historical_vote_proportions.ipynb, quindi esamina la documentazione sulle query di FireO e la documentazione collegata del modello del database. Definisci come ogni Collection corrisponde ai modelli esistenti, quindi implementa dump_to_sqlite(instance, path) con letture e scritture in batch; il lavoro è completato quando tutti i dati dell’istanza CDP selezionata sono presenti nel file SQLite locale.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python, sqlite
Ambito
data, databases
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.