Metadata and Filtering: Organizing Your AI Data 🔍
Master the art of organizing and finding your data using Dataloop's powerful metadata and filtering capabilities.
Project Setup ⚙️
Dataloop Login 🔐
import dtlpy as dl # Interactive login — opens a browser window if dl.token_expired(): dl.login()
Project and Dataset Setup
# Set your project and dataset names project_name = "onboarding-project" dataset_name = "onboarding-dataset" try: # Try to get existing project project = dl.projects.get(project_name=project_name) print(f"Project '{project_name}' already exists") except dl.exceptions.NotFound: project = dl.projects.create(project_name=project_name) # Create project if it doesn't exist print(f"Created project '{project_name}'") try: # Try to get existing dataset dataset = project.datasets.get(dataset_name=dataset_name) print(f"Dataset '{dataset_name}' already exists") except dl.exceptions.NotFound: # Create dataset if it doesn't exist dataset = project.datasets.create(dataset_name=dataset_name) print(f"Created dataset '{dataset_name}'")
Dataset Items Setup
# Ensure the dataset has items — if empty, upload sample files if dataset.items.list().items_count == 0: print("Dataset is empty. Please upload some items before proceeding.") print("You can upload items by running: dataset.items.upload(local_path='path/to/your/files')") else: print(f"Dataset has {dataset.items.list().items_count} items")
Working with Metadata 📝
1. Adding Metadata
# Print dataset items details dataset.items.list().print() # Print dataset items metadata for item in dataset.items.list().all(): print(item.metadata)
# Get first item id item = dataset.items.list().items[0] item_id = item.id
# Add metadata to the first item item = dataset.items.get(item_id=item_id) item.metadata['user'] = { 'photographer': 'John Doe', 'location': 'New York', 'camera': { 'model': 'Canon EOS R5', 'settings': { 'iso': 120, 'aperture': 'f/2.8', 'shutter_speed': '1/1000' } }, 'tags': ['outdoor', 'daylight'] } item = item.update() print(item.metadata['user'])
# Set the item local path local_image_path = '/path/to/image.jpg' # Add metadata during upload item = dataset.items.upload( local_path=local_image_path, item_metadata={ 'user': { 'project_id': 'PRJ-123', 'batch': 'B-001' } } ) for item in dataset.items.list().all(): print(item.metadata)
2. Updating Metadata
dataset.items.list().print()
# Update specific fields item.metadata['user']['status'] = 'reviewed' item.metadata['user']['last_modified'] = '2024-03-20' item = item.update() # Set the filter dir value to match a folder in your dataset (run dataset.items.list().print() to see available dirs) filters = dl.Filters(field='dir', values='/your-folder/') dataset.items.update( filters=filters, update_values={ 'user.status': 'processed', 'user.batch': 'B-001' } )
for item in dataset.items.list().all(): print(item.metadata)
Advanced Filtering 🎯
1. Basic Filters
dataset.items.list().print()
# Create filters filters = dl.Filters() # Filter by filename filters.add(field='filename', values='*.jpg') # Filter by directory — set this to a folder in your dataset filters.add(field='dir', values='/your-folder') # Filter by created date — adjust this date to match your data filters.add(field='createdAt', values='2026-05-23', operator=dl.FiltersOperations.GREATER_THAN) dataset.items.list(filters=filters).print()
2. Metadata Filters
for item in dataset.items.list().all(): print(item.metadata)
# Filter by metadata fields filters = dl.Filters() # Exact match filters.add(field='metadata.user.location', values='New York') # Larger than, smaller than filters.add(field='metadata.user.camera.settings.iso', values=100, operator=dl.FiltersOperations.GREATER_THAN_OR_EQUAL) dataset.items.list(filters=filters).print() for item in dataset.items.list(filters=filters).all(): print(item.metadata)
3. Complex Queries
for item in dataset.items.list().all(): print(item.metadata)
# Combining multiple filters filters = dl.Filters(resource=dl.FiltersResource.ITEM) # AND operation (default) filters.add(field='metadata.user.status', values='reviewed') filters.add(field='metadata.user.batch', values='B-001') # NOT EQUAL operation filters.add(field='metadata.user.status', values='rejected', operator=dl.FiltersOperations.NOT_EQUAL) print(filters.prepare()) dataset.items.list(filters=filters).print() for item in dataset.items.list(filters=filters).all(): print(item.metadata)
dataset.open_in_web()
4. Pagination and Sorting
# Get items with pagination filters = dl.Filters() pages = dataset.items.list( filters=filters, page_offset=0, page_size=50 ) # Sort results filters.sort_by(field='metadata.user.quality', value=dl.FiltersOrderByDirection.ASCENDING)
Filter Error Troubleshooting
# Filter by metadata fields filters = dl.Filters() filters.add(field='metadata.user.camera', values=True, operator=dl.FiltersOperations.EXISTS) dataset.items.list(filters=filters).print()
Filter Error Message:
"Cannot query on key 'your-key' - no items contain the specified key, or the key is unsearchable"Reason: This error occurs when the filter key is either invalid or not queryable.
Troubleshooting: The dataset schema defines all filterable keys, you can verify your filter by checking the schema. Check the dataset schema endpoint to see if your key is listed in the schema keys or unsearchablePaths.
Dataset Schema Endpoint:
https://gate.dataloop.ai/api/v1/datasets/<dataset_id>/schemaCheck for your key under:
- schema keys – filtered keys
- unsearchablePaths – unsearchable paths
Ready to explore task management? Let's move on to the next chapter! 🚀