All data in Materialize has a timestamp. Most sources, and all tables, created by Materialize use the system time (milliseconds since the Unix epoch) when the data were ingested as their timestamp. CDC sources require users to specify the timestamps of their data, but the timestamps might not match the timestamp format of the system time. For example, they could use seconds instead of milliseconds, or just be a counter that starts at 1 and increments.
We use the term timeline to describe the meaning of this timestamp number. All sources are assigned to a timeline. Materialize prevents joining sources from different timelines because it cannot guarantee that a meaningful result will ever be returned. Users can specify custom timelines if they need to join sources that are by default on different timelines.
- CDC sources default to their own individual timeline, and cannot be joined with any other source (even other CDC sources).
- All other sources (and all tables) use the system timeline.
When creating a source, users can specify a
timeline as a
This can be used to allow multiple CDC sources, or a CDC source and system time sources, to be joinable.
For example, to create two CDC sources that are joinable:
CREATE MATERIALIZED SOURCE source_1 FROM KAFKA BROKER 'broker' TOPIC 'topic-1' WITH (timeline='user') FORMAT AVRO USING SCHEMA 'schema-1' ENVELOPE MATERIALIZE; CREATE MATERIALIZED SOURCE source_2 FROM KAFKA BROKER 'broker' TOPIC 'topic-2' WITH (timeline='user') FORMAT AVRO USING SCHEMA 'schema-2' ENVELOPE MATERIALIZE;
CDC sources supports a
WITH option that moves it to the system timeline, making the CDC source joinable to tables and other system timeline sources.
Users must ensure that the
time field’s units are milliseconds since the Unix epoch.
Joining this source to other system time sources will result in query delays until the timestamps being received are close to wall-clock
CREATE MATERIALIZED SOURCE source_3 FROM KAFKA BROKER 'broker' TOPIC 'topic-3' WITH (epoch_ms_timeline=true) FORMAT AVRO USING SCHEMA 'schema' ENVELOPE MATERIALIZE