Skip to main content

Generate analytics-ready datasets from DBML models

Project description

model2data

PyPI CI codecov License

model2data turns data models into analytics-ready datasets in seconds.

Given a DBML file, it generates synthetic but realistic data, a complete dbt project scaffold, and everything you need to start analyzing or testing data pipelines.


What problem does it solve?

Building analytics or testing dbt pipelines often requires realistic data, but using real data raises privacy concerns, and creating mock data manually is time-consuming. model2data automates this by generating synthetic datasets from your data model definitions, ensuring privacy-safe, deterministic, and relationship-preserving data for development and testing.


How it works (high level)

  1. Parse DBML: Reads your database schema from a DBML file, extracting tables, columns, types, and relationships.
  2. Generate Data: Uses Faker and custom logic to create realistic synthetic data, respecting foreign keys and constraints.
  3. Scaffold dbt Project: Creates a dbt project with seeds (CSV files), staging models, profiles, and tests, ready to run with DuckDB.

Installation

pip install model2data

Quick start

We provide an example Hacker News dataset in examples/hackernews.dbml.

Generate a project with synthetic data:

model2data generate --file examples/hackernews.dbml --rows 200 --seed 42

This creates a dbt_hackernews/ folder with your data and dbt setup.

Run dbt to load and transform the data:

cd dbt_hackernews
dbt deps
dbt seed
dbt run

Your analytics-ready dataset is now in DuckDB!


Generated dbt project structure

The generated dbt project includes:

dbt_{project_name}/
├── seeds/
│   └── {project_name}/
│       ├── table1.csv
│       └── table2.csv
├── models/
│   └── {project_name}/
│       └── staging/
│           ├── __sources.yml
│           ├── stg_table1.sql
│           ├── stg_table1.yml
│           └── ...
├── macros/
│   └── generate_schema_name.sql
├── dbt_project.yml
├── profiles.yml  # DuckDB config
└── {project_name}.duckdb
  • Seeds: CSV files with generated synthetic data.
  • Staging Models: Basic dbt models that load from seeds.
  • Sources & Tests: YAML configs defining sources and basic tests (not_null, unique).
  • Profiles: Pre-configured for DuckDB with schema handling.

Design decisions / non-goals

  • DuckDB Default: Chosen for its zero-config, file-based nature, making it easy to get started without database setup. Other adapters can be configured manually.
  • dbt Integration: Leverages dbt's transformation capabilities for a familiar workflow in analytics engineering.
  • Synthetic Data: Uses deterministic generation for reproducibility; not intended for production use or as a replacement for real data.
  • Non-goals: This is not a data migration tool, ETL pipeline, or real-time data generator. It focuses on static, synthetic datasets for testing and prototyping.

Limitations

  • Supports basic DBML features; complex constraints or advanced SQL types may not be fully handled.
  • Synthetic data generation is heuristic-based and may not perfectly mimic real-world distributions or edge cases.
  • Currently optimized for DuckDB; other databases require manual profile adjustments.
  • No support for incremental models or advanced dbt features in generated projects.

Roadmap

  • Support for additional database adapters (e.g., Snowflake, BigQuery).
  • Enhanced data type handling and custom generators.
  • Integration with more dbt features like incremental models.
  • Web-based DBML editor and data preview.

Contributing

We welcome contributions!

  • Open issues for bugs or feature requests.
  • Submit PRs to add new DBML examples, custom data generators, or improvements.
  • Ensure all new features include tests if possible.

See CONTRIBUTING.md for detailed guidelines.

Code of Conduct

Please read our Code of Conduct to understand our community standards.


License

MIT License. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

model2data-0.1.1.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

model2data-0.1.1-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file model2data-0.1.1.tar.gz.

File metadata

  • Download URL: model2data-0.1.1.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for model2data-0.1.1.tar.gz
Algorithm Hash digest
SHA256 522ee96714c6cd8dcdb4e88b3565327a8438f5451b01db56e0391404fd1da12c
MD5 464ccedf7f95ba260d28fc1031556a12
BLAKE2b-256 98babbc7a3a92ef39aa5b44539f0a0b7ac675a38dd667fbc717db35729289967

See more details on using hashes here.

File details

Details for the file model2data-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: model2data-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for model2data-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 aee270776e9a601b2e245e3e7fb6d26d323efd8a13d65f32bbfa072bbf72bc1b
MD5 468cc4443db5957617fa5648008ce65c
BLAKE2b-256 3249669947a00d2e58a60fbf7af0e1e05ae3866d5a2ff1a7f0b2353014986e87

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page