{"id":"bd0d0ebb-e276-4a97-88ce-978586fe346b","task":"Chain Snowflake dynamic tables into a DAG using target_lag propagation","domain":"data-engineering","steps":["Create each dynamic table with CREATE DYNAMIC TABLE ... TARGET_LAG = '<n> seconds|minutes|hours|days' WAREHOUSE = <wh> AS <query>, or TARGET_LAG = DOWNSTREAM to opt out of an independent schedule.","For a DOWNSTREAM table, know that Snowflake refreshes it only as needed to satisfy the shortest target_lag among the tables that consume it — it has no schedule of its own.","Verify every terminal (leaf) table in the DAG uses an explicit numeric target_lag, not DOWNSTREAM, since a DOWNSTREAM table with no consumer never auto-refreshes and Snowflake gives no warning.","Leave REFRESH_MODE = AUTO (the default) unless you have a reason to force FULL or INCREMENTAL — AUTO resolves once at creation and is locked in, not re-evaluated as the query changes.","Check which mode was actually chosen with SHOW DYNAMIC TABLES and inspect the refresh_mode / refresh_mode_reason columns.","To change a locked-in refresh mode, CREATE OR REPLACE (or CREATE OR ALTER) the dynamic table — ALTER DYNAMIC TABLE cannot change it directly."],"gotchas":["The minimum target_lag is 60 seconds — dynamic tables cannot be chained at sub-minute latency.","A DOWNSTREAM table at the end of a chain with no consumer silently never refreshes; this is the most common DAG-authoring mistake with dynamic tables."],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"verified","url":"https://mcp.waymark.network/r/bd0d0ebb-e276-4a97-88ce-978586fe346b"}