Problem
Adding custom datasets to M4 currently requires understanding technical concepts that create friction for clinical researchers:
- Manual JSON authoring - Users must create
m4_data/datasets/*.json with correct field names
- Non-intuitive schema mapping - The relationship between directories (
hosp/) and schemas (mimiciv_hosp) isn't obvious
- No auto-discovery - Even with data files ready, users must manually configure the dataset definition
- Silent failures - Missing or incorrect
schema_mapping fails at query time with unclear errors
Current Flow (Custom Dataset)
# 1. Create JSON definition manually
cat > m4_data/datasets/my-dataset.json << 'JSON'
{
"name": "my-dataset",
"description": "My hospital data",
"modalities": ["TABULAR"],
"subdirectories_to_scan": ["core", "labs"],
"default_duckdb_filename": "my_dataset.duckdb",
"primary_verification_table": "core.patients",
"schema_mapping": {
"core": "my_core",
"labs": "my_labs"
}
}
JSON
# 2. Place files in correct structure
# 3. Run init
m4 init my-dataset
Proposed Simplifications
Option 1: Convention-Based Auto-Discovery
m4 init --from ./my_hospital_data/
- Auto-detect directories → schemas (identity mapping by default)
- Auto-detect CSV/Parquet files → tables
- Infer
primary_verification_table from first table found
- No JSON required for simple cases
Option 2: Interactive Wizard
m4 init --wizard
# Where is your data? [./data/]
# Found directories: core/, labs/, notes/
# Map "core" to schema name? [core]
# Primary table for verification? [core.patients]
# Generate dataset definition? [Y/n]
Option 3: Direct Database/Directory Init
m4 init my-data.duckdb # Point to existing DuckDB file
m4 init ./parquet/ # Auto-discover from Parquet directory
Option 4: Simplify DatasetDefinition Defaults
schema_mapping defaults to identity (directory name = schema name)
subdirectories_to_scan auto-detected if not specified
primary_verification_table auto-selected from first schema/table
Success Criteria
A clinical researcher with Parquet files in a directory should be able to start querying with minimal commands and zero JSON authoring.
Related Files
src/m4/core/datasets.py - DatasetDefinition, DatasetRegistry
src/m4/cli.py - CLI commands including init
src/m4/core/backends/duckdb.py - DuckDB initialization logic
Problem
Adding custom datasets to M4 currently requires understanding technical concepts that create friction for clinical researchers:
m4_data/datasets/*.jsonwith correct field nameshosp/) and schemas (mimiciv_hosp) isn't obviousschema_mappingfails at query time with unclear errorsCurrent Flow (Custom Dataset)
Proposed Simplifications
Option 1: Convention-Based Auto-Discovery
primary_verification_tablefrom first table foundOption 2: Interactive Wizard
Option 3: Direct Database/Directory Init
Option 4: Simplify DatasetDefinition Defaults
schema_mappingdefaults to identity (directory name = schema name)subdirectories_to_scanauto-detected if not specifiedprimary_verification_tableauto-selected from first schema/tableSuccess Criteria
A clinical researcher with Parquet files in a directory should be able to start querying with minimal commands and zero JSON authoring.
Related Files
src/m4/core/datasets.py- DatasetDefinition, DatasetRegistrysrc/m4/cli.py- CLI commands includinginitsrc/m4/core/backends/duckdb.py- DuckDB initialization logic