MeltanoLabs / MeltanoLabs/Singer-Most-Wanted
target-datalake-anywhere
Nobody has claimed this yet.
- Dominant language
- No language data
- Stars
- 5
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
Inspired by tap-spreadsheets-anywhere... but focused on the target side and some common "data lake" target requirements:
Generic File Target Capabilities
- Serialize data in one of many common interop formats, especially:
csv,parquet,jsonl, andjsonl.gz - Store data locally or leverage one of the mainstream blob storage providers: AWS S3, Azure ADLS, or Google Storage
- Support some kind of 'merge upsert' capability, if possible, or else communicate to the user that writes are in "append-mode" and won't override prior versions of records.
Advanced "Data Lake" Capabilities
And as this target matures, presumably it could add some extensions to handle common challenges for targets of the 'data lake' type:
- If locking is needed to protect data integrity, provide some mechanism to lock datasets while they are being written to.
- When locking is not possible, provide atomic 'swap' capability between old and new versions of datasets.
- Possible implementation:
- First write out all new dataset files without modifying the prior versions.
- Then as a single ACID action or "transaction", upload a manifest file which then points consumers to the updated datasets.
- Optionally purge older stale copied of datasets - but lazily after some time has passed and we are sure no consumers are still reading from them.
- Possible implementation:
- Especially when writing to file formats which are not inherently self describing (such as CSV), have an option to leave behind some metadata for the consuming process to leverage - such as a JSON schema describing the properties and schema of each "table".
Implementation
There are many ways to approach this, but a couple patterns seem worth suggesting here:
- As a base interop layer,
smart_openorPyFilesystemcould provide generic write capabilities tonnumber of clouds and data formats. - DuckDB is pip installable and could be leveraged for advanced merge upserts. Alternatively, a library such as
pandascould provide similar generic 'merge upsert' capabilities, with the caveat that all data must fit into memory on the runner.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The issue names no repository files, tests, or entry points. Start by examining the repository structure and existing target implementations, then narrow the broad storage, format, merge, locking, and metadata requirements to a defined first milestone with corresponding tests and acceptance criteria.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- aws, azure, google-cloud, pandas, python
- Domain
- cloud, data-engineering, databases
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100