Imports
Reuse field definitions across tables.
Overview
Imports allow you to define fields once and reuse them across multiple tables. This reduces duplication and ensures consistency.
How Imports Work
- Imports processed first - Fields from imported files are loaded
- Local fields merged - Local field definitions override or extend imports
- Circular dependency detection - Validated to prevent infinite loops
Basic Syntax
imports:
- path/to/shared_fields.yml
- ../common/dates.yml
Example
Shared Fields File
models/common/dates.yml:
fields:
- type: dimension
name: Order Date
data_type: date
grains:
- day
- week
- month
- quarter
- year
expression:
sql: order_date
Importing Table
models/sales/tbl.orders.yml:
name: Orders
physical_name: orders
datasource: warehouse
cost: 100
imports:
- ../common/dates.yml
fields:
- type: measure
name: Total Revenue
data_type: decimal
expression:
sql: sum(amount)
Overriding Imported Fields
Local fields can override imported fields:
imports:
- ../common/dates.yml
fields:
# Override imported Order Date with custom expression
- type: dimension
name: Order Date
data_type: date
expression:
sql: custom_order_date # Override imported field
Extending Imported Fields
Add additional fields alongside imports:
imports:
- ../common/dates.yml
fields:
# Imported fields are included
# Plus these additional fields:
- type: measure
name: Total Revenue
data_type: decimal
expression:
sql: sum(amount)
Path Resolution
Paths are relative to the importing file:
# From models/sales/tbl.orders.yml
imports:
- ../common/dates.yml # models/common/dates.yml
- ../inventory/products.yml # models/inventory/products.yml
- common/geo_dimensions.yml # models/sales/common/geo_dimensions.yml
Common Patterns
Shared Date Dimensions
models/common/dates.yml:
fields:
- type: dimension
name: Order Date
data_type: date
grains:
- day
- week
- month
- quarter
- year
expression:
sql: order_date
Multiple tables import:
# models/sales/tbl.orders.yml
imports:
- ../common/dates.yml
# models/inventory/tbl.stock.yml
imports:
- ../common/dates.yml
Shared Geography Fields
models/common/geo_dimensions.yml:
fields:
- type: dimension
name: Region
data_type: string
expression:
sql: region_name
- type: dimension
name: Country
data_type: string
expression:
sql: country_name
Best Practices
- Group related fields - Create logical groupings (dates, geography, etc.)
- Use descriptive paths - Clear file names and organization
- Document imports - Add comments explaining what's imported
- Avoid deep nesting - Keep import paths simple
- Test imports - Verify imported fields work correctly
Validation
The CLI validates:
- File existence - Imported files must exist
- Circular dependencies - Prevents infinite loops
- Field conflicts - Warns about duplicate field names
Troubleshooting
Import Not Found
Error: File not found: ../common/dates.yml
Solution:
- Check file path is correct (relative to importing file)
- Verify file exists
- Check file permissions
Circular Dependency
Error: Circular dependency detected
Solution:
- Review import chain
- Remove circular references
- Restructure shared fields
Next Steps
- Learn about tables
- Read about fields
- Explore table schema reference