This guide provides detailed examples of different migration types. For the complete workflow overview, see Migrations & Planning.
Keep in mind that only the modules that you have enabled in your moose.config.toml will be included in your migrations.
[features]olap = truestreaming_engine = trueworkflows = trueinterface AnalyticsSchema { id: string; event_type: string; timestamp: Date; user_id: string; value: number;} export const analyticsTable = new OlapTable<AnalyticsSchema>("Analytics");Migration Result: Creates ClickHouse table Analytics with all fields from AnalyticsSchema
If you have not enabled the olap feature flag, you will not be able to create new OLAP tables.
[features]olap = trueexport const userEvents = new Stream<UserSchema>("UserEvents");export const systemEvents = new Stream<SystemEventSchema>("SystemEvents");Migration Result: Creates Redpanda topics UserEvents and SystemEvents
If you have not enabled the streaming_engine feature flag, you will not be able to create new streaming topics.
[features]streaming_engine = true// Beforeinterface UserSchema { id: string; name: string; email: string;} // Afterinterface UserSchema { id: string; name: string; email: string; age: number; created_at: Date; is_active: boolean;}Migration Result: Adds age, created_at, and is_active columns to existing table
// Beforeinterface UserSchema { id: string; name: string; email: string; age: number; deprecated_field: string; // Will be removed} // Afterinterface UserSchema { id: string; name: string; email: string; age: number;}Migration Result: Drops deprecated_field column (data permanently lost)
// Beforeinterface UserSchema { id: string; name: string; email: string; score: number; // Will change to string} // Afterinterface UserSchema { id: string; name: string; email: string; score: string; // Changed from number}Migration Result: Alters score column type (data converted if compatible)
// Beforeexport const usersTable = new OlapTable<UserSchema>("Users");export const analyticsTable = new OlapTable<AnalyticsSchema>("Analytics");export const deprecatedTable = new OlapTable<DeprecatedSchema>("Deprecated"); // After (remove deprecated table)export const usersTable = new OlapTable<UserSchema>("Users");export const analyticsTable = new OlapTable<AnalyticsSchema>("Analytics");Migration Result: Drops Deprecated table (all data lost)
There are two main ways to inspect your local infrastructure to see how your migrations are applied:
Run moose ls to see the current state of your infrastructure:
# Verify object definitions
moose lsYou can also connect directly to your local infrastructure to see the state of your infrastructure.
All credentials for your local infrastructure are located in your project config file (moose.config.toml).
# Using clickhouse-client
clickhouse-client --host localhost --port 18123 --user panda --password pandapass --database local
# Using connection string
clickhouse-client "clickhouse://panda:pandapass@localhost:18123/local"# Using kafka-console-consumer
kafka-console-consumer --bootstrap-server localhost:19092 --topic UserEvents --from-beginning
# Using kafka-console-producer
kafka-console-producer --bootstrap-server localhost:19092 --topic UserEventsNavigate to http://localhost:8080 to view the Temporal UI and see registered workflows.
Your dev server must be running to connect to your local infrastructure.
moose devOnly the modules that you have enabled in your moose.config.toml will be included in your migrations:
[features]olap = true # Required for OLAP Tables and Materialized Viewsstreaming_engine = true # Required for Streamsworkflows = true # Required for Workflows and Tasks