<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>Data governance in Geode provides comprehensive capabilities for managing data quality, tracking lineage, enforcing policies, and maintaining compliance across your graph database. This guide covers the tools and practices for implementing effective data governance in enterprise environments.</p>
<h3 id="data-governance-overview" class="position-relative d-flex align-items-center group">
<span>Data Governance Overview</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-governance-overview"
aria-haspopup="dialog"
aria-label="Share link: Data Governance Overview">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden>
<div class="hsm-dialog" role="document">
<div class="hsm-header">
<h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2>
<button type="button" class="hsm-close" aria-label="Close">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
<div class="hsm-body">
<label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label>
<div class="input-group mb-4 hsm-url-group">
<input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" />
<button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy">
<i class="fa-duotone fa-clipboard" aria-hidden="true"></i>
</button>
</div>
<div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div>
<div class="hsm-share-grid">
<a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-twitter me-2"></i>Twitter
</a>
<a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-linkedin me-2"></i>LinkedIn
</a>
<a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-facebook me-2"></i>Facebook
</a>
</div>
</div>
</div>
</div>
<style>
.heading-share-modal {
position: fixed;
inset: 0;
display: flex;
justify-content: center;
align-items: center;
background: rgba(0, 0, 0, 0.6);
z-index: 1050;
padding: 1rem;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
}
.heading-share-modal[hidden] { display: none !important; }
.hsm-dialog {
max-width: 420px;
width: 100%;
background: var(--bs-body-bg, #fff);
color: var(--bs-body-color, #212529);
border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
border-radius: 1rem;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
overflow: hidden;
animation: hsm-fade-in 0.2s ease-out;
}
@keyframes hsm-fade-in {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
[data-bs-theme="dark"] .hsm-dialog {
background: #1e293b;
border-color: rgba(255,255,255,0.1);
color: #f8f9fa;
}
.hsm-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
background: rgba(0,0,0,0.02);
}
[data-bs-theme="dark"] .hsm-header {
background: rgba(255,255,255,0.02);
border-color: rgba(255,255,255,0.1);
}
.hsm-close {
background: transparent;
border: none;
color: inherit;
opacity: 0.5;
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
font-size: 1.2rem;
line-height: 1;
transition: opacity 0.2s;
}
.hsm-close:hover {
opacity: 1;
}
.hsm-body {
padding: 1.5rem;
}
.hsm-url-group {
display: flex !important;
align-items: stretch;
}
.hsm-url-group .form-control {
flex: 1;
min-width: 0;
margin: 0;
background: var(--bs-secondary-bg, #f8f9fa);
border-color: var(--bs-border-color, #dee2e6);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
height: 42px;
}
.hsm-url-group .btn {
flex: 0 0 auto;
margin: 0;
margin-left: -1px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
height: 42px;
display: flex;
align-items: center;
justify-content: center;
padding: 0 1.25rem;
z-index: 2;
}
[data-bs-theme="dark"] .hsm-url-group .form-control {
background: #0f172a;
border-color: #334155;
color: #e2e8f0;
}
.hsm-share-grid {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.hsm-share-grid .btn {
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
padding: 0.6rem;
border-color: var(--bs-border-color);
width: 100%;
}
[data-bs-theme="dark"] .hsm-share-grid .btn {
color: #e2e8f0;
border-color: #475569;
}
[data-bs-theme="dark"] .hsm-share-grid .btn:hover {
background: #334155;
border-color: #cbd5e1;
}
</style>
<script>
(function(){
const modal = document.getElementById('headingShareModal');
if(!modal) return;
const input = modal.querySelector('#headingShareInput');
const copyBtn = modal.querySelector('.hsm-copy');
const twitter = modal.querySelector('#share-twitter');
const linkedin = modal.querySelector('#share-linkedin');
const facebook = modal.querySelector('#share-facebook');
const closeBtn = modal.querySelector('.hsm-close');
let lastFocus=null;
let trapBound=false;
function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; }
function isOpen(){ return !modal.hasAttribute('hidden'); }
function hydrate(id){
const url=buildUrl(id);
input.value=url;
const enc=encodeURIComponent(url);
const text=encodeURIComponent(document.title);
if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`;
if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`;
if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`;
}
function openModal(id){
lastFocus=document.activeElement;
hydrate(id);
if(!isOpen()){
modal.removeAttribute('hidden');
}
requestAnimationFrame(()=>{ input.focus(); });
trapFocus();
}
function closeModal(){
if(!isOpen()) return;
modal.setAttribute('hidden','');
if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus();
}
function copyCurrent(){
try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); }
catch(e){ fallback(); }
}
function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} }
function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); }
function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); }
function bindShareButtons(){
document.querySelectorAll('.h-share').forEach(btn=>{
if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; }
});
}
bindShareButtons();
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', bindShareButtons);
} else {
requestAnimationFrame(bindShareButtons);
}
document.addEventListener('click', function(e){
const shareBtn=e.target.closest && e.target.closest('.h-share');
if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); }
}, true);
document.addEventListener('click', e=>{
if(e.target===modal) closeModal();
if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); }
if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); }
});
document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); });
function trapFocus(){
if(trapBound) return;
trapBound=true;
modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } });
}
if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); });
})();
</script><p>Data governance ensures that data is:</p>
<ul>
<li><strong>Accurate</strong>: Data quality meets business requirements</li>
<li><strong>Secure</strong>: Access is controlled and audited</li>
<li><strong>Compliant</strong>: Regulatory requirements are met</li>
<li><strong>Discoverable</strong>: Users can find and understand data</li>
<li><strong>Traceable</strong>: Data lineage is documented</li>
<li><strong>Consistent</strong>: Standards are enforced across the organization</li>
</ul>
<p>Geode provides built-in features to support all aspects of data governance.</p>
<h3 id="data-quality-management" class="position-relative d-flex align-items-center group">
<span>Data Quality Management</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-quality-management"
aria-haspopup="dialog"
aria-label="Share link: Data Quality Management">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="schema-constraints" class="position-relative d-flex align-items-center group">
<span>Schema Constraints</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="schema-constraints"
aria-haspopup="dialog"
aria-label="Share link: Schema Constraints">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Define data quality rules using schema constraints:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Ensure</span><span class="w"> </span><span class="py">email</span><span class="w"> </span><span class="py">addresses</span><span class="w"> </span><span class="py">are</span><span class="w"> </span><span class="py">valid</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">CONSTRAINT</span><span class="w"> </span><span class="py">valid_email</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ASSERT</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="py">MATCHES</span><span class="w"> </span><span class="err">'^</span><span class="p">[</span><span class="py">a</span><span class="err">-</span><span class="py">zA</span><span class="err">-</span><span class="py">Z0</span><span class="err">-</span><span class="py">9</span><span class="err">.</span><span class="py">_</span><span class="err">%+-</span><span class="p">]</span><span class="err">+@</span><span class="p">[</span><span class="py">a</span><span class="err">-</span><span class="py">zA</span><span class="err">-</span><span class="py">Z0</span><span class="err">-</span><span class="py">9</span><span class="err">.-</span><span class="p">]</span><span class="err">+\.</span><span class="p">[</span><span class="py">a</span><span class="err">-</span><span class="py">zA</span><span class="err">-</span><span class="py">Z</span><span class="p">]{</span><span class="py">2</span><span class="p">,}</span><span class="err">$';</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Ensure</span><span class="w"> </span><span class="py">phone</span><span class="w"> </span><span class="py">numbers</span><span class="w"> </span><span class="py">follow</span><span class="w"> </span><span class="py">E</span><span class="mf">.164</span><span class="w"> </span><span class="py">format</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">CONSTRAINT</span><span class="w"> </span><span class="py">valid_phone</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">c</span><span class="p">:</span><span class="nc">Contact</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ASSERT</span><span class="w"> </span><span class="py">c</span><span class="err">.</span><span class="py">phone</span><span class="w"> </span><span class="py">MATCHES</span><span class="w"> </span><span class="err">'^\+</span><span class="p">[</span><span class="py">1</span><span class="err">-</span><span class="py">9</span><span class="p">]</span><span class="err">\</span><span class="py">d</span><span class="p">{</span><span class="py">1</span><span class="p">,</span><span class="py">14</span><span class="p">}</span><span class="err">$';</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Ensure</span><span class="w"> </span><span class="py">dates</span><span class="w"> </span><span class="py">are</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">the</span><span class="w"> </span><span class="py">future</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">events</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">CONSTRAINT</span><span class="w"> </span><span class="py">future_event</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">e</span><span class="p">:</span><span class="nc">Event</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ASSERT</span><span class="w"> </span><span class="py">e</span><span class="err">.</span><span class="py">event_date</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">current_date</span><span class="p">()</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Ensure</span><span class="w"> </span><span class="py">numeric</span><span class="w"> </span><span class="py">ranges</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">CONSTRAINT</span><span class="w"> </span><span class="py">valid_age</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ASSERT</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err"><</span><span class="p">=</span><span class="w"> </span><span class="py">150</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Ensure</span><span class="w"> </span><span class="py">required</span><span class="w"> </span><span class="py">fields</span><span class="w"> </span><span class="py">are</span><span class="w"> </span><span class="py">present</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">CONSTRAINT</span><span class="w"> </span><span class="py">required_fields</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ASSERT</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">sku</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">price</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="data-quality-checks" class="position-relative d-flex align-items-center group">
<span>Data Quality Checks</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-quality-checks"
aria-haspopup="dialog"
aria-label="Share link: Data Quality Checks">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Implement automated data quality checks:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">records</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">missing</span><span class="w"> </span><span class="py">required</span><span class="w"> </span><span class="py">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NULL</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NULL</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NULL</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">incomplete_records</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">duplicate</span><span class="w"> </span><span class="py">records</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p1</span><span class="p">:</span><span class="nc">Person</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="py">p2</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p1</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">p2</span><span class="err">.</span><span class="py">email</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">id</span><span class="p">(</span><span class="py">p1</span><span class="p">)</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">id</span><span class="p">(</span><span class="py">p2</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p1</span><span class="err">.</span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">duplicates</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">orphaned</span><span class="w"> </span><span class="py">relationships</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">()</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="p">:</span><span class="nc">BELONGS_TO</span><span class="p">]</span><span class="err">-></span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">EXISTS</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">m</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">n</span><span class="p">:</span><span class="nc">Entity</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">m</span><span class="p">:</span><span class="nc">Group</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">r</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">orphaned_relationships</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Validate</span><span class="w"> </span><span class="py">referential</span><span class="w"> </span><span class="py">integrity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">o</span><span class="p">:</span><span class="nc">Order</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">ORDERED_BY</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">c</span><span class="p">:</span><span class="nc">Customer</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">EXISTS</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">c</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">c</span><span class="p">:</span><span class="nc">Customer</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">o</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">orders_without_customers</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="data-quality-metrics" class="position-relative d-flex align-items-center group">
<span>Data Quality Metrics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-quality-metrics"
aria-haspopup="dialog"
aria-label="Share link: Data Quality Metrics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Track data quality over time:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">quality</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">DataQualityMetric</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">email_completeness</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">timestamp</span><span class="p">:</span><span class="w"> </span><span class="nc">current_timestamp</span><span class="p">(),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_records</span><span class="p">:</span><span class="w"> </span><span class="nc">count</span><span class="w"> </span><span class="p">{</span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="p">},</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">complete_records</span><span class="p">:</span><span class="w"> </span><span class="nc">count</span><span class="w"> </span><span class="p">{</span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="p">},</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">completeness_pct</span><span class="p">:</span><span class="w"> </span><span class="nc">100</span><span class="mf">.0</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">count</span><span class="w"> </span><span class="p">{</span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="p">}</span><span class="w"> </span><span class="err">/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">count</span><span class="w"> </span><span class="p">{</span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">quality</span><span class="w"> </span><span class="py">trends</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">m</span><span class="p">:</span><span class="nc">DataQualityMetric</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">m</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">email_completeness</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">m</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">current_timestamp</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">duration</span><span class="p">(</span><span class="err">'</span><span class="py">P30D</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">m</span><span class="err">.</span><span class="py">timestamp</span><span class="p">,</span><span class="w"> </span><span class="py">m</span><span class="err">.</span><span class="py">completeness_pct</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">m</span><span class="err">.</span><span class="py">timestamp</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="data-lineage-tracking" class="position-relative d-flex align-items-center group">
<span>Data Lineage Tracking</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-lineage-tracking"
aria-haspopup="dialog"
aria-label="Share link: Data Lineage Tracking">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>Track how data flows through your systems and transformations:</p>
<h4 id="lineage-model" class="position-relative d-flex align-items-center group">
<span>Lineage Model</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="lineage-model"
aria-haspopup="dialog"
aria-label="Share link: Lineage Model">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Model data lineage in the graph:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Source</span><span class="w"> </span><span class="py">systems</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">DataSource</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">crm_system</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Customer</span><span class="w"> </span><span class="py">CRM</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">type</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">database</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">connection</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">postgresql</span><span class="p">:</span><span class="err">//</span><span class="nc">crm</span><span class="err">.</span><span class="py">example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Data</span><span class="w"> </span><span class="py">transformations</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">DataTransformation</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">etl_customer_enrichment</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Customer</span><span class="w"> </span><span class="py">Data</span><span class="w"> </span><span class="py">Enrichment</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">type</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">ETL</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">script</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customer_enrichment</span><span class="err">.</span><span class="py">py</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">version</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">2</span><span class="mf">.1.0</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_run</span><span class="p">:</span><span class="w"> </span><span class="nc">current_timestamp</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Data</span><span class="w"> </span><span class="py">assets</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">DataAsset</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customer_360</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Customer</span><span class="w"> </span><span class="py">360</span><span class="w"> </span><span class="py">View</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">type</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">graph</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">schema</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Person</span><span class="p">,</span><span class="w"> </span><span class="py">Company</span><span class="p">,</span><span class="w"> </span><span class="py">Product</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">lineage</span><span class="w"> </span><span class="py">relationships</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">:</span><span class="nc">DataSource</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">crm_system</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">transform</span><span class="p">:</span><span class="nc">DataTransformation</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">etl_customer_enrichment</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">asset</span><span class="p">:</span><span class="nc">DataAsset</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customer_360</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FEEDS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">transform</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">transform</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PRODUCES</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">asset</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="automatic-lineage-tracking" class="position-relative d-flex align-items-center group">
<span>Automatic Lineage Tracking</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="automatic-lineage-tracking"
aria-haspopup="dialog"
aria-label="Share link: Automatic Lineage Tracking">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Enable automatic lineage tracking:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Enable lineage tracking for all queries</span>
</span></span><span class="line"><span class="cl">geode serve --lineage-tracking<span class="o">=</span>enabled <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --lineage-detail<span class="o">=</span>full <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --lineage-storage<span class="o">=</span>graph
</span></span></code></pre></div><p>Query lineage information:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">sources</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="py">specific</span><span class="w"> </span><span class="py">asset</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">:</span><span class="nc">DataSource</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FEEDS</span><span class="err">*</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">asset</span><span class="p">:</span><span class="nc">DataAsset</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customer_360</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">source</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">source</span><span class="err">.</span><span class="kd">type</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="nc">Trace</span><span class="w"> </span><span class="py">downstream</span><span class="w"> </span><span class="py">impact</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">source</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">:</span><span class="nc">DataSource</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">crm_system</span><span class="err">'</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">FEEDS</span><span class="err">*</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">downstream</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">downstream</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">labels</span><span class="p">(</span><span class="py">downstream</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">transformations</span><span class="w"> </span><span class="py">applied</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="py">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FEEDS</span><span class="err">*</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">asset</span><span class="p">:</span><span class="nc">DataAsset</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customer_360</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="err">'</span><span class="py">DataTransformation</span><span class="err">'</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">labels</span><span class="p">(</span><span class="py">nodes</span><span class="p">(</span><span class="py">path</span><span class="p">))</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="p">[</span><span class="py">n</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">nodes</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="err">'</span><span class="py">DataTransformation</span><span class="err">'</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">labels</span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">name</span><span class="p">]</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">transformations</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="impact-analysis" class="position-relative d-flex align-items-center group">
<span>Impact Analysis</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="impact-analysis"
aria-haspopup="dialog"
aria-label="Share link: Impact Analysis">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Analyze the impact of changes:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">assets</span><span class="w"> </span><span class="py">affected</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">changing</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="py">source</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">:</span><span class="nc">DataSource</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">crm_system</span><span class="err">'</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">FEEDS</span><span class="err">*</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">affected</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">labels</span><span class="p">(</span><span class="py">affected</span><span class="p">),</span><span class="w"> </span><span class="py">affected</span><span class="err">.</span><span class="py">name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">labels</span><span class="p">(</span><span class="py">affected</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">users</span><span class="w"> </span><span class="py">affected</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">source</span><span class="w"> </span><span class="py">change</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">:</span><span class="nc">DataSource</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">crm_system</span><span class="err">'</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">FEEDS</span><span class="err">*</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">asset</span><span class="p">:</span><span class="nc">DataAsset</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">USES</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">asset</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">email</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="metadata-management" class="position-relative d-flex align-items-center group">
<span>Metadata Management</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="metadata-management"
aria-haspopup="dialog"
aria-label="Share link: Metadata Management">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="data-catalog" class="position-relative d-flex align-items-center group">
<span>Data Catalog</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-catalog"
aria-haspopup="dialog"
aria-label="Share link: Data Catalog">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Build a searchable data catalog:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">catalog</span><span class="w"> </span><span class="py">entries</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">CatalogEntry</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customers_table</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Customer</span><span class="w"> </span><span class="py">Data</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">type</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">dataset</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">description</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Primary</span><span class="w"> </span><span class="py">customer</span><span class="w"> </span><span class="py">information</span><span class="w"> </span><span class="py">including</span><span class="w"> </span><span class="py">contact</span><span class="w"> </span><span class="py">details</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">preferences</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">owner</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">data</span><span class="err">-</span><span class="py">team</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="p">:</span><span class="w"> </span><span class="nc">current_timestamp</span><span class="p">(),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">updated_at</span><span class="p">:</span><span class="w"> </span><span class="nc">current_timestamp</span><span class="p">(),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">tags</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="err">'</span><span class="nc">pii</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="err">'</span><span class="py">customer</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="err">'</span><span class="py">core</span><span class="err">'</span><span class="p">],</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">classification</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">confidential</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">retention_period</span><span class="p">:</span><span class="w"> </span><span class="nc">duration</span><span class="p">(</span><span class="err">'</span><span class="py">P7Y</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Add</span><span class="w"> </span><span class="kd">schema</span><span class="w"> </span><span class="py">information</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">SchemaField</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">email</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">type</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">string</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">description</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Customer</span><span class="w"> </span><span class="py">email</span><span class="w"> </span><span class="py">address</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">required</span><span class="p">:</span><span class="w"> </span><span class="nc">true</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">pii</span><span class="p">:</span><span class="w"> </span><span class="nc">true</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">example</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customer</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Link</span><span class="w"> </span><span class="py">catalog</span><span class="w"> </span><span class="py">entries</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="kd">schema</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">catalog</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customers_table</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">field</span><span class="p">:</span><span class="nc">SchemaField</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">email</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">catalog</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_FIELD</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">field</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="searchable-metadata" class="position-relative d-flex align-items-center group">
<span>Searchable Metadata</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="searchable-metadata"
aria-haspopup="dialog"
aria-label="Share link: Searchable Metadata">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Search the data catalog:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Search</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">tag</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="err">'</span><span class="py">pii</span><span class="err">'</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">tags</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">description</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Search</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">classification</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">classification</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">confidential</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">owner</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Full</span><span class="err">-</span><span class="py">text</span><span class="w"> </span><span class="py">search</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="py">CONTAINS</span><span class="w"> </span><span class="err">'</span><span class="py">customer</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">description</span><span class="w"> </span><span class="py">CONTAINS</span><span class="w"> </span><span class="err">'</span><span class="py">customer</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">description</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="business-glossary" class="position-relative d-flex align-items-center group">
<span>Business Glossary</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="business-glossary"
aria-haspopup="dialog"
aria-label="Share link: Business Glossary">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Define business terms and link to technical assets:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">business</span><span class="w"> </span><span class="py">terms</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">BusinessTerm</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customer_lifetime_value</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Customer</span><span class="w"> </span><span class="py">Lifetime</span><span class="w"> </span><span class="py">Value</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">abbreviation</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">CLV</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">definition</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Predicted</span><span class="w"> </span><span class="py">net</span><span class="w"> </span><span class="py">profit</span><span class="w"> </span><span class="py">attributed</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">the</span><span class="w"> </span><span class="py">entire</span><span class="w"> </span><span class="py">future</span><span class="w"> </span><span class="py">relationship</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="py">customer</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">owner</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">finance</span><span class="err">-</span><span class="py">team</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">approved_by</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">CFO</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">approved_at</span><span class="p">:</span><span class="w"> </span><span class="nc">current_timestamp</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Link</span><span class="w"> </span><span class="py">terms</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">assets</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">term</span><span class="p">:</span><span class="nc">BusinessTerm</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customer_lifetime_value</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">field</span><span class="p">:</span><span class="nc">SchemaField</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">lifetime_value</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">term</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">DEFINED_BY</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">field</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="access-policies" class="position-relative d-flex align-items-center group">
<span>Access Policies</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="access-policies"
aria-haspopup="dialog"
aria-label="Share link: Access Policies">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="policy-based-access-control" class="position-relative d-flex align-items-center group">
<span>Policy-Based Access Control</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="policy-based-access-control"
aria-haspopup="dialog"
aria-label="Share link: Policy-Based Access Control">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Define and enforce access policies:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">access</span><span class="w"> </span><span class="py">policy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">DataAccessPolicy</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">pii_access_policy</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">PII</span><span class="w"> </span><span class="py">Access</span><span class="w"> </span><span class="py">Control</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">description</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Restrict</span><span class="w"> </span><span class="py">access</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">personally</span><span class="w"> </span><span class="py">identifiable</span><span class="w"> </span><span class="py">information</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">effective_date</span><span class="p">:</span><span class="w"> </span><span class="nc">current_timestamp</span><span class="p">(),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_by</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">security</span><span class="err">-</span><span class="py">team</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Define</span><span class="w"> </span><span class="py">policy</span><span class="w"> </span><span class="py">rules</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">PolicyRule</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">policy_id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">pii_access_policy</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">rule_type</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">row_level_security</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">condition</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">user</span><span class="err">.</span><span class="py">has_role</span><span class="p">(</span><span class="s">"pii_viewer"</span><span class="p">)</span><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">data</span><span class="err">.</span><span class="py">owner</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">current_user</span><span class="p">()</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">action</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">allow</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Apply</span><span class="w"> </span><span class="py">policies</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">policy</span><span class="p">:</span><span class="nc">DataAccessPolicy</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">pii_access_policy</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="err">'</span><span class="py">pii</span><span class="err">'</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">tags</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">GOVERNED_BY</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">policy</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="data-classification" class="position-relative d-flex align-items-center group">
<span>Data Classification</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-classification"
aria-haspopup="dialog"
aria-label="Share link: Data Classification">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Classify data by sensitivity:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Define</span><span class="w"> </span><span class="py">classification</span><span class="w"> </span><span class="py">levels</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">ClassificationLevel</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">public</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">level</span><span class="p">:</span><span class="w"> </span><span class="nc">1</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">ClassificationLevel</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">internal</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">level</span><span class="p">:</span><span class="w"> </span><span class="nc">2</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">ClassificationLevel</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">confidential</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">level</span><span class="p">:</span><span class="w"> </span><span class="nc">3</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">ClassificationLevel</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">restricted</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">level</span><span class="p">:</span><span class="w"> </span><span class="nc">4</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Classify</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">assets</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customers_table</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">level</span><span class="p">:</span><span class="nc">ClassificationLevel</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">confidential</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CLASSIFIED_AS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">level</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Enforce</span><span class="w"> </span><span class="py">classification</span><span class="err">-</span><span class="py">based</span><span class="w"> </span><span class="py">access</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">POLICY</span><span class="w"> </span><span class="py">classification_access</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">CatalogEntry</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FOR</span><span class="w"> </span><span class="py">SELECT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">USING</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CLASSIFIED_AS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">level</span><span class="p">:</span><span class="nc">ClassificationLevel</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nc">current_user</span><span class="p">()})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">clearance_level</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">level</span><span class="err">.</span><span class="py">level</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="data-retention-and-lifecycle" class="position-relative d-flex align-items-center group">
<span>Data Retention and Lifecycle</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-retention-and-lifecycle"
aria-haspopup="dialog"
aria-label="Share link: Data Retention and Lifecycle">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="retention-policies" class="position-relative d-flex align-items-center group">
<span>Retention Policies</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="retention-policies"
aria-haspopup="dialog"
aria-label="Share link: Retention Policies">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Define and enforce data retention:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">retention</span><span class="w"> </span><span class="py">policy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">RetentionPolicy</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">gdpr_customer_retention</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">GDPR</span><span class="w"> </span><span class="py">Customer</span><span class="w"> </span><span class="py">Data</span><span class="w"> </span><span class="py">Retention</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">retention_period</span><span class="p">:</span><span class="w"> </span><span class="nc">duration</span><span class="p">(</span><span class="err">'</span><span class="py">P7Y</span><span class="err">'</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">deletion_method</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">secure_delete</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">legal_basis</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">GDPR</span><span class="w"> </span><span class="py">Article</span><span class="w"> </span><span class="py">5</span><span class="p">(</span><span class="py">1</span><span class="p">)(</span><span class="py">e</span><span class="p">)</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">approved_by</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">legal</span><span class="err">-</span><span class="py">team</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Apply</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">policy</span><span class="p">:</span><span class="nc">RetentionPolicy</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">gdpr_customer_retention</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="err">'</span><span class="py">customer</span><span class="err">'</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">tags</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">GOVERNED_BY</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">policy</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">data</span><span class="w"> </span><span class="py">eligible</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">deletion</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">data</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">GOVERNED_BY</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">policy</span><span class="p">:</span><span class="nc">RetentionPolicy</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">data</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">policy</span><span class="err">.</span><span class="py">retention_period</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">current_timestamp</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">data</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">data</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">data</span><span class="err">.</span><span class="py">created_at</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="automated-lifecycle-management" class="position-relative d-flex align-items-center group">
<span>Automated Lifecycle Management</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="automated-lifecycle-management"
aria-haspopup="dialog"
aria-label="Share link: Automated Lifecycle Management">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Enable automated data lifecycle management</span>
</span></span><span class="line"><span class="cl">geode serve --lifecycle-management<span class="o">=</span>enabled <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --lifecycle-check-interval<span class="o">=</span>daily <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --lifecycle-enforcement<span class="o">=</span><span class="nb">true</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Run manual lifecycle check</span>
</span></span><span class="line"><span class="cl">geode lifecycle-check --policy<span class="o">=</span>gdpr_customer_retention <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --dry-run<span class="o">=</span><span class="nb">true</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --output<span class="o">=</span>lifecycle-report.json
</span></span></code></pre></div>
<h3 id="data-stewardship" class="position-relative d-flex align-items-center group">
<span>Data Stewardship</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-stewardship"
aria-haspopup="dialog"
aria-label="Share link: Data Stewardship">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="assign-data-stewards" class="position-relative d-flex align-items-center group">
<span>Assign Data Stewards</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="assign-data-stewards"
aria-haspopup="dialog"
aria-label="Share link: Assign Data Stewards">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">stewardship</span><span class="w"> </span><span class="py">assignments</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(:</span><span class="nc">DataSteward</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">alice</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Alice</span><span class="w"> </span><span class="py">Johnson</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">title</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Senior</span><span class="w"> </span><span class="py">Data</span><span class="w"> </span><span class="py">Steward</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">department</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Data</span><span class="w"> </span><span class="py">Governance</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">responsibilities</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="err">'</span><span class="nc">Customer</span><span class="w"> </span><span class="py">Data</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="err">'</span><span class="py">Product</span><span class="w"> </span><span class="py">Data</span><span class="err">'</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Assign</span><span class="w"> </span><span class="py">stewards</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">steward</span><span class="p">:</span><span class="nc">DataSteward</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">alice</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="err">'</span><span class="py">customer</span><span class="err">'</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">tags</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">steward</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RESPONSIBLE_FOR</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">entry</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">steward</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">specific</span><span class="w"> </span><span class="py">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">steward</span><span class="p">:</span><span class="nc">DataSteward</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RESPONSIBLE_FOR</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">customers_table</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">steward</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">steward</span><span class="err">.</span><span class="py">id</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="compliance-reporting" class="position-relative d-flex align-items-center group">
<span>Compliance Reporting</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="compliance-reporting"
aria-haspopup="dialog"
aria-label="Share link: Compliance Reporting">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="generate-compliance-reports" class="position-relative d-flex align-items-center group">
<span>Generate Compliance Reports</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="generate-compliance-reports"
aria-haspopup="dialog"
aria-label="Share link: Generate Compliance Reports">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Generate GDPR compliance report</span>
</span></span><span class="line"><span class="cl">geode governance-report --framework<span class="o">=</span>gdpr <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --include<span class="o">=</span>data-inventory,lineage,access-log <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --start-date<span class="o">=</span>2025-01-01 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --end-date<span class="o">=</span>2025-12-31 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --output<span class="o">=</span>gdpr-compliance-2025.pdf
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Generate data quality report</span>
</span></span><span class="line"><span class="cl">geode governance-report --type<span class="o">=</span>data-quality <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --metrics<span class="o">=</span>completeness,accuracy,consistency <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --output<span class="o">=</span>data-quality-report.json
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Generate access report</span>
</span></span><span class="line"><span class="cl">geode governance-report --type<span class="o">=</span>access-audit <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --user<span class="o">=</span>[email protected] <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --include-lineage<span class="o">=</span><span class="nb">true</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --output<span class="o">=</span>access-audit.json
</span></span></code></pre></div>
<h4 id="compliance-dashboards" class="position-relative d-flex align-items-center group">
<span>Compliance Dashboards</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="compliance-dashboards"
aria-haspopup="dialog"
aria-label="Share link: Compliance Dashboards">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Data</span><span class="w"> </span><span class="py">quality</span><span class="w"> </span><span class="py">dashboard</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">m</span><span class="p">:</span><span class="nc">DataQualityMetric</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">m</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">current_timestamp</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">duration</span><span class="p">(</span><span class="err">'</span><span class="py">P1D</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">m</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">avg</span><span class="p">(</span><span class="py">m</span><span class="err">.</span><span class="py">completeness_pct</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">avg_completeness</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">m</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Policy</span><span class="w"> </span><span class="py">compliance</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">GOVERNED_BY</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">policy</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">violation</span><span class="p">:</span><span class="nc">PolicyViolation</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">VIOLATED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">policy</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">policy</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">entry</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">governed_assets</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">violation</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">violations</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">100</span><span class="mf">.0</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="p">(</span><span class="py">1</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">violation</span><span class="p">)::</span><span class="nc">float</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="nc">count</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">entry</span><span class="p">))</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">compliance_pct</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="data-discovery" class="position-relative d-flex align-items-center group">
<span>Data Discovery</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-discovery"
aria-haspopup="dialog"
aria-label="Share link: Data Discovery">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="self-service-discovery" class="position-relative d-flex align-items-center group">
<span>Self-Service Discovery</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="self-service-discovery"
aria-haspopup="dialog"
aria-label="Share link: Self-Service Discovery">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Enable users to discover data:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Search</span><span class="w"> </span><span class="py">catalog</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">keyword</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="py">CONTAINS</span><span class="w"> </span><span class="nv">$keyword</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">description</span><span class="w"> </span><span class="py">CONTAINS</span><span class="w"> </span><span class="nv">$keyword</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">ANY</span><span class="p">(</span><span class="py">tag</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">tags</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">tag</span><span class="w"> </span><span class="py">CONTAINS</span><span class="w"> </span><span class="nv">$keyword</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">description</span><span class="p">,</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">tags</span><span class="p">,</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">owner</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Browse</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">classification</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CLASSIFIED_AS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">level</span><span class="p">:</span><span class="nc">ClassificationLevel</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">level</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$classification</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">entry</span><span class="err">.</span><span class="py">description</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">related</span><span class="w"> </span><span class="py">datasets</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entry</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$dataset_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">RELATED_TO</span><span class="err">*</span><span class="nc">1</span><span class="err">.</span><span class="mf">.2</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">related</span><span class="p">:</span><span class="nc">CatalogEntry</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">related</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">related</span><span class="err">.</span><span class="py">description</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="best-practices" class="position-relative d-flex align-items-center group">
<span>Best Practices</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="best-practices"
aria-haspopup="dialog"
aria-label="Share link: Best Practices">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ol>
<li><strong>Establish Clear Ownership</strong>: Assign data stewards for all critical data assets</li>
<li><strong>Document Everything</strong>: Maintain comprehensive metadata for all data</li>
<li><strong>Automate Quality Checks</strong>: Run automated data quality checks regularly</li>
<li><strong>Track Lineage</strong>: Enable automatic lineage tracking for all data flows</li>
<li><strong>Classify Appropriately</strong>: Classify all data by sensitivity level</li>
<li><strong>Enforce Policies</strong>: Use automated policy enforcement, not just documentation</li>
<li><strong>Regular Audits</strong>: Conduct periodic governance audits</li>
<li><strong>User Education</strong>: Train users on governance policies and tools</li>
<li><strong>Measure Effectiveness</strong>: Track governance metrics and KPIs</li>
<li><strong>Continuous Improvement</strong>: Regularly review and update governance policies</li>
</ol>
<h3 id="related-topics" class="position-relative d-flex align-items-center group">
<span>Related Topics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="related-topics"
aria-haspopup="dialog"
aria-label="Share link: Related Topics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li><a
href="/tags/compliance/"
>Compliance</a>
- Regulatory compliance frameworks</li>
<li><a
href="/tags/audit-logging/"
>Audit Logging</a>
- Comprehensive audit trails</li>
<li><a
href="/tags/row-level-security/"
>Row-Level Security</a>
- Fine-grained access control</li>
<li><a
href="/tags/data-integrity/"
>Data Integrity</a>
- Data consistency and validation</li>
<li><a
href="/tags/encryption/"
>Encryption</a>
- Data protection with encryption</li>
<li><a
href="/tags/configuration/"
>Configuration</a>
- Governance configuration settings</li>
<li><a
href="/tags/schema/"
>Schema</a>
- Schema design and constraints</li>
<li><a
href="/docs/security/authorization/"
>Authorization</a>
- Permission management</li>
</ul>
Related Articles
Development
Developer guides for building with Geode including LSP integration, REPL usage, testing, and governance practices
Governance and Requirements Tracking
CANARY governance system for evidence-based development with 1,735+ markers tracking 2,190+ requirements across automated verification and …