Views are read-time projections in ClickHouse. A static SELECT defines the view over one or more base tables or other views. Moose wraps ClickHouse VIEW with a simple View class in TypeScript or Python. You provide the view name, the SELECT, and the list of source tables/views so Moose can order DDL correctly during migrations.
Use View when you want a virtual read-time projection and don't need write-time transformation or a separate storage table. For write-time pipelines and backfills, use a Materialized View instead.
import { View, sql } from "@514labs/moose-lib";import { users } from "./Users";import { events } from "./Events"; export const activeUserEvents = new View( "active_user_events", sql` SELECT ${events.columns.id} AS event_id, ${users.columns.id} AS user_id, ${users.columns.name} AS user_name, ${events.columns.ts} AS ts FROM ${events} JOIN ${users} ON ${events.columns.user_id} = ${users.columns.id} WHERE ${users.columns.active} = 1 `, [events, users],);// new View(name, selectStatement, baseTables)new View( "view_name", sql`SELECT ... FROM ${someTable}`, [someTable, /* other tables or views */],);