Ingest Dataset Tutorial¶
Complete walkthrough for ingesting a dataset with metadata, validation, indexing, and search.
Overview¶
This tutorial demonstrates the complete workflow for ingesting a dataset into Blacklake:
- Prepare Dataset - Create sample data
- Add Metadata - Describe the dataset semantically
- Validate Metadata - Ensure quality with SHACL
- Commit Changes - Version the dataset
- Index for Search - Make it discoverable
- Search Dataset - Find it later
Step 1: Prepare Dataset¶
Create a sample dataset:
# Create sample sales data
cat > sales-2024.csv << EOF
date,product,revenue,units
2024-01-15,Laptop,1500.00,1
2024-01-16,Mouse,25.00,2
2024-01-17,Keyboard,75.00,1
2024-01-18,Monitor,300.00,1
2024-01-19,Headphones,150.00,1
EOF
Step 2: Initialize Repository¶
# Initialize Blacklake repository
blacklake init \
--s3-endpoint http://localhost:9000 \
--s3-bucket blacklake-data \
--s3-access-key minioadmin \
--s3-secret-key minioadmin
# Initialize metadata system
blacklake meta init
Expected Output:
Step 3: Add Metadata¶
Add comprehensive metadata to the dataset:
blacklake meta add sales-2024.csv \
--title "Sales Data 2024" \
--description "Daily sales data for Q1 2024 including product, revenue, and units sold" \
--creator "Sales Team" \
--email "sales@company.com" \
--keywords "sales,revenue,products,2024,q1" \
--rights "Internal Use Only" \
--license "https://company.com/license"
Expected Output:
Step 4: Validate Metadata¶
Ensure metadata quality:
Expected Output:
Step 5: Stage and Commit¶
Expected Output:
Expected Output:
Step 6: Index for Search¶
Make the dataset discoverable:
Expected Output:
Step 7: Search Dataset¶
Find the dataset using search:
# Search for sales data
blacklake search "sales revenue"
# Search by year
blacklake search "2024"
# Search by product
blacklake search "laptop mouse"
Expected Output:
Searching for: sales revenue
Found 1 result:
- sales-2024.csv: Sales Data 2024 (Daily sales data for Q1 2024 including product, revenue, and units sold)
Step 8: View Metadata¶
Inspect the metadata:
Expected Output:
{
"@context": "../contexts/blacklake.context.jsonld",
"@graph": [
{
"id": "bl:obj:sha256:abc123...",
"type": ["Object", "dcterms:Dataset"],
"title": "Sales Data 2024",
"description": "Daily sales data for Q1 2024 including product, revenue, and units sold",
"creator": {
"id": "urn:uuid:...",
"type": "Person",
"name": "Sales Team",
"mbox": "mailto:sales@company.com"
},
"subject": ["sales", "revenue", "products", "2024", "q1"],
"rights": "Internal Use Only",
"license": {
"id": "https://company.com/license"
}
}
]
}
Advanced Workflow¶
Multiple Datasets¶
# Add multiple datasets
for dataset in sales-*.csv; do
blacklake meta add "$dataset" \
--title "$(basename "$dataset" .csv)" \
--creator "Sales Team" \
--email "sales@company.com"
blacklake add "$dataset"
done
blacklake commit -m "Add multiple sales datasets"
Branching Workflow¶
# Create feature branch
blacklake branch feature/new-analysis
# Switch to branch
blacklake checkout feature/new-analysis
# Add analysis results
blacklake meta add analysis-results.csv \
--title "Sales Analysis Results" \
--creator "Analytics Team"
blacklake add analysis-results.csv
blacklake commit -m "Add sales analysis results"
# Merge back to main
blacklake checkout main
blacklake merge feature/new-analysis
Validation Workflow¶
# Validate all metadata
blacklake meta validate --all
# Expected output
✓ Validated 5 files, 0 errors
Troubleshooting¶
Common Issues¶
Metadata Validation Fails
Search Returns No Results
# Re-index the data
blacklake index sales-2024.csv --force
# Check Solr connection
curl http://localhost:8983/solr/blacklake/admin/ping
Commit Fails
# Check repository status
blacklake status
# Check S3 connection
curl http://localhost:9000/minio/health/live
Next Steps¶
- Branch and Merge - Multi-branch data workflows
- Metadata Model - Understanding semantic metadata
- CLI Reference - Complete command documentation