141 lines
148 KiB
HTML
Raw Normal View History

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-docs/assertions/open-assertions-spec" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v2.4.3">
<title data-rh="true">DataHub Open Data Quality Assertions Specification | DataHub</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.datahub.com/docs/assertions/open-assertions-spec"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="DataHub Open Data Quality Assertions Specification | DataHub"><meta data-rh="true" name="description" content="DataHub is developing an open-source Data Quality Assertions Specification &amp; Compiler that will allow you to declare data quality checks / expectations / assertions using a simple, universal"><meta data-rh="true" property="og:description" content="DataHub is developing an open-source Data Quality Assertions Specification &amp; Compiler that will allow you to declare data quality checks / expectations / assertions using a simple, universal"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.datahub.com/docs/assertions/open-assertions-spec"><link data-rh="true" rel="alternate" href="https://docs.datahub.com/docs/assertions/open-assertions-spec" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.datahub.com/docs/assertions/open-assertions-spec" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://RK0UG797F3-dsn.algolia.net" crossorigin="anonymous"><link rel="alternate" type="application/rss+xml" href="/learn/rss.xml" title="DataHub RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/learn/atom.xml" title="DataHub Atom Feed">
<link rel="preconnect" href="https://www.google-analytics.com">
<link rel="preconnect" href="https://www.googletagmanager.com">
<script async src="https://www.googletagmanager.com/gtag/js?id=G-PKGVLETT4C"></script>
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-PKGVLETT4C",{})</script>
<link rel="preconnect" href="https://www.googletagmanager.com">
<script>window.dataLayer=window.dataLayer||[]</script>
<script>!function(e,t,a,n,g){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var m=t.getElementsByTagName(a)[0],r=t.createElement(a);r.async=!0,r.src="https://www.googletagmanager.com/gtm.js?id=GTM-5M8T9HNN",m.parentNode.insertBefore(r,m)}(window,document,"script","dataLayer")</script>
<link rel="search" type="application/opensearchdescription+xml" title="DataHub" href="/opensearch.xml">
<meta httpequiv="Content-Security-Policy" content="frame-ancestors &#39;self&#39; https://*.acryl.io https://acryldata.io http://localhost:*">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;700&display=swap">
<script src="https://tools.luckyorange.com/core/lo.js?site-id=28ea8a38" async defer="defer"></script>
<script src="/scripts/rb2b.js" async defer="defer"></script>
<script src="https://app.revenuehero.io/scheduler.min.js"></script>
<script src="https://tag.clearbitscripts.com/v1/pk_2e321cabe30432a5c44c0424781aa35f/tags.js" referrerpolicy="strict-origin-when-cross-origin"></script>
<script src="/scripts/reo.js"></script>
<script id="runllm-widget-script" type="module" src="https://widget.runllm.com" crossorigin="true" runllm-name="DataHub" runllm-assistant-id="81" runllm-position="BOTTOM_RIGHT" runllm-keyboard-shortcut="Mod+j" runllm-preset="docusaurus" runllm-theme-color="#1890FF" runllm-brand-logo="https://docs.datahub.com/img/datahub-logo-color-mark.svg" runllm-community-url="https://datahub.com/slack" runllm-community-type="slack" runllm-disable-ask-a-person="true" async></script><link rel="stylesheet" href="/assets/css/styles.d8fe2eb8.css">
<link rel="preload" href="/assets/js/runtime~main.310f59c4.js" as="script">
<link rel="preload" href="/assets/js/main.49198d73.js" as="script">
</head>
<body class="navigation-with-keyboard">
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5M8T9HNN" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="announcementBar_mb4j" style="background-color:transparent;color:#ffffff" role="banner"><div class="content_knG7 announcementBarContent_xLdY"><div class="shimmer-banner"><p>DataHub Secures $35 Million Series B</p><a href="https://datahub.com/news/series-b-announcement/" target="_blank" class="button"><div>Read the announcement<span></span></div></a></div></div></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a href="https://datahub.com" target="_blank" rel="noopener noreferrer" class="navbar__brand"><div class="navbar__logo"><img src="/img/datahub-logo-color-light-horizontal.svg" alt="DataHub Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/datahub-logo-color-dark-horizontal.svg" alt="DataHub Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link versionNavItem_cbn8">Next</a><ul class="dropdown__menu"><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/assertions/open-assertions-spec">Next</a></li><li><a class="dropdown__link" href="/docs/1.1.0/assertions/open-assertions-spec">1.1.0</a></li><li><hr class="dropdown-separator" style="margin: 0.4rem;"></li><li><div class="dropdown__link"><b>Archived versions</b></div></li><li>
<a class="dropdown__link" href="https://docs-website-t9sv4w3gr-acryldata.vercel.app/docs/features">1.0.0
<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a>
</li><li>
<a class="dropdown__link" href="https://docs-website-t9sv4w3gr-acryldata.vercel.app/docs/0.15.0/features">0.15.0
<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a>
</li><li>
<a class="dropdown__link" href="https://docs-website-8jkm4uler-acryldata.vercel.app/docs/0.14.1/features">0.14.1
<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a>
</li><li>
<a class="dropdown__link" href="https://docs-website-eue2qafvn-acryldata.vercel.app/docs/features">0.14.0
<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a>
</li><li>
<a class="dropdown__link" href="https://docs-website-psat3nzgi-acryldata.vercel.app/docs/features">0.13.1
<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a>
</li><li>
<a class="dropdown__link" href="https://docs-website-lzxh86531-acryldata.vercel.app/docs/features">0.13.0
<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a>
</li><li>
<a class="dropdown__link" href="https://docs-website-2uuxmgza2-acryldata.vercel.app/docs/features">0.12.1
<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a>
</li><li>
<a class="dropdown__link" href="https://docs-website-irpoe2osc-acryldata.vercel.app/docs/features">0.11.0
<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a>
</li><li>
<a class="dropdown__link" href="https://docs-website-1gv2yzn9d-acryldata.vercel.app/docs/features">0.10.5
<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a>
</li></ul></div></div><div class="navbar__items navbar__items--right"><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs">Docs</a><a class="navbar__item navbar__link" href="/integrations">Integrations</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Learn</a><ul class="dropdown__menu dropdown__menu_Z8FC"><div class="wrapper_kp81"><div><a href="https://datahub.com/weekly-demo" target="_blank" rel="noopener noreferrer" class="card_BUD7"><div class="icon_BgHd"><img src="/img/icon-join-slack.png" alt="Weekly Demo"></div><div class="title_c7DP">Weekly Demo</div></a></div><div><a href="https://datahub.com/use-cases" target="_blank" rel="noopener noreferrer" class="card_BUD7"><div class="icon_BgHd"><img src="/img/icon-forum.png" alt="Use Cases"></div><div class="title_c7DP">Use Cases</div></a></div><div><a href="httpps://datahub.com/adoption-stories" target="_blank" rel="noopener noreferrer" class="card_BUD7"><div class="icon_BgHd"><img src="/img/icon-events.png" alt="Adoption Stories"></div><div class="title_c7DP">Adoption Stories</div></a></div><div><a href="https://medium.com/datahub-project" target="_blank" rel="noopener noreferrer" class="card_BUD7"><div class="icon_BgHd"><img src="/img/icon-champions.png" alt="Blog"></div><div class="title_c7DP">Blog</div></a></div><div><a href="https://www.youtube.com/channel/UC3qFQC5IiwR5fvWEqi_tJ5w" target="_blank" rel="noopener noreferrer" class="card_BUD7"><div class="icon_BgHd"><img src="/img/icon-share-your-journey.png" alt="Youtube"></div><div class="title_c7DP">Youtube</div></a></div></div></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu dropdown__menu_Z8FC"><div class="wrapper_kp81"><div><a href="https://datahub.com/slack/" target="_blank" rel="noopener noreferrer" class="card_BUD7"><div class="icon_BgHd"><img src="/img/icon-join-slack.png" alt="Join Slack"></div><div class="title_c7DP">Join Slack</div></a></div><div><a href="https://datahub.com/events" target="_blank" rel="noopener noreferrer" class="card_BUD7"><div class="icon_BgHd"><img src="/img/icon-events.png" alt="Events"></div><div class="title_c7DP">Events</div></a></div><div><a href="https://datahub.com/champions/" target="_blank" rel="noopener noreferrer" class="card_BUD7"><div class="icon_BgHd"><img src="/img/icon-champions.png" alt="Champions"></div><div class="title_c7DP">Champions</div></a></div><div><a href="https://datahub.com/share-your-journey/" target="_blank" rel="noopener noreferrer" class="card_BUD7"><div class="icon_BgHd"><img src="/img/icon-share-your-journey.png" alt="Share Your Journey"></div><div class="title_c7DP">Share Your Journey</div></a></div></div></ul></div><a href="https://datahub.com/products/why-datahub-cloud/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">
<style>
.cloud-cta {
color: var(--ifm-menu-color-active);
font-weight: 600;
background: linear-gradient(40deg, var(--ifm-menu-color-active), var(--ifm-menu-color-active));
background-size: 200% 100%;
-webkit-background-clip: text;
background-clip: text;
transition: background-image 0.3s ease;
}
.cloud-cta:hover {
color: transparent;
background: linear-gradient(40deg, var(--ifm-menu-color-active), #ff1493);
background-size: 200% 100%;
-webkit-background-clip: text;
background-clip: text;
animation: gradientShift 3s ease infinite;
}
@keyframes gradientShift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
</style>
<div class="cloud-cta">Get Cloud</div>
</a><a href="https://datahub.com/slack?utm_source=docs&amp;utm_medium=header&amp;utm_campaign=docs_header" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">
<style>
.slack-logo:hover {
opacity: 0.8;
}
</style>
<img class="slack-logo" src="https://upload.wikimedia.org/wikipedia/commons/d/d5/Slack_icon_2019.svg" , alt="slack" , height="20px" style="margin: 10px 0 0 0;">
</a><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG menuWithAnnouncementBar_GW3s"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menuHtmlItem_M9Kj menu__list-item"><div>Getting Started</div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/features">What Is DataHub?</a><button aria-label="Toggle the collapsible sidebar category &#x27;What Is DataHub?&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" aria-expanded="true" href="/docs/category/features">Features</a><button aria-label="Toggle the collapsible sidebar category &#x27;Features&#x27;" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" aria-expanded="true" tabindex="0" href="/docs/managed-datahub/observe/assertions">Assertions (Data Quality)</a><button aria-label="Toggle the collapsible sidebar category &#x27;Assertions (Data Quality)&#x27;" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item saasOnly"><a class="menu__link" tabindex="0" href="/docs/managed-datahub/observe/column-assertions">Column Assertions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item saasOnly"><a class="menu__link" tabindex="0" href="/docs/managed-datahub/observe/custom-sql-assertions">Custom SQL Assertions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item saasOnly"><a class="menu__link" tabindex="0" href="/docs/managed-datahub/observe/freshness-assertions">Freshness Assertions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item saasOnly"><a class="menu__link" tabindex="0" href="/docs/managed-datahub/observe/schema-assertions">Schema Assertions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item saasOnly"><a class="menu__link" tabindex="0" href="/docs/managed-datahub/observe/volume-assertions">Volume Assertions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item saa
YAML-based format, and then compile this into artifacts that can be registered or directly executed by 3rd party Data Quality tools like <a href="https://docs.snowflake.com/en/user-guide/data-quality-intro" target="_blank" rel="noopener noreferrer">Snowflake DMFs</a>,
dbt tests, Great Expectations or DataHub Cloud natively.</p><p>Ultimately, our goal is to provide an framework-agnostic, highly-portable format for defining Data Quality checks, making it seamless to swap out the underlying
assertion engine without service disruption for end consumers of the results of these data quality checks in catalogging tools like DataHub.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="integrations">Integrations<a href="#integrations" class="hash-link" aria-label="Direct link to Integrations" title="Direct link to Integrations"></a></h2><p>Currently, the DataHub Open Assertions Specification supports the following integrations:</p><ul><li><a href="/docs/assertions/snowflake/snowflake_dmfs">Snowflake DMF Assertions</a></li></ul><p>And is looking for contributions to build out support for the following integrations:</p><ul><li>[Looking for Contributions]<!-- --> dbt tests</li><li>[Looking for Contributions]<!-- --> Great Expectation checks</li></ul><p>Below, we&#x27;ll look at how to define assertions in YAML, and then provide an usage overview for each support integration.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-specification-declaring-data-quality-assertions-in-yaml">The Specification: Declaring Data Quality Assertions in YAML<a href="#the-specification-declaring-data-quality-assertions-in-yaml" class="hash-link" aria-label="Direct link to The Specification: Declaring Data Quality Assertions in YAML" title="Direct link to The Specification: Declaring Data Quality Assertions in YAML"></a></h2><p>The following assertion types are currently supported by the DataHub YAML Assertion spec:</p><ul><li><a href="/docs/managed-datahub/observe/freshness-assertions">Freshness</a></li><li><a href="/docs/managed-datahub/observe/volume-assertions">Volume</a></li><li><a href="/docs/managed-datahub/observe/column-assertions">Column</a></li><li><a href="/docs/managed-datahub/observe/custom-sql-assertions">Custom SQL</a></li><li><a href="/docs/managed-datahub/observe/schema-assertions">Schema</a></li></ul><p>Each assertion type aims to validate a different aspect of structured table (e.g. on a data warehouse or data lake), from
structure to size to column integrity to custom metrics.</p><p>In this section, we&#x27;ll go over examples of defining each.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="freshness-assertions">Freshness Assertions<a href="#freshness-assertions" class="hash-link" aria-label="Direct link to Freshness Assertions" title="Direct link to Freshness Assertions"></a></h3><p>Freshness Assertions allow you to verify that your data was updated within the expected timeframe.
Below you&#x27;ll find examples of defining different types of freshness assertions via YAML.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="validating-that-table-is-updated-every-6-hours">Validating that Table is Updated Every 6 Hours<a href="#validating-that-table-is-updated-every-6-hours" class="hash-link" aria-label="Direct link to Validating that Table is Updated Every 6 Hours" title="Direct link to Validating that Table is Updated Every 6 Hours"></a></h4><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">assertions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataset</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">(urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataPlatform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">snowflake</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">test_db.public.purchase_events</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">PROD)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> freshness</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">lookback_interval</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">&quot;6 hours&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">last_modified_field</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> updated_at</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">schedule</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> interval</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key at
by issuing a Query to the table which validates determines whether an update was made using the <code>updated_at</code> column in the past 6 hours.
To use this check, we must specify the field that contains the last modified timestamp of a given row.</p><p>The <code>lookback_interval</code> field is used to specify the &quot;lookback window&quot; for the assertion, whereas the <code>schedule</code> field is used to specify how often the assertion should be run.
This allows you to schedule the assertion to run at a different frequency than the lookback window, for example
to detect stale data as soon as it becomes &quot;stale&quot; by inspecting it more frequently.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="supported-source-types">Supported Source Types<a href="#supported-source-types" class="hash-link" aria-label="Direct link to Supported Source Types" title="Direct link to Supported Source Types"></a></h4><p>Currently, the only supported <code>sourceType</code> for Freshness Assertions is <code>LAST_MODIFIED_FIELD</code>. In the future,
we may support additional source types, such as <code>HIGH_WATERMARK</code>, along with data source-specific types such as
<code>AUDIT_LOG</code> and <code>INFORMATION_SCHEMA</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="volume-assertions">Volume Assertions<a href="#volume-assertions" class="hash-link" aria-label="Direct link to Volume Assertions" title="Direct link to Volume Assertions"></a></h3><p>Volume Assertions allow you to verify that the number of records in your dataset meets your expectations.
Below you&#x27;ll find examples of defining different types of volume assertions via YAML.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="validating-that-tale-row-count-is-in-expected-range">Validating that Tale Row Count is in Expected Range<a href="#validating-that-tale-row-count-is-in-expected-range" class="hash-link" aria-label="Direct link to Validating that Tale Row Count is in Expected Range" title="Direct link to Validating that Tale Row Count is in Expected Range"></a></h4><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">assertions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataset</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">(urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataPlatform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">snowflake</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">test_db.public.purchase_events</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">PROD)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> volume</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">metric</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">&quot;row_count&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">condition</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> between</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">min</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1000</span><span class="token plain"></span><br></span><span class="token-li
Using the <code>condition</code> field, you can specify the type of comparison to be made, and the <code>min</code> and <code>max</code> fields to specify the range of values to compare against.
Using the <code>filters</code> field, you can optionally specify a SQL WHERE clause to filter the records being counted.
Using the <code>schedule</code> field you can specify when the assertion should be run, either on a fixed schedule or when new data is added to the table.
The only metric currently supported is <code>row_count</code>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="validating-that-table-row-count-is-less-than-value">Validating that Table Row Count is Less Than Value<a href="#validating-that-table-row-count-is-less-than-value" class="hash-link" aria-label="Direct link to Validating that Table Row Count is Less Than Value" title="Direct link to Validating that Table Row Count is Less Than Value"></a></h4><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">assertions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataset</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">(urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataPlatform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">snowflake</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">test_db.public.purchase_events</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">PROD)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> volume</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">metric</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">&quot;row_count&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">condition</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> less_than_or_equal_to</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1000</span><span class="token plain"></span><br></span><span class="token-line" style="color:
Below you&#x27;ll find examples of defining different types of column assertions via YAML.</p><p>The specification currently supports 2 types of Column Assertions:</p><ul><li><strong>Field Value</strong>: Asserts that the values in a column meet a specific condition.</li><li><strong>Field Metric</strong>: Asserts that a specific metric aggregated across the values in a column meet a specific condition.</li></ul><p>We&#x27;ll go over examples of each below.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="field-values-assertion-validating-that-all-column-values-are-in-expected-range">Field Values Assertion: Validating that All Column Values are In Expected Range<a href="#field-values-assertion-validating-that-all-column-values-are-in-expected-range" class="hash-link" aria-label="Direct link to Field Values Assertion: Validating that All Column Values are In Expected Range" title="Direct link to Field Values Assertion: Validating that All Column Values are In Expected Range"></a></h4><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">assertions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataset</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">(urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataPlatform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">snowflake</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">test_db.public.purchase_events</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">PROD)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> field</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">field</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> amount</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">condition</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> betw
Using the <code>field</code> field, you can specify the column to be asserted on, and using the <code>condition</code> field, you can specify the type of comparison to be made,
and the <code>min</code> and <code>max</code> fields to specify the range of values to compare against.
Using the <code>schedule</code> field you can specify when the assertion should be run, either on a fixed schedule or when new data is added to the table.
Using the <code>filters</code> field, you can optionally specify a SQL WHERE clause to filter the records being counted.
Using the <code>exclude_nulls</code> field, you can specify whether to exclude NULL values from the assertion, meaning that
NULL will simply be ignored if encountered, as opposed to failing the check.
Using the <code>failure_threshold</code>, we can set a threshold for the number of rows that can fail the assertion before the assertion is considered failed.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="field-values-assertion-validating-that-all-column-values-are-in-expected-set">Field Values Assertion: Validating that All Column Values are In Expected Set<a href="#field-values-assertion-validating-that-all-column-values-are-in-expected-set" class="hash-link" aria-label="Direct link to Field Values Assertion: Validating that All Column Values are In Expected Set" title="Direct link to Field Values Assertion: Validating that All Column Values are In Expected Set"></a></h4><p>The validate a VARCHAR / STRING column that should contain one of a set of values:</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">assertions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataset</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">(urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataPlatform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">snowflake</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">test_db.public.purchase_events</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">PROD)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> field</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">field</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> product_id</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">condition</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> in</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><
has no duplicates, by checking that the unique percentage is 100%.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="field-metric-assertion-validating-string-column-is-never-empty-string">Field Metric Assertion: Validating String Column is Never Empty String<a href="#field-metric-assertion-validating-string-column-is-never-empty-string" class="hash-link" aria-label="Direct link to Field Metric Assertion: Validating String Column is Never Empty String" title="Direct link to Field Metric Assertion: Validating String Column is Never Empty String"></a></h4><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">assertions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataset</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">(urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataPlatform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">snowflake</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">test_db.public.purchase_events</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">PROD)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> field</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">field</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> name</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">metric</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> empty_percentage</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">condition</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> equal_to</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">value</span><span class="token punctuati
The only condition is that the SQL query must return a single value, which will be compared against the expected value.
Below you&#x27;ll find examples of defining different types of custom SQL assertions via YAML.</p><p>SQL Assertions are useful for more complex data quality checks that can&#x27;t be easily expressed using the other assertion types,
and can be used to assert on custom metrics, complex aggregations, cross-table integrity checks (JOINS) or any other SQL-based data quality check.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="validating-foreign-key-integrity">Validating Foreign Key Integrity<a href="#validating-foreign-key-integrity" class="hash-link" aria-label="Direct link to Validating Foreign Key Integrity" title="Direct link to Validating Foreign Key Integrity"></a></h4><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">assertions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataset</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">(urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataPlatform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">snowflake</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">test_db.public.purchase_events</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">PROD)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> sql</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">statement</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token scalar string" style="color:rgb(195, 232, 141)"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token scalar string" style="color:rgb(195, 232, 141)"> SELECT COUNT(*)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token scalar string" style="color:rgb(195, 232, 141)"> FROM test_db.public.purchase_events AS pe</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token scalar string" style="color:rgb(195, 232, 141)"> LEFT JOIN test_db.public.products AS p</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token scalar string" style="color:rgb(195, 232, 141)"> ON pe.product_id = p.id</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token scalar string" style="color:rgb(195, 232, 141)"> WHERE p.id IS NULL</span><span class="token plain"></span><br></span><span class="token-line" s
by subtracting the row count of the raw table from the row count of the processed table.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="supported-conditions-1">Supported Conditions<a href="#supported-conditions-1" class="hash-link" aria-label="Direct link to Supported Conditions" title="Direct link to Supported Conditions"></a></h4><p>The full set of supported custom SQL assertion conditions include:</p><ul><li><code>equal_to</code></li><li><code>not_equal_to</code></li><li><code>greater_than</code></li><li><code>greater_than_or_equal_to</code></li><li><code>less_than</code></li><li><code>less_than_or_equal_to</code></li><li><code>between</code></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="schema-assertions-coming-soon">Schema Assertions (Coming Soon)<a href="#schema-assertions-coming-soon" class="hash-link" aria-label="Direct link to Schema Assertions (Coming Soon)" title="Direct link to Schema Assertions (Coming Soon)"></a></h3><p>Schema Assertions allow you to define custom SQL queries to verify your data meets your expectations.
Below you&#x27;ll find examples of defining different types of custom SQL assertions via YAML.</p><p>The specification currently supports 2 types of Schema Assertions:</p><ul><li><strong>Exact Match</strong>: Asserts that the schema of a table - column names and their data types - exactly matches an expected schema</li><li><strong>Contains Match</strong> (Subset): Asserts that the schema of a table - column names and their data types - is a subset of an expected schema</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="validating-actual-schema-exactly-equals-expected-schema">Validating Actual Schema Exactly Equals Expected Schema<a href="#validating-actual-schema-exactly-equals-expected-schema" class="hash-link" aria-label="Direct link to Validating Actual Schema Exactly Equals Expected Schema" title="Direct link to Validating Actual Schema Exactly Equals Expected Schema"></a></h4><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">assertions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataset</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">(urn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">li</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">dataPlatform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">snowflake</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">test_db.public.purchase_events</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">PROD)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> schema</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">condition</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> exact_match</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token key atrule">columns</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">
The actual schema can also contain additional columns not specified in the expected schema.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="supported-data-types">Supported Data Types<a href="#supported-data-types" class="hash-link" aria-label="Direct link to Supported Data Types" title="Direct link to Supported Data Types"></a></h4><p>The following high-level data types are currently supported by the Schema Assertion spec:</p><ul><li>string</li><li>number</li><li>boolean</li><li>date</li><li>timestamp</li><li>struct</li><li>array</li><li>map</li><li>union</li><li>bytes</li><li>enum</li></ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="slackUtm_uoBr"><div class="slackUtm_uoBr"><hr>Need more help? Join the conversation in <a href="https://datahub.com/slack?utm_source=docs&amp;utm_medium=footer&amp;utm_campaign=docs_footer&amp;utm_content=docs/assertions/open-assertions-spec">Slack!</a></div></div><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/datahub-project/datahub/blob/master/docs/assertions/open-assertions-spec.md" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_VsjB"></div></div></footer><div class="feedbackWrapper_mUHF"><div class="feedbackWidget_PX4d"><div class="feedbackButtons_wn3V"><strong>Is this page helpful?</strong><div><button class="feedbackButton_UgQs"><span role="img" aria-label="like" class="anticon anticon-like"><svg viewBox="64 64 896 896" focusable="false" data-icon="like" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M885.9 533.7c16.8-22.2 26.1-49.4 26.1-77.7 0-44.9-25.1-87.4-65.5-111.1a67.67 67.67 0 00-34.3-9.3H572.4l6-122.9c1.4-29.7-9.1-57.9-29.5-79.4A106.62 106.62 0 00471 99.9c-52 0-98 35-111.8 85.1l-85.9 311H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h601.3c9.2 0 18.2-1.8 26.5-5.4 47.6-20.3 78.3-66.8 78.3-118.4 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7-.2-12.6-2-25.1-5.6-37.1zM184 852V568h81v284h-81zm636.4-353l-21.9 19 13.9 25.4a56.2 56.2 0 016.9 27.3c0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4a56.2 56.2 0 016.9 27.3c0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4a56.2 56.2 0 016.9 27.3c0 22.4-13.2 42.6-33.6 51.8H329V564.8l99.5-360.5a44.1 44.1 0 0142.2-32.3c7.6 0 15.1 2.2 21.1 6.7 9.9 7.4 15.2 18.6 14.6 30.5l-9.6 198.4h314.4C829 418.5 840 436.9 840 456c0 16.5-7.2 32.1-19.6 43z"></path></svg></span></button><button class="feedbackButton_UgQs"><span role="img" aria-label="dislike" class="anticon anticon-dislike"><svg viewBox="64 64 896 896" focusable="false" data-icon="dislike" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M885.9 490.3c3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-51.6-30.7-98.1-78.3-118.4a66.1 66.1 0 00-26.5-5.4H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h129.3l85.8 310.8C372.9 889 418.9 924 470.9 924c29.7 0 57.4-11.8 77.9-33.4 20.5-21.5 31-49.7 29.5-79.4l-6-122.9h239.9c12.1 0 23.9-3.2 34.3-9.3 40.4-23.5 65.5-66.1 65.5-111 0-28.3-9.3-55.5-26.1-77.7zM184 456V172h81v284h-81zm627.2 160.4H496.8l9.6 198.4c.6 11.9-4.7 23.1-14.6 30.5-6.1 4.5-13.6 6.8-21.1 6.7a44.28 44.28 0 01-42.2-32.3L329 459.2V172h415.4a56.85 56.85 0 0133.6 51.8c0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19a56.76 56.76 0 0119.6 43c0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19a56.76 56.76 0 0119.6 43c0 9.7-2.3 18.9-6.9 27.3l-14 25.5 21.9 19a56.76 56.76 0 0119.6 43c0 19.1-11 37.5-28.8 48.4z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/managed-datahub/
<script src="/assets/js/runtime~main.310f59c4.js"></script>
<script src="/assets/js/main.49198d73.js"></script>
</body>
</html>