You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
465 lines
36 KiB
XML
465 lines
36 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1400 920" font-family="Arial, Helvetica, sans-serif">
|
|
<defs>
|
|
<!-- Arrow marker -->
|
|
<marker id="arrow" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
<polygon points="0 0, 10 3.5, 0 7" fill="#2E5A88"/>
|
|
</marker>
|
|
<marker id="arrow-white" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
<polygon points="0 0, 10 3.5, 0 7" fill="#FFFFFF"/>
|
|
</marker>
|
|
<marker id="arrow-gray" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
<polygon points="0 0, 10 3.5, 0 7" fill="#999999"/>
|
|
</marker>
|
|
<!-- Drop shadow -->
|
|
<filter id="shadow" x="-2%" y="-2%" width="104%" height="104%">
|
|
<feDropShadow dx="1" dy="1" stdDeviation="2" flood-color="#00000020"/>
|
|
</filter>
|
|
<!-- Gradients -->
|
|
<linearGradient id="bronzeGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#CD7F32;stop-opacity:1"/>
|
|
<stop offset="100%" style="stop-color:#A0622E;stop-opacity:1"/>
|
|
</linearGradient>
|
|
<linearGradient id="silverGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#8E9EAB;stop-opacity:1"/>
|
|
<stop offset="100%" style="stop-color:#6B7B8D;stop-opacity:1"/>
|
|
</linearGradient>
|
|
<linearGradient id="goldGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#D4A017;stop-opacity:1"/>
|
|
<stop offset="100%" style="stop-color:#B8860B;stop-opacity:1"/>
|
|
</linearGradient>
|
|
<linearGradient id="navyGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#1B3A5C;stop-opacity:1"/>
|
|
<stop offset="100%" style="stop-color:#132A43;stop-opacity:1"/>
|
|
</linearGradient>
|
|
<linearGradient id="blueGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#3A7BBF;stop-opacity:1"/>
|
|
<stop offset="100%" style="stop-color:#2E5A88;stop-opacity:1"/>
|
|
</linearGradient>
|
|
</defs>
|
|
|
|
<!-- Background -->
|
|
<rect width="1400" height="920" fill="#F8FAFB" rx="8"/>
|
|
|
|
<!-- Title bar -->
|
|
<rect x="0" y="0" width="1400" height="52" fill="url(#navyGrad)" rx="8"/>
|
|
<rect x="0" y="40" width="1400" height="12" fill="url(#navyGrad)"/>
|
|
<text x="700" y="34" text-anchor="middle" fill="white" font-size="18" font-weight="bold">MEDALLION ARCHITECTURE — END-TO-END DATA FLOW</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- CROSS-CUTTING: Governance band (top) -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<rect x="20" y="64" width="1360" height="44" fill="#1B3A5C" rx="6" opacity="0.9"/>
|
|
<text x="40" y="91" fill="white" font-size="12" font-weight="bold">GOVERNANCE & METADATA</text>
|
|
<text x="280" y="91" fill="#B0C4DE" font-size="11">Microsoft Purview (Enterprise Catalog, Glossary, Classification)</text>
|
|
<text x="680" y="91" fill="#B0C4DE" font-size="11">│ Unity Catalog (Enforcement, ACLs)</text>
|
|
<text x="980" y="91" fill="#B0C4DE" font-size="11">│ Manta (Cross-Platform Lineage)</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- SOURCE SYSTEMS (left column) -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<rect x="28" y="125" width="150" height="530" fill="white" stroke="#CBD5E1" stroke-width="1" rx="8" filter="url(#shadow)"/>
|
|
<rect x="28" y="125" width="150" height="32" fill="#475569" rx="8"/>
|
|
<rect x="28" y="145" width="150" height="12" fill="#475569"/>
|
|
<text x="103" y="146" text-anchor="middle" fill="white" font-size="11" font-weight="bold">SOURCE SYSTEMS</text>
|
|
|
|
<!-- Source items -->
|
|
<rect x="40" y="168" width="126" height="36" fill="#F1F5F9" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
<text x="103" y="184" text-anchor="middle" fill="#334155" font-size="9" font-weight="bold">Core Banking</text>
|
|
<text x="103" y="196" text-anchor="middle" fill="#64748B" font-size="8">DB2, Oracle, SQL Server</text>
|
|
|
|
<rect x="40" y="212" width="126" height="36" fill="#F1F5F9" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
<text x="103" y="228" text-anchor="middle" fill="#334155" font-size="9" font-weight="bold">Insurance Systems</text>
|
|
<text x="103" y="240" text-anchor="middle" fill="#64748B" font-size="8">Policy Admin, Claims</text>
|
|
|
|
<rect x="40" y="256" width="126" height="36" fill="#F1F5F9" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
<text x="103" y="272" text-anchor="middle" fill="#334155" font-size="9" font-weight="bold">Wealth & Investment</text>
|
|
<text x="103" y="284" text-anchor="middle" fill="#64748B" font-size="8">Trading, Portfolio Mgmt</text>
|
|
|
|
<rect x="40" y="300" width="126" height="36" fill="#F1F5F9" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
<text x="103" y="316" text-anchor="middle" fill="#334155" font-size="9" font-weight="bold">CRM & Channels</text>
|
|
<text x="103" y="328" text-anchor="middle" fill="#64748B" font-size="8">Salesforce, Web, Mobile</text>
|
|
|
|
<rect x="40" y="344" width="126" height="36" fill="#F1F5F9" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
<text x="103" y="360" text-anchor="middle" fill="#334155" font-size="9" font-weight="bold">Payment Systems</text>
|
|
<text x="103" y="372" text-anchor="middle" fill="#64748B" font-size="8">Cards, Interac, SWIFT</text>
|
|
|
|
<rect x="40" y="388" width="126" height="36" fill="#F1F5F9" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
<text x="103" y="404" text-anchor="middle" fill="#334155" font-size="9" font-weight="bold">Event Streams</text>
|
|
<text x="103" y="416" text-anchor="middle" fill="#64748B" font-size="8">Kafka, Event Hub</text>
|
|
|
|
<rect x="40" y="432" width="126" height="36" fill="#F1F5F9" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
<text x="103" y="448" text-anchor="middle" fill="#334155" font-size="9" font-weight="bold">External & Regulatory</text>
|
|
<text x="103" y="460" text-anchor="middle" fill="#64748B" font-size="8">Credit Bureau, AMF, APIs</text>
|
|
|
|
<rect x="40" y="476" width="126" height="36" fill="#F1F5F9" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
<text x="103" y="492" text-anchor="middle" fill="#334155" font-size="9" font-weight="bold">Files & Mainframe</text>
|
|
<text x="103" y="504" text-anchor="middle" fill="#64748B" font-size="8">CSV, XML, COBOL extracts</text>
|
|
|
|
<rect x="40" y="520" width="126" height="36" fill="#F1F5F9" stroke="#94A3B8" stroke-width="1" rx="4"/>
|
|
<text x="103" y="536" text-anchor="middle" fill="#334155" font-size="9" font-weight="bold">MDM Hub</text>
|
|
<text x="103" y="548" text-anchor="middle" fill="#64748B" font-size="8">Customer 360, Ref Data</text>
|
|
|
|
<rect x="40" y="564" width="126" height="36" fill="#FFF7ED" stroke="#FB923C" stroke-width="1" rx="4"/>
|
|
<text x="103" y="580" text-anchor="middle" fill="#9A3412" font-size="9" font-weight="bold">IoT / Telematics</text>
|
|
<text x="103" y="592" text-anchor="middle" fill="#C2410C" font-size="8">Insurance Telemetry</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- INGESTION LAYER -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- Arrow from sources to ingestion -->
|
|
<line x1="178" y1="390" x2="205" y2="390" stroke="#2E5A88" stroke-width="2" marker-end="url(#arrow)"/>
|
|
|
|
<rect x="210" y="125" width="135" height="530" fill="white" stroke="#2E5A88" stroke-width="1.5" rx="8" filter="url(#shadow)"/>
|
|
<rect x="210" y="125" width="135" height="32" fill="url(#blueGrad)" rx="8"/>
|
|
<rect x="210" y="145" width="135" height="12" fill="url(#blueGrad)"/>
|
|
<text x="277" y="146" text-anchor="middle" fill="white" font-size="11" font-weight="bold">INGESTION</text>
|
|
|
|
<rect x="222" y="170" width="111" height="52" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1" rx="5"/>
|
|
<text x="277" y="188" text-anchor="middle" fill="#1E40AF" font-size="9" font-weight="bold">Azure Data Factory</text>
|
|
<text x="277" y="200" text-anchor="middle" fill="#3B82F6" font-size="8">Batch / CDC</text>
|
|
<text x="277" y="212" text-anchor="middle" fill="#3B82F6" font-size="8">Copy Activity, Watermarks</text>
|
|
|
|
<rect x="222" y="232" width="111" height="52" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1" rx="5"/>
|
|
<text x="277" y="250" text-anchor="middle" fill="#1E40AF" font-size="9" font-weight="bold">Auto Loader</text>
|
|
<text x="277" y="262" text-anchor="middle" fill="#3B82F6" font-size="8">File Ingestion</text>
|
|
<text x="277" y="274" text-anchor="middle" fill="#3B82F6" font-size="8">Schema Inference</text>
|
|
|
|
<rect x="222" y="294" width="111" height="52" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1" rx="5"/>
|
|
<text x="277" y="312" text-anchor="middle" fill="#1E40AF" font-size="9" font-weight="bold">Event Hub +</text>
|
|
<text x="277" y="324" text-anchor="middle" fill="#1E40AF" font-size="9" font-weight="bold">Structured Streaming</text>
|
|
<text x="277" y="336" text-anchor="middle" fill="#3B82F6" font-size="8">Real-Time / CDC</text>
|
|
|
|
<rect x="222" y="356" width="111" height="40" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1" rx="5"/>
|
|
<text x="277" y="374" text-anchor="middle" fill="#1E40AF" font-size="9" font-weight="bold">REST APIs</text>
|
|
<text x="277" y="386" text-anchor="middle" fill="#3B82F6" font-size="8">External Data Sources</text>
|
|
|
|
<!-- Orchestration -->
|
|
<rect x="222" y="420" width="111" height="44" fill="#DBEAFE" stroke="#2563EB" stroke-width="1.5" rx="5" stroke-dasharray="4,2"/>
|
|
<text x="277" y="438" text-anchor="middle" fill="#1E3A8A" font-size="9" font-weight="bold">Orchestration</text>
|
|
<text x="277" y="450" text-anchor="middle" fill="#2563EB" font-size="8">Databricks Workflows</text>
|
|
<text x="277" y="460" text-anchor="middle" fill="#2563EB" font-size="8">ADF Pipelines</text>
|
|
|
|
<!-- Metadata note -->
|
|
<rect x="222" y="478" width="111" height="38" fill="#F0FDF4" stroke="#22C55E" stroke-width="1" rx="5"/>
|
|
<text x="277" y="494" text-anchor="middle" fill="#166534" font-size="8" font-weight="bold">+ Metadata Tags</text>
|
|
<text x="277" y="506" text-anchor="middle" fill="#16A34A" font-size="8">_ingested_at, _batch_id</text>
|
|
|
|
<!-- ADLS Storage label -->
|
|
<rect x="222" y="530" width="111" height="32" fill="#1B3A5C" rx="4"/>
|
|
<text x="277" y="550" text-anchor="middle" fill="white" font-size="9" font-weight="bold">ADLS Gen2</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- BRONZE LAYER -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- Arrow ingestion to bronze -->
|
|
<line x1="345" y1="390" x2="372" y2="390" stroke="#2E5A88" stroke-width="2" marker-end="url(#arrow)"/>
|
|
|
|
<rect x="377" y="125" width="180" height="530" fill="white" stroke="#A0622E" stroke-width="2" rx="8" filter="url(#shadow)"/>
|
|
<rect x="377" y="125" width="180" height="36" fill="url(#bronzeGrad)" rx="8"/>
|
|
<rect x="377" y="149" width="180" height="12" fill="url(#bronzeGrad)"/>
|
|
<text x="467" y="149" text-anchor="middle" fill="white" font-size="13" font-weight="bold">BRONZE — RAW</text>
|
|
|
|
<rect x="389" y="175" width="156" height="44" fill="#FEF3C7" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="467" y="192" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">Immutable Append-Only</text>
|
|
<text x="467" y="204" text-anchor="middle" fill="#B45309" font-size="8">Raw data preserved as-is</text>
|
|
<text x="467" y="214" text-anchor="middle" fill="#B45309" font-size="8">Full auditability</text>
|
|
|
|
<rect x="389" y="229" width="156" height="44" fill="#FEF3C7" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="467" y="246" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">Delta Lake Format</text>
|
|
<text x="467" y="258" text-anchor="middle" fill="#B45309" font-size="8">ACID transactions</text>
|
|
<text x="467" y="268" text-anchor="middle" fill="#B45309" font-size="8">Time Travel (90 days min.)</text>
|
|
|
|
<rect x="389" y="283" width="156" height="44" fill="#FEF3C7" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="467" y="300" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">Schema-on-Read</text>
|
|
<text x="467" y="312" text-anchor="middle" fill="#B45309" font-size="8">Auto Loader inference</text>
|
|
<text x="467" y="322" text-anchor="middle" fill="#B45309" font-size="8">mergeSchema enabled</text>
|
|
|
|
<rect x="389" y="337" width="156" height="44" fill="#FEF3C7" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="467" y="354" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">Structural Quality Only</text>
|
|
<text x="467" y="366" text-anchor="middle" fill="#B45309" font-size="8">Row counts, null PK checks</text>
|
|
<text x="467" y="376" text-anchor="middle" fill="#B45309" font-size="8">Schema drift detection</text>
|
|
|
|
<rect x="389" y="391" width="156" height="36" fill="#FDE68A" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="467" y="408" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">Quarantine Table</text>
|
|
<text x="467" y="420" text-anchor="middle" fill="#B45309" font-size="8">Failed ingestions routed here</text>
|
|
|
|
<!-- UC registration -->
|
|
<rect x="389" y="445" width="156" height="36" fill="#1B3A5C" rx="4"/>
|
|
<text x="467" y="460" text-anchor="middle" fill="white" font-size="8" font-weight="bold">Unity Catalog</text>
|
|
<text x="467" y="472" text-anchor="middle" fill="#B0C4DE" font-size="8">bronze_*.* — Eng access only</text>
|
|
|
|
<!-- Storage -->
|
|
<rect x="389" y="495" width="156" height="36" fill="#1B3A5C" rx="4"/>
|
|
<text x="467" y="510" text-anchor="middle" fill="white" font-size="8" font-weight="bold">ADLS Gen2 — Delta Lake</text>
|
|
<text x="467" y="522" text-anchor="middle" fill="#B0C4DE" font-size="8">/bronze/{source}/{entity}/</text>
|
|
|
|
<!-- Organization note -->
|
|
<text x="467" y="552" text-anchor="middle" fill="#78716C" font-size="8" font-style="italic">Organized by source system</text>
|
|
<text x="467" y="564" text-anchor="middle" fill="#78716C" font-size="8" font-style="italic">and source entity</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- TRANSITION: Bronze → Silver -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<line x1="557" y1="350" x2="590" y2="350" stroke="#2E5A88" stroke-width="2.5" marker-end="url(#arrow)"/>
|
|
<line x1="557" y1="420" x2="590" y2="420" stroke="#2E5A88" stroke-width="2.5" marker-end="url(#arrow)"/>
|
|
|
|
<!-- Transition label -->
|
|
<rect x="558" y="370" width="32" height="40" fill="#2E5A88" rx="4"/>
|
|
<text x="574" y="386" text-anchor="middle" fill="white" font-size="8" font-weight="bold">DLT</text>
|
|
<text x="574" y="398" text-anchor="middle" fill="#B0C4DE" font-size="7">Quality</text>
|
|
<text x="574" y="408" text-anchor="middle" fill="#B0C4DE" font-size="7">Gates</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- SILVER LAYER -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<rect x="595" y="125" width="180" height="530" fill="white" stroke="#6B7B8D" stroke-width="2" rx="8" filter="url(#shadow)"/>
|
|
<rect x="595" y="125" width="180" height="36" fill="url(#silverGrad)" rx="8"/>
|
|
<rect x="595" y="149" width="180" height="12" fill="url(#silverGrad)"/>
|
|
<text x="685" y="149" text-anchor="middle" fill="white" font-size="13" font-weight="bold">SILVER — CURATED</text>
|
|
|
|
<rect x="607" y="175" width="156" height="44" fill="#F1F5F9" stroke="#64748B" stroke-width="1" rx="5"/>
|
|
<text x="685" y="192" text-anchor="middle" fill="#1E293B" font-size="9" font-weight="bold">Cleanse & Conform</text>
|
|
<text x="685" y="204" text-anchor="middle" fill="#475569" font-size="8">Standardize formats</text>
|
|
<text x="685" y="214" text-anchor="middle" fill="#475569" font-size="8">Normalize encodings</text>
|
|
|
|
<rect x="607" y="229" width="156" height="44" fill="#F1F5F9" stroke="#64748B" stroke-width="1" rx="5"/>
|
|
<text x="685" y="246" text-anchor="middle" fill="#1E293B" font-size="9" font-weight="bold">Apply Business Keys</text>
|
|
<text x="685" y="258" text-anchor="middle" fill="#475569" font-size="8">MDM integration</text>
|
|
<text x="685" y="268" text-anchor="middle" fill="#475569" font-size="8">Ref data mapping</text>
|
|
|
|
<rect x="607" y="283" width="156" height="44" fill="#F1F5F9" stroke="#64748B" stroke-width="1" rx="5"/>
|
|
<text x="685" y="300" text-anchor="middle" fill="#1E293B" font-size="9" font-weight="bold">Deduplicate & Resolve</text>
|
|
<text x="685" y="312" text-anchor="middle" fill="#475569" font-size="8">Entity resolution</text>
|
|
<text x="685" y="322" text-anchor="middle" fill="#475569" font-size="8">Cross-source merge</text>
|
|
|
|
<rect x="607" y="337" width="156" height="44" fill="#F1F5F9" stroke="#64748B" stroke-width="1" rx="5"/>
|
|
<text x="685" y="354" text-anchor="middle" fill="#1E293B" font-size="9" font-weight="bold">SCD Type 2 History</text>
|
|
<text x="685" y="366" text-anchor="middle" fill="#475569" font-size="8">effective_from / effective_to</text>
|
|
<text x="685" y="376" text-anchor="middle" fill="#475569" font-size="8">Full dimensional tracking</text>
|
|
|
|
<rect x="607" y="391" width="156" height="44" fill="#DCFCE7" stroke="#22C55E" stroke-width="1" rx="5"/>
|
|
<text x="685" y="406" text-anchor="middle" fill="#166534" font-size="9" font-weight="bold">DLT Quality Expectations</text>
|
|
<text x="685" y="418" text-anchor="middle" fill="#16A34A" font-size="8">Completeness, Validity</text>
|
|
<text x="685" y="428" text-anchor="middle" fill="#16A34A" font-size="8">Accuracy, Timeliness</text>
|
|
|
|
<!-- Security enforcement starts here -->
|
|
<rect x="607" y="445" width="156" height="36" fill="#FEE2E2" stroke="#EF4444" stroke-width="1" rx="5"/>
|
|
<text x="685" y="460" text-anchor="middle" fill="#991B1B" font-size="8" font-weight="bold">⛨ RLS / CLS / DDM</text>
|
|
<text x="685" y="472" text-anchor="middle" fill="#DC2626" font-size="8">Security enforced from here</text>
|
|
|
|
<!-- UC registration -->
|
|
<rect x="607" y="495" width="156" height="36" fill="#1B3A5C" rx="4"/>
|
|
<text x="685" y="510" text-anchor="middle" fill="white" font-size="8" font-weight="bold">Unity Catalog</text>
|
|
<text x="685" y="522" text-anchor="middle" fill="#B0C4DE" font-size="8">silver_*.* — Analyst access</text>
|
|
|
|
<!-- Storage -->
|
|
<rect x="607" y="545" width="156" height="30" fill="#1B3A5C" rx="4"/>
|
|
<text x="685" y="558" text-anchor="middle" fill="white" font-size="8" font-weight="bold">ADLS Gen2 — Delta Lake</text>
|
|
<text x="685" y="568" text-anchor="middle" fill="#B0C4DE" font-size="8">/silver/{domain}/{entity}/</text>
|
|
|
|
<text x="685" y="596" text-anchor="middle" fill="#78716C" font-size="8" font-style="italic">Organized by business domain</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- TRANSITION: Silver → Gold -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<line x1="775" y1="350" x2="808" y2="350" stroke="#2E5A88" stroke-width="2.5" marker-end="url(#arrow)"/>
|
|
<line x1="775" y1="420" x2="808" y2="420" stroke="#2E5A88" stroke-width="2.5" marker-end="url(#arrow)"/>
|
|
|
|
<!-- Transition label -->
|
|
<rect x="776" y="370" width="32" height="40" fill="#2E5A88" rx="4"/>
|
|
<text x="792" y="386" text-anchor="middle" fill="white" font-size="8" font-weight="bold">DLT</text>
|
|
<text x="792" y="398" text-anchor="middle" fill="#B0C4DE" font-size="7">SLA</text>
|
|
<text x="792" y="408" text-anchor="middle" fill="#B0C4DE" font-size="7">Gate</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- GOLD LAYER -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<rect x="813" y="125" width="180" height="530" fill="white" stroke="#B8860B" stroke-width="2" rx="8" filter="url(#shadow)"/>
|
|
<rect x="813" y="125" width="180" height="36" fill="url(#goldGrad)" rx="8"/>
|
|
<rect x="813" y="149" width="180" height="12" fill="url(#goldGrad)"/>
|
|
<text x="903" y="149" text-anchor="middle" fill="white" font-size="13" font-weight="bold">GOLD — PRODUCTS</text>
|
|
|
|
<rect x="825" y="175" width="156" height="38" fill="#FFFBEB" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="903" y="192" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">Star Schemas</text>
|
|
<text x="903" y="204" text-anchor="middle" fill="#B45309" font-size="8">Conformed dims + fact tables</text>
|
|
|
|
<rect x="825" y="221" width="156" height="38" fill="#FFFBEB" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="903" y="238" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">Wide Denormalized Tables</text>
|
|
<text x="903" y="250" text-anchor="middle" fill="#B45309" font-size="8">Optimized for Direct Lake</text>
|
|
|
|
<rect x="825" y="267" width="156" height="38" fill="#FFFBEB" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="903" y="284" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">Feature Tables</text>
|
|
<text x="903" y="296" text-anchor="middle" fill="#B45309" font-size="8">ML Feature Store (MLflow)</text>
|
|
|
|
<rect x="825" y="313" width="156" height="38" fill="#FFFBEB" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="903" y="330" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">KPI / Aggregate Tables</text>
|
|
<text x="903" y="342" text-anchor="middle" fill="#B45309" font-size="8">Financial, Risk, Regulatory</text>
|
|
|
|
<rect x="825" y="361" width="156" height="38" fill="#FFFBEB" stroke="#D97706" stroke-width="1" rx="5"/>
|
|
<text x="903" y="378" text-anchor="middle" fill="#92400E" font-size="9" font-weight="bold">Data Products</text>
|
|
<text x="903" y="390" text-anchor="middle" fill="#B45309" font-size="8">Customer 360, Risk Features</text>
|
|
|
|
<!-- Data contracts -->
|
|
<rect x="825" y="411" width="156" height="44" fill="#DCFCE7" stroke="#22C55E" stroke-width="1.5" rx="5"/>
|
|
<text x="903" y="428" text-anchor="middle" fill="#166534" font-size="9" font-weight="bold">Data Contracts</text>
|
|
<text x="903" y="440" text-anchor="middle" fill="#16A34A" font-size="8">Schema • Freshness SLA</text>
|
|
<text x="903" y="450" text-anchor="middle" fill="#16A34A" font-size="8">Quality • Access • Owner</text>
|
|
|
|
<!-- Optimization -->
|
|
<rect x="825" y="467" width="156" height="30" fill="#EDE9FE" stroke="#8B5CF6" stroke-width="1" rx="5"/>
|
|
<text x="903" y="482" text-anchor="middle" fill="#5B21B6" font-size="8" font-weight="bold">Z-ORDER / LIQUID Clustering</text>
|
|
<text x="903" y="492" text-anchor="middle" fill="#7C3AED" font-size="7">OPTIMIZE nightly • VACUUM</text>
|
|
|
|
<!-- UC registration -->
|
|
<rect x="825" y="510" width="156" height="36" fill="#1B3A5C" rx="4"/>
|
|
<text x="903" y="525" text-anchor="middle" fill="white" font-size="8" font-weight="bold">Unity Catalog</text>
|
|
<text x="903" y="537" text-anchor="middle" fill="#B0C4DE" font-size="8">gold_*.* — Broad access</text>
|
|
|
|
<!-- Storage -->
|
|
<rect x="825" y="560" width="156" height="30" fill="#1B3A5C" rx="4"/>
|
|
<text x="903" y="573" text-anchor="middle" fill="white" font-size="8" font-weight="bold">ADLS Gen2 — Delta Lake</text>
|
|
<text x="903" y="583" text-anchor="middle" fill="#B0C4DE" font-size="8">/gold/{product_domain}/</text>
|
|
|
|
<text x="903" y="610" text-anchor="middle" fill="#78716C" font-size="8" font-style="italic">Organized by data product</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- CONSUMPTION / SERVING (right column) -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- Arrows from Gold to Consumption -->
|
|
<line x1="993" y1="230" x2="1025" y2="195" stroke="#2E5A88" stroke-width="2" marker-end="url(#arrow)"/>
|
|
<line x1="993" y1="310" x2="1025" y2="320" stroke="#2E5A88" stroke-width="2" marker-end="url(#arrow)"/>
|
|
<line x1="993" y1="380" x2="1025" y2="430" stroke="#2E5A88" stroke-width="2" marker-end="url(#arrow)"/>
|
|
<line x1="993" y1="420" x2="1025" y2="530" stroke="#2E5A88" stroke-width="2" marker-end="url(#arrow)"/>
|
|
|
|
<rect x="1030" y="125" width="350" height="530" fill="white" stroke="#2E5A88" stroke-width="1.5" rx="8" filter="url(#shadow)"/>
|
|
<rect x="1030" y="125" width="350" height="36" fill="url(#blueGrad)" rx="8"/>
|
|
<rect x="1030" y="149" width="350" height="12" fill="url(#blueGrad)"/>
|
|
<text x="1205" y="149" text-anchor="middle" fill="white" font-size="13" font-weight="bold">SERVING & CONSUMPTION</text>
|
|
|
|
<!-- 5a Power BI / Fabric -->
|
|
<rect x="1045" y="172" width="320" height="75" fill="#FFF7ED" stroke="#F59E0B" stroke-width="1.5" rx="6"/>
|
|
<text x="1060" y="190" fill="#92400E" font-size="10" font-weight="bold">5a BI — Power BI via Fabric Direct Lake</text>
|
|
<rect x="1060" y="198" width="130" height="20" fill="#FEF3C7" stroke="#D97706" stroke-width="0.5" rx="3"/>
|
|
<text x="1125" y="212" text-anchor="middle" fill="#92400E" font-size="8">OneLake Shortcuts</text>
|
|
<text x="1200" y="212" fill="#78716C" font-size="8">→</text>
|
|
<rect x="1215" y="198" width="130" height="20" fill="#FEF3C7" stroke="#D97706" stroke-width="0.5" rx="3"/>
|
|
<text x="1280" y="212" text-anchor="middle" fill="#92400E" font-size="8">Direct Lake Semantic Model</text>
|
|
<text x="1060" y="236" fill="#B45309" font-size="8">Enterprise BI for 55,000 users • Import-like perf, DirectQuery freshness • No data duplication</text>
|
|
|
|
<!-- 5b SQL / Analytics -->
|
|
<rect x="1045" y="260" width="320" height="75" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1.5" rx="6"/>
|
|
<text x="1060" y="278" fill="#1E3A8A" font-size="10" font-weight="bold">5b Analytics — Databricks SQL Warehouses</text>
|
|
<rect x="1060" y="286" width="80" height="20" fill="#DBEAFE" stroke="#3B82F6" stroke-width="0.5" rx="3"/>
|
|
<text x="1100" y="300" text-anchor="middle" fill="#1E40AF" font-size="8">SQL Endpoint</text>
|
|
<rect x="1150" y="286" width="80" height="20" fill="#DBEAFE" stroke="#3B82F6" stroke-width="0.5" rx="3"/>
|
|
<text x="1190" y="300" text-anchor="middle" fill="#1E40AF" font-size="8">JDBC/ODBC</text>
|
|
<rect x="1240" y="286" width="80" height="20" fill="#DBEAFE" stroke="#3B82F6" stroke-width="0.5" rx="3"/>
|
|
<text x="1280" y="300" text-anchor="middle" fill="#1E40AF" font-size="8">Notebooks</text>
|
|
<text x="1060" y="324" fill="#2563EB" font-size="8">Ad-hoc queries • Application data feeds • Data science exploration • Genie NL queries</text>
|
|
|
|
<!-- 5c AI/ML -->
|
|
<rect x="1045" y="348" width="320" height="88" fill="#F0FDF4" stroke="#22C55E" stroke-width="1.5" rx="6"/>
|
|
<text x="1060" y="366" fill="#166534" font-size="10" font-weight="bold">5c AI/ML — Databricks ML Platform</text>
|
|
<rect x="1060" y="374" width="90" height="20" fill="#DCFCE7" stroke="#22C55E" stroke-width="0.5" rx="3"/>
|
|
<text x="1105" y="388" text-anchor="middle" fill="#166534" font-size="8">Feature Store</text>
|
|
<rect x="1160" y="374" width="90" height="20" fill="#DCFCE7" stroke="#22C55E" stroke-width="0.5" rx="3"/>
|
|
<text x="1205" y="388" text-anchor="middle" fill="#166534" font-size="8">Model Serving</text>
|
|
<rect x="1260" y="374" width="90" height="20" fill="#DCFCE7" stroke="#22C55E" stroke-width="0.5" rx="3"/>
|
|
<text x="1305" y="388" text-anchor="middle" fill="#166534" font-size="8">MLflow Registry</text>
|
|
<rect x="1060" y="400" width="90" height="20" fill="#DCFCE7" stroke="#22C55E" stroke-width="0.5" rx="3"/>
|
|
<text x="1105" y="414" text-anchor="middle" fill="#166534" font-size="8">Vector Search</text>
|
|
<rect x="1160" y="400" width="90" height="20" fill="#DCFCE7" stroke="#22C55E" stroke-width="0.5" rx="3"/>
|
|
<text x="1205" y="414" text-anchor="middle" fill="#166534" font-size="8">Azure OpenAI</text>
|
|
<rect x="1260" y="400" width="90" height="20" fill="#DCFCE7" stroke="#22C55E" stroke-width="0.5" rx="3"/>
|
|
<text x="1305" y="414" text-anchor="middle" fill="#166534" font-size="8">RAG Pipelines</text>
|
|
|
|
<!-- 5d SAS Viya -->
|
|
<rect x="1045" y="450" width="320" height="75" fill="#FAF5FF" stroke="#8B5CF6" stroke-width="1.5" rx="6"/>
|
|
<text x="1060" y="468" fill="#5B21B6" font-size="10" font-weight="bold">5d Specialized — SAS Viya</text>
|
|
<rect x="1060" y="476" width="80" height="20" fill="#EDE9FE" stroke="#8B5CF6" stroke-width="0.5" rx="3"/>
|
|
<text x="1100" y="490" text-anchor="middle" fill="#5B21B6" font-size="8">Compute Srv</text>
|
|
<rect x="1150" y="476" width="100" height="20" fill="#EDE9FE" stroke="#8B5CF6" stroke-width="0.5" rx="3"/>
|
|
<text x="1200" y="490" text-anchor="middle" fill="#5B21B6" font-size="8">Model Manager</text>
|
|
<rect x="1260" y="476" width="90" height="20" fill="#EDE9FE" stroke="#8B5CF6" stroke-width="0.5" rx="3"/>
|
|
<text x="1305" y="490" text-anchor="middle" fill="#5B21B6" font-size="8">Visual Analytics</text>
|
|
<text x="1060" y="514" fill="#7C3AED" font-size="8">Actuarial models • Risk scoring • Regulatory models • Econometrics</text>
|
|
|
|
<!-- Write-back arrow from SAS -->
|
|
<path d="M 1205 525 L 1205 550 L 903 550 L 903 530" stroke="#8B5CF6" stroke-width="1.5" fill="none" stroke-dasharray="6,3" marker-end="url(#arrow)"/>
|
|
<text x="1050" y="545" fill="#7C3AED" font-size="8" font-style="italic">Write-back via ADLS staging → Databricks → Gold</text>
|
|
|
|
<!-- 5e APIs -->
|
|
<rect x="1045" y="570" width="320" height="42" fill="#F1F5F9" stroke="#64748B" stroke-width="1" rx="6"/>
|
|
<text x="1060" y="588" fill="#334155" font-size="10" font-weight="bold">5e APIs</text>
|
|
<text x="1120" y="588" fill="#64748B" font-size="9">REST / GraphQL via Model Serving or Azure Functions</text>
|
|
<text x="1060" y="604" fill="#64748B" font-size="8">Application integration • Partner data sharing • Real-time scoring endpoints</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- CROSS-CUTTING: Security band (bottom) -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<rect x="20" y="668" width="1360" height="44" fill="#7F1D1D" rx="6" opacity="0.9"/>
|
|
<text x="40" y="695" fill="white" font-size="12" font-weight="bold">SECURITY & PRIVACY</text>
|
|
<text x="230" y="695" fill="#FCA5A5" font-size="11">Azure Entra ID (SSO/MFA)</text>
|
|
<text x="440" y="695" fill="#FCA5A5" font-size="11">│ RBAC + ABAC</text>
|
|
<text x="590" y="695" fill="#FCA5A5" font-size="11">│ RLS / CLS / DDM</text>
|
|
<text x="770" y="695" fill="#FCA5A5" font-size="11">│ Encryption at Rest/Transit</text>
|
|
<text x="1010" y="695" fill="#FCA5A5" font-size="11">│ DLP (Purview)</text>
|
|
<text x="1170" y="695" fill="#FCA5A5" font-size="11">│ Privacy (Law 25 / PIPEDA)</text>
|
|
|
|
<!-- CROSS-CUTTING: Observability band -->
|
|
<rect x="20" y="720" width="1360" height="44" fill="#475569" rx="6" opacity="0.9"/>
|
|
<text x="40" y="747" fill="white" font-size="12" font-weight="bold">OBSERVABILITY & OPERATIONS</text>
|
|
<text x="340" y="747" fill="#CBD5E1" font-size="11">Pipeline Monitoring (ADF, Databricks Workflows)</text>
|
|
<text x="730" y="747" fill="#CBD5E1" font-size="11">│ Cost Management (Azure + DBU)</text>
|
|
<text x="1020" y="747" fill="#CBD5E1" font-size="11">│ SLA Tracking & Alerting</text>
|
|
<text x="1250" y="747" fill="#CBD5E1" font-size="11">│ FinOps</text>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<!-- LEGEND -->
|
|
<!-- ═══════════════════════════════════════════════════════════════ -->
|
|
<rect x="20" y="780" width="1360" height="130" fill="white" stroke="#E2E8F0" stroke-width="1" rx="6"/>
|
|
<text x="40" y="802" fill="#1E293B" font-size="11" font-weight="bold">LEGEND</text>
|
|
|
|
<!-- Row 1 -->
|
|
<rect x="40" y="812" width="30" height="14" fill="url(#bronzeGrad)" rx="2"/>
|
|
<text x="78" y="824" fill="#334155" font-size="9">Bronze — Raw immutable data</text>
|
|
|
|
<rect x="260" y="812" width="30" height="14" fill="url(#silverGrad)" rx="2"/>
|
|
<text x="298" y="824" fill="#334155" font-size="9">Silver — Curated & conformed</text>
|
|
|
|
<rect x="490" y="812" width="30" height="14" fill="url(#goldGrad)" rx="2"/>
|
|
<text x="528" y="824" fill="#334155" font-size="9">Gold — Business-ready products</text>
|
|
|
|
<rect x="730" y="812" width="30" height="14" fill="url(#blueGrad)" rx="2"/>
|
|
<text x="768" y="824" fill="#334155" font-size="9">Ingestion / Serving</text>
|
|
|
|
<rect x="940" y="812" width="30" height="14" fill="#1B3A5C" rx="2"/>
|
|
<text x="978" y="824" fill="#334155" font-size="9">Unity Catalog / ADLS Gen2</text>
|
|
|
|
<!-- Row 2 -->
|
|
<line x1="40" y1="848" x2="70" y2="848" stroke="#2E5A88" stroke-width="2.5" marker-end="url(#arrow)"/>
|
|
<text x="78" y="852" fill="#334155" font-size="9">Data flow direction</text>
|
|
|
|
<line x1="260" y1="848" x2="290" y2="848" stroke="#8B5CF6" stroke-width="1.5" stroke-dasharray="6,3"/>
|
|
<text x="298" y="852" fill="#334155" font-size="9">Write-back path (SAS → Gold)</text>
|
|
|
|
<rect x="490" y="840" width="30" height="16" fill="#DCFCE7" stroke="#22C55E" stroke-width="1" rx="2"/>
|
|
<text x="528" y="852" fill="#334155" font-size="9">Quality gates / Data contracts</text>
|
|
|
|
<rect x="730" y="840" width="30" height="16" fill="#FEE2E2" stroke="#EF4444" stroke-width="1" rx="2"/>
|
|
<text x="768" y="852" fill="#334155" font-size="9">Security enforcement (RLS/CLS/DDM)</text>
|
|
|
|
<rect x="940" y="840" width="40" height="16" fill="#2E5A88" rx="3"/>
|
|
<text x="950" y="852" fill="white" font-size="7" font-weight="bold">DLT</text>
|
|
<text x="988" y="852" fill="#334155" font-size="9">Delta Live Tables transition pipeline</text>
|
|
|
|
<!-- Row 3 -->
|
|
<text x="40" y="880" fill="#334155" font-size="9" font-weight="bold">Technology mapping:</text>
|
|
<text x="170" y="880" fill="#1E40AF" font-size="9">Databricks = Data Engineering, SQL Warehouses, ML/AI, Unity Catalog</text>
|
|
<text x="620" y="880" fill="#92400E" font-size="9">│ Microsoft Fabric = Power BI Direct Lake serving only</text>
|
|
<text x="960" y="880" fill="#5B21B6" font-size="9">│ SAS Viya = Actuarial, Risk, Regulatory models</text>
|
|
|
|
<text x="40" y="900" fill="#64748B" font-size="9" font-style="italic">All layers share ADLS Gen2 as the common storage substrate with Delta Lake as the canonical format. • Lineage tracked end-to-end by Manta + Unity Catalog + Purview.</text>
|
|
|
|
</svg>
|