What you will be able to do
- Choose the right monitoring surface (SHOW command, Information Schema function, Account Usage view, event table) for a given retention and detail requirement
- Inspect task runs in Snowsight and SQL, and configure push notifications for task failures
- Design alerts on a schedule or on new data, and know their restrictions and compute options
- Diagnose dynamic table freshness and refresh failures
- Enable and query Snowpipe Streaming telemetry in an event table
- Explain how stream offsets behave, and where data metric function results land
Key concept
The event table as the pipeline's monitoring sink — Many pipeline components, including task runs, dynamic table refreshes, Snowpipe Streaming ingestion and scheduled data metric functions, write telemetry or results into event tables that you query with SQL. Alerts and dashboards are built on top of that data, so automated pipeline monitoring usually means querying an event table and acting on what it shows.
1.The monitoring ladder: snapshot, recent history, long history, events
A continuous pipeline has no single moment when someone watches it run. Tasks fire on schedules, dynamic tables refresh to meet a target lag, and Snowpipe Streaming commits rows from channels. Monitoring it means picking the Snowflake surface that holds the right information for the right length of time.
The choice is clearest for dynamic tables, and the same pattern repeats for other objects. A SHOW command gives a current snapshot with no history. Information Schema table functions give per-run detail for recent activity. Account Usage views keep a long history for trend analysis. An event table combined with an alert is how you get automated failure notifications instead of running queries by hand. Retention is what separates the middle two: a question about the last 30 days cannot be answered from a source that keeps only 7.
| Surface | Best for | Data retention |
|---|---|---|
| SHOW DYNAMIC TABLES | Quick status checks, viewing refresh mode and warehouse | Current snapshot |
| INFORMATION_SCHEMA.DYNAMIC_TABLES() | Fleet-level health, lag metrics, last refresh outcome | 7 days |
| INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY() | Per-refresh diagnostics: state, error, duration, trigger | 7 days |
| DYNAMIC_TABLE_REFRESH_HISTORY Account Usage view | Historical trend analysis beyond 7 days | 365 days |
| INFORMATION_SCHEMA.DYNAMIC_TABLE_GRAPH_HISTORY() | Pipeline dependency snapshots and topology changes | 7 days |
| Event table + alerts | Automated failure notifications | Configurable |
Checkpoint 1 of 11· Check yourself
An engineer needs to chart how often each dynamic table refresh failed over the past quarter. Which surface fits?
A quarter is longer than the 7 days the Information Schema functions keep. The Account Usage view keeps 365 days, and SHOW is only a current snapshot.
“For automated alerting on refresh failures, set up an event table alert. For historical analysis beyond 7 days, use the Account Usage view.”Source: docs.snowflake.com
Sources1
2.Tasks: run history in Snowsight and SQL
Tasks are scheduled SQL, so the first thing to monitor is whether each run succeeded. Snowsight shows this without any SQL. Go to Catalog » Explorer, open the database and schema, select Tasks, and choose a task. The task page has Graph and Run History tabs. The Graph tab shows the root task, its dependent tasks and any finalizer task. Select a node to see its predecessors, warehouse and owning role. The Run History tab lists past executions, and you can retry failed tasks from Snowsight.
On this per-task page, history is only available if the task has run in the last 7 days, so a task that last ran longer ago shows nothing there. For longer history, use SQL.
There are three TASK_HISTORY surfaces in SQL. The Account Usage view retrieves task history for the last 365 days, with latency of up to 45 minutes. The Organization Usage view covers the accounts in an organization, is available only in the organization account, and can lag by up to 180 minutes. The Information Schema TASK_HISTORY table function returns executions from the past seven days, or the next scheduled execution within the next eight days. It returns at most 10,000 rows, set by RESULT_LIMIT (default 100), so filter by task name, database, schema or a scheduled-time range.
The views record each completed run with a STATE of SUCCEEDED, FAILED, CANCELLED or SKIPPED. A timed-out run always appears as FAILED. The views do not include runs that are still scheduled or executing. For those, query the TASK_HISTORY table function in the Information Schema.
To find out *who* ran a task, use QUERY_HISTORY. A task that does not run as an actual user shows the user as SYSTEM.
Repeated failures also change the task's state. SUSPEND_TASK_AFTER_NUM_FAILURES (default 10) suspends a standalone task, or the root of a task graph, after that many consecutive failed runs. Runs that were skipped or canceled, or that failed because of a system error, do not count toward that number. So if a task stops running without warning, check whether it was auto-suspended before you assume the scheduler is broken.
Tasks can run on serverless compute instead of a warehouse. A task created without a warehouse, like the notification example in the next section, is a serverless task. For a serverless task, the TARGET_COMPLETION_INTERVAL property is used to determine the size of the compute resources. It is optional for serverless tasks and required for serverless triggered tasks. SUSPEND_TASK_AFTER_NUM_FAILURES applies to tasks on either serverless or warehouse compute.
Checkpoint 2 of 11· Check yourself
A monitoring query against the TASK_HISTORY view shows no row for a task run that started two minutes ago and is still running. Why?
The view's STATE column covers completed runs only. Runs that are scheduled or executing come from the Information Schema table function.
“To retrieve the task history details for runs in a scheduled or executing state, query the TASK_HISTORY table function in the Information Schema.”Source: docs.snowflake.com
Checkpoint 3 of 11· Exam question
A pipeline includes a small task that runs a lightweight UPDATE against a dimension table every 5 minutes. Query load varies significantly across days, and the team does not want to size, monitor, or manually resize a dedicated warehouse just for this one task. Which compute model best fits this requirement?
Correct answer: A — Configure the task without a WAREHOUSE parameter so it runs as a serverless task, letting Snowflake automatically size compute within the configured minimum and maximum statement-size bounds each time it runs
- A. Correct: omitting `WAREHOUSE` makes the task serverless, and Snowflake dynamically sizes compute for each run within the configured minimum and maximum statement-size bounds based on analysis of recent executions, removing the need to manually manage warehouse sizing for a variable, lightweight workload.
- B. Incorrect: pointing a tiny periodic update at the account's largest multi-cluster warehouse wastes credits on unnecessary capacity for a lightweight statement, and it also couples this task's cost and contention to whatever other larger workloads share that warehouse.
- C. Incorrect: provisioning a dedicated XXLARGE warehouse and manually tuning its size over weeks is exactly the manual sizing effort the team wants to avoid, and an XXLARGE warehouse is vastly oversized for a small periodic dimension-table update.
- D. Incorrect: multi-cluster scaling adds parallel clusters to handle concurrent queuing on a warehouse, it does not right-size compute for a single lightweight statement, so this still leaves the team responsible for choosing and monitoring a base warehouse size.
3.Notifications: pushing task failures to a cloud message service
Checking run history is pull-based: someone has to look. Task notifications are push-based. Snowflake publishes a message when a task errors, or when a task graph finishes successfully, so downstream systems can react without querying Snowflake.
The mechanism is a notification integration object that connects Snowflake to a cloud queue: Amazon SNS, Microsoft Azure Event Grid or Google Pub/Sub. Four rules come up repeatedly:
- Root task only. You set ERROR_INTEGRATION on the root task of a graph, and failures in child tasks go to the root task's integration.
- Same cloud. Cross-cloud delivery is not available, so the queue must be on the cloud platform that hosts your account.
- Not email or webhook. Those integration types cannot carry task error notifications.
- At-least-once delivery. Consumers may receive duplicate messages and must handle them.
Tasks with TASK_AUTO_RETRY_ATTEMPTS above 0 send a notification for every failed run, so one underlying problem can produce several messages. A retried run is visible in task history: its SCHEDULED_FROM value is AUTOMATIC RETRY and ATTEMPT_NUMBER, which is initially one, counts the attempts. Failed runs also count toward SUSPEND_TASK_AFTER_NUM_FAILURES, which suspends the task automatically after that many consecutive failures. To audit what was sent, query the NOTIFICATION_HISTORY table function. The message payload identifies the task and its errors, and it arrives as a string that you must parse into JSON.
Checkpoint 4 of 11· Fill the gap
Complete this serverless task so that failures are published through the notification integration.
CREATE TASK mytask
SCHEDULE = '5 MINUTE'
? = my_notification_int
AS
INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);ERROR_INTEGRATION names the notification integration for failure messages. SUCCESS_INTEGRATION is for success notifications, and LOG_LEVEL controls event-table logging.
Source: docs.snowflake.comCheckpoint 5 of 11· Exam question
An hourly task occasionally fails because an upstream API-based external function times out for a few seconds during peak load, and the failure is almost always transient. The team wants the task to automatically retry a failed run a few times before giving up, but they also want the task to stop scheduling new runs altogether if it fails many times in a row so it does not keep burning credits on a genuinely broken pipeline. Which combination of settings addresses both goals?
Correct answer: A — Set `TASK_AUTO_RETRY_ATTEMPTS` to a small positive number so transient failures are retried automatically, and separately set `SUSPEND_TASK_AFTER_NUM_FAILURES` so the task suspends itself after repeated consecutive failures
- A. Correct: `TASK_AUTO_RETRY_ATTEMPTS` makes Snowflake automatically retry a failed run a configured number of times, which absorbs transient timeouts, while `SUSPEND_TASK_AFTER_NUM_FAILURES` independently stops the task from scheduling further runs after repeated consecutive failures, together covering both stated goals.
- B. Incorrect: suspending after a single failure treats every transient timeout the same as a genuine break and forces manual intervention on every occurrence, which defeats the goal of automatically absorbing short-lived, self-resolving errors without paging someone.
- C. Incorrect: SQL exception handling that swallows errors hides failures from `TASK_HISTORY` and downstream monitoring entirely, so genuinely broken pipeline logic would keep running silently instead of ever triggering the desired stop-after-repeated-failures behavior.
- D. Incorrect: shrinking the schedule interval changes how often the task is triggered on its normal cadence, it does not add retry logic to a single failed run or add any mechanism for suspending after repeated failures, so both stated goals remain unmet.
4.Alerts: a condition, an action, and a schedule
Notifications cover task errors. For any other condition you can express in SQL, such as too many failed runs in the last hour, credit consumption rising, or rows breaking a business rule, Snowflake provides alerts. An alert is a schema-level object that combines three things: a condition, an action to take when the condition is met (for example, sending an email or writing to a table), and when to evaluate it.
Alerts come in two kinds:
| Property | Alert on a schedule | Alert on new data |
|---|---|---|
| When it runs | Every n minutes or on a cron expression | Whenever new rows are inserted into the table or view |
| Rows evaluated | All of the data | Only the newly inserted rows |
| Condition restrictions | None of the new-data restrictions | One table, view or event table; no CTEs, DML, stored procedure calls or joins; change tracking must be enabled |
| EXECUTE ALERT | Supported | Cannot be used |
An alert on new data fits event-driven monitoring. Dynamic table refreshes and task executions write events to the event table, so an alert on new data against that table fires when an error event arrives instead of waiting for the next fixed interval. Iceberg tables cannot be the source, even with change tracking enabled.
An alert needs compute. A serverless alert lets Snowflake size the compute, up to the equivalent of an XXLARGE warehouse, and its usage appears in SERVERLESS_ALERT_HISTORY. Alternatively, you can name a virtual warehouse. For new data that arrives infrequently, choose serverless: with a warehouse, even a simple email action incurs at least one minute of warehouse cost.
To create an alert, a role needs EXECUTE ALERT on the account, which only ACCOUNTADMIN can grant. It also needs either EXECUTE MANAGED ALERT (for serverless) or USAGE on the warehouse, plus USAGE and CREATE ALERT on the schema. An alert on new data also needs SELECT on the source.
Checkpoint 6 of 11· Check yourself
A team wants an alert to evaluate only rows newly written to a refresh-error log table. Which design satisfies the documented requirements?
An alert on new data evaluates only newly inserted rows and requires change tracking on its single source. Joins and CTEs are not allowed, and EXECUTE ALERT cannot run this kind of alert.
“If you want to evaluate a condition on newly inserted rows, use an alert on new data”Source: docs.snowflake.com
Sources11
5.Dynamic tables: freshness and refresh failures
For a dynamic table, monitoring asks two questions: is the table fresh enough, and did the last refresh succeed? Viewing a dynamic table's metadata requires MONITOR or OWNERSHIP on it.
SHOW DYNAMIC TABLES is the only source for refresh_mode, refresh_mode_reason and warehouse. For freshness across many tables at once, use the DYNAMIC_TABLES function:
SELECT
name,
database_name,
schema_name,
scheduling_state,
last_completed_refresh_state,
target_lag_sec,
time_within_target_lag_ratio,
maximum_lag_sec
FROM
TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLES())
ORDER BY
name;The key column is time_within_target_lag_ratio. A value below 0.90 means the table misses its freshness target most of the time. When that happens, look at refresh history and consider changing the target lag or the warehouse size.
DYNAMIC_TABLE_REFRESH_HISTORY returns one row per refresh, with its state, error code and message, duration and trigger. One pattern matters for diagnosis: when an upstream dynamic table fails, its downstream tables report UPSTREAM_FAILED with the message "Skipped refreshing because an input dynamic table failed." Fix the first FAILED table in the chain, not the tables that report UPSTREAM_FAILED.
DYNAMIC_TABLE_GRAPH_HISTORY records the dependency graph over time. Each property change, such as a new target lag, adds a row with a new valid_from. The labels differ between commands: SHOW DYNAMIC TABLES reports RUNNING where the graph function reports ACTIVE, and both mean the same scheduling state.
Checkpoint 7 of 11· Fill the gap
Complete the query so it returns only failed refreshes.
SELECT
name,
state,
state_code,
state_message,
data_timestamp
FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY(
NAME_PREFIX => 'MY_DB.MY_SCHEMA',
? => TRUE
))
ORDER BY data_timestamp DESC;The documented argument for filtering to failed refreshes is ERROR_ONLY => TRUE.
Source: docs.snowflake.comSources1
6.Snowpipe Streaming: telemetry in the event table
Snowpipe Streaming has two monitoring sides. Server-side, Snowflake writes ingestion telemetry to an event table. Client-side, you watch the SDK with Prometheus and logs. Event-table telemetry requires a pipeline on the high-performance architecture and an active event table. The default is SNOWFLAKE.TELEMETRY.EVENTS, which SNOWFLAKE.EVENTS_VIEWER holders read through EVENTS_VIEW. If both a database-level and an account-level destination are set, the database-level one wins. Check with SHOW PARAMETERS LIKE 'EVENT_TABLE'.
An active event table does not, on its own, collect anything. LOG_EVENT_LEVEL defaults to OFF. At INFO all five event types are recorded, at ERROR only row and channel errors, and at OFF none. Ingestion itself continues normally at any level. Turning collection on does not backfill events for earlier ingestion, and a normal SQL INSERT generates no streaming events. To confirm collection works, you have to send a new batch.
| Event name | Severity | Purpose |
|---|---|---|
| commit | INFO | Row counts and available offset tokens when data is committed to the target table |
| latency | INFO | Time Snowflake takes to process data for a channel |
| row_error | ERROR | Details about rows that failed processing |
| channel_lifecycle | INFO | Successful channel OPEN and DROP operations |
| channel_error | ERROR | Failure operating on a channel or committing its data |
Every query filters on scope:"name" = 'snow.snowpipe.streaming' and record_type = 'EVENT'. It identifies the target by database, schema and table, because snow.pipe.name is not always present. The commit-event query below computes a per-channel error rate:
SELECT
resource_attributes:"snow.table.name"::STRING AS table_name,
value:"channel_name"::STRING AS channel_name,
SUM(value:"row_count"::NUMBER) AS rows_ingested,
SUM(value:"rows_parsed"::NUMBER) AS rows_parsed,
SUM(value:"error_count"::NUMBER) AS rows_with_errors,
SUM(value:"error_count"::NUMBER)
/ NULLIF(SUM(value:"rows_parsed"::NUMBER), 0) AS row_error_rate
FROM <event_table>
WHERE scope:"name"::STRING = 'snow.snowpipe.streaming'
AND record_type = 'EVENT'
AND record:"name"::STRING = 'commit'
AND resource_attributes:"snow.database.name"::STRING = '<database_name>'
AND resource_attributes:"snow.schema.name"::STRING = '<schema_name>'
AND resource_attributes:"snow.table.name"::STRING = '<table_name>'
AND timestamp > DATEADD('minute', -15, CURRENT_TIMESTAMP())
GROUP BY 1, 2
ORDER BY rows_with_errors DESC, rows_ingested DESC;Two caveats apply. First, uncompressed_bytes can repeat across channels in the same request, so summing it double-counts. Second, total_latency_ms measures only from arrival at Snowflake's ingestion endpoint to commit. It is not end-to-end time from the source system. For Named Channels, use channel status, not event order, to decide where to resume after an interruption.
Checkpoint 8 of 11· Put it in order
Put the steps for confirming that Snowpipe Streaming telemetry is being collected in order.
- 1.Send a fresh batch through Snowpipe Streaming and allow time for telemetry to arrive
- 2.Query the event table with a time window that includes the new activity
- 3.Check the effective LOG_EVENT_LEVEL on the target table's schema
- 4.Set LOG_EVENT_LEVEL = INFO on the schema if it does not already capture informational events
Collection is OFF by default and does not backfill, so you enable it first, send new streaming data, and then query a window that covers that data.
“To verify collection, send a fresh batch through Snowpipe Streaming after enabling it, allow time for telemetry to arrive, and run the query”Source: docs.snowflake.com
Sources12
7.Streams: what monitoring a stream can and cannot change
Streams provide change data capture for pipelines. They can be created on standard tables, views, dynamic tables, event tables, external tables and directory tables. When you monitor a stream, what matters is the offset. A stream holds no table data. It stores an offset and uses the source object's version history to return the changes made since that offset, with the metadata columns METADATA$ACTION, METADATA$ISUPDATE and METADATA$ROW_ID.
Any number of queries can read the same change data from a stream, which makes it safe to inspect. The offset moves only when a DML transaction that reads from the stream commits. If that transaction fails, the offset stays put, so the next run picks up the same changes.
Wrapping several statements in BEGIN … COMMIT locks the stream so they all see the same change records. Inside the transaction the stream has repeatable-read isolation.
To skip a backlog without processing it, recreate the stream with CREATE OR REPLACE STREAM, or insert from the stream into a temporary table using a filter such as WHERE 0 = 1.
One failure mode is specific to streams: an incompatible schema change between the offset and the advance can make queries on the stream fail.
Streams also drive tasks. A task can include a WHEN clause with a SYSTEM$STREAM_HAS_DATA condition, which makes the task's run depend on whether the stream holds change data capture (CDC) records. That is the usual way to run a MERGE only when new data exists. The task's CONDITION_TEXT in task history records the WHEN condition it evaluated, and a run started because the stream contained new data shows SCHEDULED_FROM = TRIGGER. If such a task does not run as expected, check that the stream contained CDC records when the task was last scheduled to run. You can query a stream's historical data with an AT | BEFORE clause.
Checkpoint 9 of 11· Check yourself
A task's MERGE reads from a stream and then fails before committing. What happens to the stream?
The stream position advances only if the transaction commits. Otherwise it stays where it was.
“The stream position advances to the transaction start time if the transaction commits; otherwise it stays at the same position.”Source: docs.snowflake.com
Checkpoint 10 of 11· Exam question
A data engineering team ingests raw order events into a landing table every few minutes with unpredictable arrival times. They want a downstream MERGE task to fire only when new change data actually exists, instead of running on a fixed schedule and finding nothing to process most of the time. Which design meets this requirement?
Correct answer: A — Define the task with a SCHEDULE of 1 minute and add a WHEN clause that calls `SYSTEM$STREAM_HAS_DATA` on the source stream so the task body only executes when the stream actually contains unconsumed change rows
- A. Correct: a scheduled task combined with a `WHEN SYSTEM$STREAM_HAS_DATA(...)` condition still runs on a cadence but skips the task body entirely when the stream has no unconsumed rows, which is the documented pattern for event-driven pipelines without constant full processing.
- B. Incorrect: Snowflake tasks do not support a continuous polling loop mode; every task execution is triggered by a schedule (interval or cron) or a stream/finalizer trigger, so a manual row-count polling loop is not how the service is designed to run.
- C. Incorrect: running every minute unconditionally still executes the MERGE body on every trigger regardless of whether new data arrived, and raising an exception on empty input wastes compute and produces noisy failed task runs instead of skipping cleanly.
- D. Incorrect: the serverless statement size parameters only control how much compute Snowflake allocates to a serverless task run, they do not add any logic that detects whether source data changed, so the task would still execute on every schedule tick.
8.Data quality: data metric function results
The earlier surfaces tell you whether the pipeline *ran*. Data metric functions (DMFs) tell you whether the data it produced is *good*. Snowflake includes system DMFs such as FRESHNESS, DUPLICATE_COUNT and BLANK_COUNT, and you can associate them with tables and views.
DMFs run on a schedule set on the object with the DATA_METRIC_SCHEDULE parameter, and every DMF on that table or view follows the same schedule. An interval schedule accepts 5, 15, 30, 60, 720 or 1440 minutes, with a default of 60 MINUTE; a cron expression is also allowed. A third option is 'TRIGGER_ON_CHANGES', which runs the DMF when a DML operation modifies the table, such as inserting a row. It is available for dynamic, external, Iceberg, regular, temporary and transient tables, but you cannot specify it for views. Setting the schedule to an empty string suspends every DMF on that object.
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';You then associate a DMF with specific columns using ADD DATA METRIC FUNCTION:
ALTER TABLE customers ADD DATA METRIC FUNCTION invalid_email_count ON (email);Scheduled DMF results land in an event table, and there are three ways to read them. The table function returns the same columns as the view, including measurement_time, metric_name and value, but for one table only. Querying the view requires the SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER or ..._ADMIN application role. When you evaluate results, use the measurement_time column as the basis, because it records when the DMF was evaluated, which can differ from the scheduled time.
DATA_QUALITY_MONITORING_RESULTS(
REF_ENTITY_NAME => '<string>' ,
REF_ENTITY_DOMAIN => '<string>'
)Snowsight offers a visual surface too. Select the object in Catalog » Explorer, open the Data Quality tab and select Monitoring. The DMFs associated with the object are listed under Quality Dimensions, and a Run Schedule widget shows how often they run. A data quality check is a DMF association with an expectation. When a check fails, select the DMF association to see which expectation was violated, then use View failed records to run a prepopulated query that calls SYSTEM$DATA_METRIC_SCAN.
Separately, automatic data quality monitoring picks popular tables on its own and records anomaly verdicts for metrics such as row count and freshness in AUTOMATIC_DATA_QUALITY_MONITORING_RESULTS. It does not incur compute charges; billing applies only to DMFs you configure explicitly. A data rule that fails is exactly the kind of condition the alerts section described, so DMF results are a natural input for an alert.
Checkpoint 11 of 11· Match them up
Match each way of reading DMF results to what it offers.
Tap a term, then the definition that fits it.
The raw event table gives full flexibility, the view flattens it, and the function limits results to one table.
“Query the DATA_QUALITY_MONITORING_RESULTS view, which is a flattened version of the event table.”Source: docs.snowflake.com
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.You can send task error notifications through an email or webhook notification integration.Why is that wrong?
Task error notifications support only cloud messaging services (Amazon SNS, Azure Event Grid, Google Pub/Sub) on the cloud that hosts your account.
Covered in Notifications: pushing task failures to a cloud message service
2.Each child task in a task graph needs its own ERROR_INTEGRATION.Why is that wrong?
You set it on the root task only, and child task failures are sent to the root task's integration.
Covered in Notifications: pushing task failures to a cloud message service
3.An active event table means Snowpipe Streaming telemetry is already being collected.Why is that wrong?
Collection is controlled separately by LOG_EVENT_LEVEL, which defaults to OFF. You must set it to INFO or ERROR on the schema, database or account.
4.DYNAMIC_TABLE_REFRESH_HISTORY in the Information Schema can answer questions about failures from last month.Why is that wrong?
The table function keeps 7 days. Older history comes from the Account Usage view, which keeps 365 days.
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.
“For automated alerting on refresh failures, set up an event table alert. For historical analysis beyond 7 days, use the Account Usage view.”
↩︎ The monitoring ladder: snapshot, recent history, long history, events“A time_within_target_lag_ratio below 0.90 means the dynamic table isn’t meeting its freshness target most of the time.”
↩︎ Dynamic tables: freshness and refresh failures“It is the only source for the refresh_mode, refresh_mode_reason, and warehouse columns.”
↩︎ Dynamic tables: freshness and refresh failures“You need the MONITOR or OWNERSHIP privilege on a dynamic table to view its metadata.”
↩︎ Dynamic tables: freshness and refresh failures“The DYNAMIC_TABLE_REFRESH_HISTORY table function retains data for 7 days.”
↩︎ Exam trap 4 - 2.
“Using Snowsight, you can also view the execution history for tasks and task graphs and retry failed tasks.”
↩︎ Tasks: run history in Snowsight and SQL“Task history data is only available if the task has been executed in the last 7 days.”
↩︎ Tasks: run history in Snowsight and SQL - 3.
“This Account Usage view enables you to retrieve the history of task usage within the last 365 days (1 year).”
↩︎ Tasks: run history in Snowsight and SQL“Latency for the view may be up to 45 minutes.”
↩︎ Tasks: run history in Snowsight and SQL“AUTOMATIC RETRY: The task was configured to retry on failure and the previous execution failed.”
↩︎ Notifications: pushing task failures to a cloud message service“TRIGGER : The task was run because the stream, in the WHEN clause of the task, contained new data.”
↩︎ Streams: what monitoring a stream can and cannot change - 4.
“Latency for the view may be up to 180 minutes (3 hours).”
↩︎ Tasks: run history in Snowsight and SQL“The timed-out tasks always have a FAILED state in the task history.”
↩︎ Tasks: run history in Snowsight and SQL“To retrieve the task history details for runs in a scheduled or executing state, query the TASK_HISTORY table function in the Information Schema.”
↩︎ Checkpoint - 5.
“This function can return all executions run in the past seven days or the next scheduled execution within the next eight days.”
↩︎ Tasks: run history in Snowsight and SQL - 6.
“To see who ran a task, use the QUERY_HISTORY view.”
↩︎ Tasks: run history in Snowsight and SQL - 7.
“Specifies the number of consecutive failed task runs after which the current task is suspended automatically.”
↩︎ Tasks: run history in Snowsight and SQL - 8.
“Target completion interval for a serverless task. Used to determine compute resource size for execution.”
↩︎ Tasks: run history in Snowsight and SQL - 9.
“Snowflake can push notifications to a cloud messaging service when it encounters errors while executing tasks, or when a task graph finishes successfully.”
↩︎ Notifications: pushing task failures to a cloud message service“Currently, cross-cloud support isn’t available for push notifications.”
↩︎ Notifications: pushing task failures to a cloud message service“Snowflake guarantees at-least-once message delivery of notifications”
↩︎ Notifications: pushing task failures to a cloud message service“You can use the NOTIFICATION_HISTORY table function to query the history of task notifications.”
↩︎ Notifications: pushing task failures to a cloud message service“The email and webhook notification integration types aren’t supported for task error notifications.”
↩︎ Exam trap 1 - 10.
“Tasks with TASK_AUTO_RETRY_ATTEMPTS set to a value greater than 0 send error notifications for each failed task run.”
↩︎ Notifications: pushing task failures to a cloud message service“You only specify the error notification integrations on a root task of a task graph.”
↩︎ Exam trap 2 - 11.https://docs.snowflake.com/en/user-guide/alertsOfficial docs
“A Snowflake alert is a schema-level object that specifies:”
↩︎ Alerts: a condition, an action, and a schedule“You must enable change tracking on that table or view.”
↩︎ Alerts: a condition, an action, and a schedule“You cannot use the EXECUTE ALERT command to execute an alert on new data.”
↩︎ Alerts: a condition, an action, and a schedule“even a simple action that sends an email notification incurs at least one minute of warehouse cost”
↩︎ Alerts: a condition, an action, and a schedule“The maximum size for a serverless alert run is equivalent to an XXLARGE warehouse.”
↩︎ Alerts: a condition, an action, and a schedule“This privilege can only be granted by a user with the ACCOUNTADMIN role.”
↩︎ Alerts: a condition, an action, and a schedule“Your data fails to comply with a particular business rule that you have set up.”
↩︎ Data quality: data metric function results“Because dynamic table refreshes and task executions log events to the event table, you can set up an alert on new data”
↩︎ Key concept“If you want to evaluate a condition on newly inserted rows, use an alert on new data”
↩︎ Checkpoint - 12.https://docs.snowflake.com/en/user-guide/snowpipe-streaming/snowpipe-streaming-event-table-telemetryOfficial docs
“A Snowpipe Streaming pipeline that uses the high-performance architecture.”
↩︎ Snowpipe Streaming: telemetry in the event table“A database-level destination takes precedence over the account-level destination.”
↩︎ Snowpipe Streaming: telemetry in the event table“OFF: Records no Snowpipe Streaming events. Ingestion continues normally.”
↩︎ Snowpipe Streaming: telemetry in the event table“Summing this field can double-count data, so don’t use it for exact ingestion or billing totals.”
↩︎ Snowpipe Streaming: telemetry in the event table“This measurement doesn’t include time before the request reaches Snowflake.”
↩︎ Snowpipe Streaming: telemetry in the event table“The LOG_EVENT_LEVEL parameter controls which events Snowflake records and defaults to OFF.”
↩︎ Exam trap 3“To verify collection, send a fresh batch through Snowpipe Streaming after enabling it, allow time for telemetry to arrive, and run the query”
↩︎ Checkpoint - 13.
“Note that a stream itself does not contain any table data.”
↩︎ Streams: what monitoring a stream can and cannot change“Recreate the stream (using the CREATE OR REPLACE STREAM syntax).”
↩︎ Streams: what monitoring a stream can and cannot change“any incompatible schema changes between the offset and the advance can cause query failures”
↩︎ Streams: what monitoring a stream can and cannot change“Querying a stream alone does not advance its offset, even within an explicit transaction; the stream contents must be consumed in a DML statement.”
↩︎ Prediction“The stream position advances to the transaction start time if the transaction commits; otherwise it stays at the same position.”
↩︎ Checkpoint - 14.https://docs.snowflake.com/en/user-guide/tasks-tsOfficial docs
“If the task includes a WHEN clause with a SYSTEM$STREAM_HAS_DATA condition”
↩︎ Streams: what monitoring a stream can and cannot change - 15.
“Snowflake provides built-in system data metric functions to measure data quality for tables and views”
↩︎ Data quality: data metric function results - 16.
“For data metric functions, use one of the following values: 5, 15, 30, 60, 720, or 1440.”
↩︎ Data quality: data metric function results“If you want to suspend all DMFs associated with the object, set the parameter to an empty string.”
↩︎ Data quality: data metric function results - 17.
“You cannot specify 'TRIGGER_ON_CHANGES' for views.”
↩︎ Data quality: data metric function results - 18.
“All data metric functions on a table or view follow the same schedule.”
↩︎ Data quality: data metric function results - 19.
“The DMFs associated with the object are listed under Quality Dimensions.”
↩︎ Data quality: data metric function results - 20.
“However, you can only specify a single table when calling the function.”
↩︎ Data quality: data metric function results“Query the DATA_QUALITY_MONITORING_RESULTS view, which is a flattened version of the event table.”
↩︎ Checkpoint - 21.
“The role used to query the view must be granted the SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER application role or the SNOWFLAKE.DATA_QUALITY_MONITORING_ADMIN application role.”
↩︎ Data quality: data metric function results - 22.https://docs.snowflake.com/en/sql-reference/local/automatic_data_quality_monitoring_resultsOfficial docs
“Automatic monitoring is computed by Snowflake and does not incur compute charges to your account.”
↩︎ Data quality: data metric function results