<mxfile host="app.diagrams.net" agent="Claude" version="24.0.0">
  <diagram id="flow" name="1 · Process Flow">
    <mxGraphModel dx="1600" dy="950" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="950" background="#FFFFFF" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />

        <!-- Title -->
        <mxCell id="t1" value="SQL Server (On-Prem) → Snowflake · Data Migration Process Flow" style="text;html=1;fontSize=20;fontStyle=1;fontColor=#1F2933;align=left;verticalAlign=middle;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="10" width="1100" height="34" as="geometry" />
        </mxCell>
        <mxCell id="t2" value="Data only · 100s of source databases · tables only · 3–4 TB · ≤16 columns per table · source stays live · bulk historical load → ongoing delta sync → parallel run" style="text;html=1;fontSize=12;fontColor=#616E7C;align=left;verticalAlign=middle;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="40" width="1100" height="22" as="geometry" />
        </mxCell>

        <!-- Phase strip -->
        <mxCell id="ph0" value="&lt;b&gt;0&lt;/b&gt; · Assess &amp;amp; Discover" style="shape=step;perimeter=stepPerimeter;fixedSize=1;size=14;whiteSpace=wrap;html=1;fillColor=#F0F2F5;strokeColor=#9AA5B1;strokeWidth=1;fontSize=11;fontColor=#1F2933;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="76" width="253" height="36" as="geometry" />
        </mxCell>
        <mxCell id="ph1" value="&lt;b&gt;1&lt;/b&gt; · Snowflake Setup" style="shape=step;perimeter=stepPerimeter;fixedSize=1;size=14;whiteSpace=wrap;html=1;fillColor=#E3F4FB;strokeColor=#29B5E8;strokeWidth=1;fontSize=11;fontColor=#1F2933;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="293" y="76" width="253" height="36" as="geometry" />
        </mxCell>
        <mxCell id="ph2" value="&lt;b&gt;2&lt;/b&gt; · Historical Load (one-time)" style="shape=step;perimeter=stepPerimeter;fixedSize=1;size=14;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#2E7D32;strokeWidth=1;fontSize=11;fontColor=#1F2933;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="546" y="76" width="253" height="36" as="geometry" />
        </mxCell>
        <mxCell id="ph3" value="&lt;b&gt;3&lt;/b&gt; · Delta Sync (ongoing)" style="shape=step;perimeter=stepPerimeter;fixedSize=1;size=14;whiteSpace=wrap;html=1;fillColor=#FDF0E4;strokeColor=#E67E22;strokeWidth=1;fontSize=11;fontColor=#1F2933;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="799" y="76" width="253" height="36" as="geometry" />
        </mxCell>
        <mxCell id="ph4" value="&lt;b&gt;4&lt;/b&gt; · Validate &amp;amp; Parallel Run" style="shape=step;perimeter=stepPerimeter;fixedSize=1;size=14;whiteSpace=wrap;html=1;fillColor=#F3E8F7;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontColor=#1F2933;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1052" y="76" width="253" height="36" as="geometry" />
        </mxCell>
        <mxCell id="ph5" value="&lt;b&gt;5&lt;/b&gt; · Cutover (later)" style="shape=step;perimeter=stepPerimeter;fixedSize=1;size=14;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9AA5B1;strokeWidth=1;dashed=1;fontSize=11;fontColor=#616E7C;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1305" y="76" width="253" height="36" as="geometry" />
        </mxCell>

        <!-- Zone containers -->
        <mxCell id="zOn" value="ON-PREM · Client Network" style="rounded=1;arcSize=3;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=8;fontStyle=1;fontSize=12;fontColor=#3E4C59;fillColor=#F7F8FA;strokeColor=#9AA5B1;strokeWidth=1;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="135" width="360" height="570" as="geometry" />
        </mxCell>
        <mxCell id="zIn" value="INGESTION" style="rounded=1;arcSize=3;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=8;fontStyle=1;fontSize=12;fontColor=#3E4C59;fillColor=#FFFFFF;strokeColor=#B0B7C3;strokeWidth=1;dashed=1;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="430" y="135" width="560" height="570" as="geometry" />
        </mxCell>
        <mxCell id="zSf" value="SNOWFLAKE · Cloud" style="rounded=1;arcSize=3;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=8;fontStyle=1;fontSize=12;fontColor=#0B6E99;fillColor=#F2FAFD;strokeColor=#29B5E8;strokeWidth=1;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1020" y="135" width="540" height="570" as="geometry" />
        </mxCell>

        <!-- On-prem nodes -->
        <mxCell id="sql" value="&lt;b&gt;SQL Server&lt;/b&gt;&lt;br&gt;on-prem source&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;(stays live)&lt;/font&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=10;fillColor=#FFFFFF;strokeColor=#52606D;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="65" y="330" width="125" height="100" as="geometry" />
        </mxCell>
        <mxCell id="bulk" value="&lt;b&gt;Bulk Extract&lt;/b&gt;&lt;br&gt;Python → Parquet (primary)&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;bcp for numeric-only tables&lt;/font&gt;" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2E7D32;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="225" y="212" width="160" height="68" as="geometry" />
        </mxCell>
        <mxCell id="ct" value="&lt;b&gt;Change Tracking / CDC&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;enabled with DBA approval&lt;/font&gt;" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E67E22;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="230" y="481" width="145" height="62" as="geometry" />
        </mxCell>
        <mxCell id="ctver" value="&lt;b&gt;Record CT version&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;before bulk extract –&lt;br&gt;delta starts from here&lt;/font&gt;" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FFFBF7;strokeColor=#E67E22;strokeWidth=1;dashed=1;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="230" y="335" width="145" height="58" as="geometry" />
        </mxCell>
        <mxCell id="eCv" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#E67E22;dashed=1;endArrow=blockThin;endFill=1;" edge="1" parent="1" source="ctver" target="ct">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="onnote" value="Pre-checks: PKs on all tables · DBA approval for Change Tracking · upload bandwidth · type watch-outs: char padding (RTRIM), nvarchar Unicode, varbinary size, bit → BOOLEAN, datetime → TIMESTAMP_NTZ(3)" style="text;html=1;whiteSpace=wrap;fontSize=10;fontColor=#7B8794;fontStyle=2;align=left;verticalAlign=top;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="60" y="600" width="325" height="80" as="geometry" />
        </mxCell>

        <!-- Historical row -->
        <mxCell id="hHdr" value="Historical Load · one-time bulk" style="text;html=1;fontSize=11;fontStyle=1;fontColor=#2E7D32;align=left;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="460" y="175" width="300" height="22" as="geometry" />
        </mxCell>
        <mxCell id="files" value="&lt;b&gt;Parquet (Snappy)&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;100–250 MB files&lt;br&gt;~0.8–1.3 TB total&lt;/font&gt;" style="shape=note;size=12;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2E7D32;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="460" y="212" width="140" height="68" as="geometry" />
        </mxCell>
        <mxCell id="put" value="&lt;b&gt;PUT&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;SnowSQL / Python&lt;/font&gt;" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2E7D32;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="650" y="215" width="120" height="62" as="geometry" />
        </mxCell>
        <mxCell id="hNote" value="Parallel per table · restartable by chunk · no intermediate cloud storage · upload bandwidth drives timeline (1 TB ≈ 23 h @ 100 Mbps)" style="text;html=1;whiteSpace=wrap;fontSize=10;fontColor=#7B8794;fontStyle=2;align=left;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="460" y="292" width="510" height="34" as="geometry" />
        </mxCell>

        <!-- Delta group -->
        <mxCell id="dHdr" value="Delta Sync · ongoing — choose ONE (see page 2)" style="text;html=1;fontSize=11;fontStyle=1;fontColor=#C25E0B;align=left;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="460" y="372" width="420" height="22" as="geometry" />
        </mxCell>
        <mxCell id="dGrp" value="" style="rounded=1;arcSize=5;whiteSpace=wrap;html=1;fillColor=#FFFBF7;strokeColor=#E67E22;strokeWidth=1;dashed=1;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="450" y="402" width="520" height="220" as="geometry" />
        </mxCell>
        <mxCell id="optA" value="&lt;b&gt;A · Openflow SQL Server connector&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;Snowflake-native · near real-time · choose if minutes-latency is required&lt;/font&gt;" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E67E22;strokeWidth=1;fontSize=11;align=left;spacingLeft=12;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="470" y="420" width="480" height="52" as="geometry" />
        </mxCell>
        <mxCell id="optB" value="&lt;b&gt;B · Python + Airflow&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#2E7D32&quot;&gt;&lt;b&gt;★ RECOMMENDED&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;Change Tracking → Parquet → stage → MERGE · daily / hourly&lt;/font&gt;" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#EEF7EF;strokeColor=#2E7D32;strokeWidth=1;fontSize=11;align=left;spacingLeft=12;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="470" y="486" width="480" height="52" as="geometry" />
        </mxCell>
        <mxCell id="optC" value="&lt;b&gt;C · Fivetran/HVR · Qlik Replicate&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;licensed · choose if the client prefers buying over building&lt;/font&gt;" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E67E22;strokeWidth=1;fontSize=11;align=left;spacingLeft=12;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="470" y="552" width="480" height="52" as="geometry" />
        </mxCell>

        <mxCell id="dNote" value="A and C include a built-in snapshot – not used for the 3–4 TB history (slow, long load on the live source)." style="text;html=1;whiteSpace=wrap;fontSize=10;fontColor=#7B8794;fontStyle=2;align=left;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="455" y="628" width="515" height="22" as="geometry" />
        </mxCell>
        <mxCell id="dNo" value="&lt;b&gt;✕ Not recommended:&lt;/b&gt; ADF / SSIS (extra Blob staging) · watermark-only delta (misses deletes) · daily full reload (3–4 TB/day)" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#FDF2F1;strokeColor=#E5A39B;strokeWidth=1;fontSize=10;fontColor=#8A1C12;align=left;spacingLeft=10;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="450" y="655" width="520" height="36" as="geometry" />
        </mxCell>

        <!-- Snowflake nodes -->
        <mxCell id="stage" value="&lt;b&gt;Internal Stage&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;@MIG_STAGE&lt;/font&gt;" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#29B5E8;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1050" y="215" width="125" height="62" as="geometry" />
        </mxCell>
        <mxCell id="raw" value="&lt;b&gt;LANDING&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;PRD_ADMIN · files +&lt;br&gt;CT change batches&lt;/font&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8;fillColor=#FFFFFF;strokeColor=#29B5E8;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1205" y="318" width="150" height="94" as="geometry" />
        </mxCell>
        <mxCell id="cur" value="&lt;b&gt;PRD_RAW (Bronze)&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;exact mirror · schema&lt;br&gt;per source DB_SCHEMA&lt;/font&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=8;fillColor=#E3F4FB;strokeColor=#29B5E8;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1390" y="318" width="160" height="94" as="geometry" />
        </mxCell>
        <mxCell id="found" value="&lt;b&gt;Foundations (Phase 1) – see page 3&lt;/b&gt;&lt;br&gt;• 2 accounts: NONPROD (dev+uat) · PROD&lt;br&gt;• Enterprise edition · same cloud/region&lt;br&gt;• Functional + database roles · SSO / SCIM / MFA&lt;br&gt;• Tag-based masking · network policy&lt;br&gt;• LOAD_WH &amp;amp; QUERY_WH · auto-suspend 60s&lt;br&gt;• Resource monitors · cost alerts" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9ED8F0;strokeWidth=1;fontSize=10;align=left;verticalAlign=top;spacingLeft=12;spacingTop=8;fontColor=#3E4C59;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1050" y="520" width="340" height="150" as="geometry" />
        </mxCell>

        <!-- Validation strip -->
        <mxCell id="zVal" value="VALIDATE &amp;amp; PARALLEL RUN · compare source vs Snowflake on every load" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=6;fontStyle=1;fontSize=12;fontColor=#5B2C83;fillColor=#FAF6FC;strokeColor=#7B3FA0;strokeWidth=1;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="735" width="1520" height="105" as="geometry" />
        </mxCell>
        <mxCell id="v1" value="Row counts per table" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="70" y="775" width="200" height="46" as="geometry" />
        </mxCell>
        <mxCell id="v2" value="SUM of numeric columns" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="320" y="775" width="200" height="46" as="geometry" />
        </mxCell>
        <mxCell id="v3" value="MIN / MAX of dates &amp;amp; keys" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="570" y="775" width="200" height="46" as="geometry" />
        </mxCell>
        <mxCell id="v4" value="Per-partition aggregates" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="820" y="775" width="200" height="46" as="geometry" />
        </mxCell>
        <mxCell id="v5" value="Reconciliation report" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1070" y="775" width="200" height="46" as="geometry" />
        </mxCell>
        <mxCell id="v6" value="&lt;b&gt;Sign-off → Cutover&lt;/b&gt;" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#F3E8F7;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1320" y="775" width="200" height="46" as="geometry" />
        </mxCell>

        <!-- Legend & footer -->
        <mxCell id="leg" value="&lt;font color=&quot;#2E7D32&quot;&gt;━━━&lt;/font&gt; Historical load&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#E67E22&quot;&gt;━━━&lt;/font&gt; Delta sync&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#29B5E8&quot;&gt;━━━&lt;/font&gt; Inside Snowflake&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#7B3FA0&quot;&gt;╍╍╍&lt;/font&gt; Validation" style="text;html=1;fontSize=11;fontColor=#3E4C59;align=left;verticalAlign=middle;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="855" width="800" height="26" as="geometry" />
        </mxCell>
        <mxCell id="foot" value="Prepared by: Jitendra Chauhan" style="text;html=1;fontSize=10;fontColor=#7B8794;align=right;verticalAlign=middle;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="1260" y="855" width="300" height="26" as="geometry" />
        </mxCell>

        <!-- Edges -->
        <mxCell id="e1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#2E7D32;endArrow=blockThin;endFill=1;exitX=1;exitY=0.3;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="sql" target="bulk">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#E67E22;endArrow=blockThin;endFill=1;exitX=1;exitY=0.7;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="sql" target="ct">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#2E7D32;endArrow=blockThin;endFill=1;" edge="1" parent="1" source="bulk" target="files">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#2E7D32;endArrow=blockThin;endFill=1;" edge="1" parent="1" source="files" target="put">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e5" value="upload" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#2E7D32;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#2E7D32;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="put" target="stage">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e6" value="COPY INTO" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#2E7D32;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#2E7D32;labelBackgroundColor=#F2FAFD;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="stage" target="raw">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#E67E22;endArrow=blockThin;endFill=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ct" target="dGrp">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e8" value="snapshot + changes" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#E67E22;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#C25E0B;labelBackgroundColor=#F2FAFD;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="dGrp" target="raw">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e9" value="MERGE" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#29B5E8;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#0B6E99;labelBackgroundColor=#F2FAFD;" edge="1" parent="1" source="raw" target="cur">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e10" value="source metrics" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#7B3FA0;dashed=1;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#5B2C83;labelBackgroundColor=#F7F8FA;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.06;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="sql" target="zVal">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e11" value="target metrics" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#7B3FA0;dashed=1;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#5B2C83;labelBackgroundColor=#F2FAFD;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.945;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="cur" target="zVal">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ev1" style="edgeStyle=orthogonalEdgeStyle;html=1;strokeWidth=1;strokeColor=#7B3FA0;endArrow=blockThin;endFill=1;" edge="1" parent="1" source="v1" target="v2"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="ev2" style="edgeStyle=orthogonalEdgeStyle;html=1;strokeWidth=1;strokeColor=#7B3FA0;endArrow=blockThin;endFill=1;" edge="1" parent="1" source="v2" target="v3"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="ev3" style="edgeStyle=orthogonalEdgeStyle;html=1;strokeWidth=1;strokeColor=#7B3FA0;endArrow=blockThin;endFill=1;" edge="1" parent="1" source="v3" target="v4"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="ev4" style="edgeStyle=orthogonalEdgeStyle;html=1;strokeWidth=1;strokeColor=#7B3FA0;endArrow=blockThin;endFill=1;" edge="1" parent="1" source="v4" target="v5"><mxGeometry relative="1" as="geometry" /></mxCell>
        <mxCell id="ev5" style="edgeStyle=orthogonalEdgeStyle;html=1;strokeWidth=1;strokeColor=#7B3FA0;endArrow=blockThin;endFill=1;" edge="1" parent="1" source="v5" target="v6"><mxGeometry relative="1" as="geometry" /></mxCell>
      </root>
    </mxGraphModel>
  </diagram>

  <diagram id="decide" name="2 · Delta Tool Decision">
    <mxGraphModel dx="900" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="820" pageHeight="790" background="#FFFFFF" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />

        <mxCell id="d-t" value="Choosing the Delta Sync Option" style="text;html=1;fontSize=20;fontStyle=1;fontColor=#1F2933;align=left;verticalAlign=middle;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="10" width="700" height="34" as="geometry" />
        </mxCell>
        <mxCell id="d-pre" value="&lt;b&gt;Context:&lt;/b&gt; 3–4 TB · tables only · ≤16 columns · 10 simple data types.&lt;br&gt;&lt;b&gt;Before any option:&lt;/b&gt; primary keys on all tables · DBA approval for Change Tracking / CDC · SQL Server version &amp;amp; edition check · delete handling agreed" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#F7F8FA;strokeColor=#9AA5B1;strokeWidth=1;fontSize=11;align=left;spacingLeft=12;fontColor=#3E4C59;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="56" width="740" height="62" as="geometry" />
        </mxCell>

        <mxCell id="d1" value="How fresh must&lt;br&gt;delta data be?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#52606D;strokeWidth=1;fontSize=11;fontStyle=1;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="300" y="135" width="220" height="115" as="geometry" />
        </mxCell>
        <mxCell id="d2" value="Network path from&lt;br&gt;Snowflake to on-prem&lt;br&gt;allowed?&lt;br&gt;&lt;font color=&quot;#7B8794&quot; style=&quot;font-size:9px&quot;&gt;VPN / Private Link / IP allow-list&lt;/font&gt;" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#52606D;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="60" y="300" width="240" height="135" as="geometry" />
        </mxCell>
        <mxCell id="d3" value="Licence budget&lt;br&gt;AND many tables&lt;br&gt;(100+)?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#52606D;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="520" y="300" width="240" height="135" as="geometry" />
        </mxCell>

        <mxCell id="oA" value="&lt;font color=&quot;#C25E0B&quot;&gt;Option A&lt;/font&gt;&lt;br&gt;&lt;b&gt;Openflow SQL Server connector&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;native · CDC or Change Tracking&lt;/font&gt;" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FDF0E4;strokeColor=#E67E22;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="30" y="495" width="210" height="80" as="geometry" />
        </mxCell>
        <mxCell id="oC" value="&lt;font color=&quot;#C25E0B&quot;&gt;Option C&lt;/font&gt;&lt;br&gt;&lt;b&gt;Fivetran/HVR · Qlik Replicate&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;agent inside network, outbound only&lt;/font&gt;" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FDF0E4;strokeColor=#E67E22;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="305" y="495" width="210" height="80" as="geometry" />
        </mxCell>
        <mxCell id="oB" value="&lt;font color=&quot;#2E7D32&quot;&gt;&lt;b&gt;★ Option B · RECOMMENDED&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;b&gt;Python + Airflow&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;Change Tracking → stage → MERGE&lt;/font&gt;" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#EEF7EF;strokeColor=#2E7D32;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="580" y="495" width="210" height="80" as="geometry" />
        </mxCell>

        <mxCell id="d-note" value="&lt;b&gt;Historical load (3–4 TB)&lt;/b&gt; always uses bulk export – Python → Parquet → PUT → COPY INTO (bcp for numeric-only tables) – whichever delta option is chosen. Record the Change Tracking version before extract." style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#2E7D32;strokeWidth=1;fontSize=11;align=left;spacingLeft=12;fontColor=#1F2933;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="610" width="740" height="50" as="geometry" />
        </mxCell>
        <mxCell id="d-no" value="&lt;b&gt;✕ Not recommended:&lt;/b&gt; ADF / SSIS (needs Blob staging – extra cloud component) · watermark-only delta (misses deletes) · daily full reload (moves 3–4 TB every day) · connector snapshot for history (slow at this volume)" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FDF2F1;strokeColor=#E5A39B;strokeWidth=1;fontSize=11;align=left;spacingLeft=12;fontColor=#8A1C12;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="40" y="672" width="740" height="50" as="geometry" />
        </mxCell>
        <mxCell id="d-foot" value="Prepared by: Jitendra Chauhan" style="text;html=1;fontSize=10;fontColor=#7B8794;align=right;verticalAlign=middle;fontFamily=Helvetica;" vertex="1" parent="1">
          <mxGeometry x="480" y="732" width="300" height="24" as="geometry" />
        </mxCell>

        <mxCell id="de1" value="Minutes (near real-time)" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#52606D;endArrow=blockThin;endFill=1;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="d1" target="d2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="de2" value="Daily / hourly" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#52606D;endArrow=blockThin;endFill=1;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="d1" target="d3">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="de3" value="Yes" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#2E7D32;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#2E7D32;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="d2" target="oA">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="de4" value="No" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#B42318;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#B42318;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="d2" target="oC">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="de5" value="Yes" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#2E7D32;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#2E7D32;labelBackgroundColor=#FFFFFF;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="d3" target="oC">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="de6" value="No" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeWidth=1;strokeColor=#B42318;endArrow=blockThin;endFill=1;fontSize=10;fontColor=#B42318;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="d3" target="oB">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
  <diagram id="acct" name="3 · Accounts, Databases &amp; RBAC">
    <mxGraphModel dx="1600" dy="950" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="940" background="#FFFFFF" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
<mxCell id="srcZ" value="SOURCE · SQL Server (on-prem)" style="rounded=1;arcSize=3;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=8;fontStyle=1;fontSize=12;fontColor=#3E4C59;fillColor=#F7F8FA;strokeColor=#9AA5B1;strokeWidth=1;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="40" y="85" width="300" height="470" as="geometry" /></mxCell>
<mxCell id="src0" value="&lt;b&gt;SALESDB · dbo, sales&lt;/b&gt;" style="shape=cylinder3;boundedLbl=1;size=8;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#52606D;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="65" y="135" width="250" height="52" as="geometry" /></mxCell>
<mxCell id="src1" value="&lt;b&gt;HRDB · dbo&lt;/b&gt;" style="shape=cylinder3;boundedLbl=1;size=8;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#52606D;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="65" y="205" width="250" height="52" as="geometry" /></mxCell>
<mxCell id="src2" value="&lt;b&gt;FINANCEDB · dbo, gl&lt;/b&gt;" style="shape=cylinder3;boundedLbl=1;size=8;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#52606D;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="65" y="275" width="250" height="52" as="geometry" /></mxCell>
<mxCell id="src3" value="&lt;b&gt;… 100s more databases&lt;/b&gt;" style="shape=cylinder3;boundedLbl=1;size=8;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#52606D;strokeWidth=1;fontSize=11;dashed=1;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="65" y="345" width="250" height="52" as="geometry" /></mxCell>
<mxCell id="srcN" value="Each source database (and each of its schemas) becomes one schema in Snowflake. Table and column names are kept exactly as in the source." style="text;html=1;align=left;verticalAlign=middle;fontFamily=Helvetica;whiteSpace=wrap;verticalAlign=top;fontSize=10;fontStyle=2;fontColor=#7B8794;" vertex="1" parent="1"><mxGeometry x="60" y="420" width="265" height="90" as="geometry" /></mxCell>
<mxCell id="prodZ" value="PROD ACCOUNT" style="rounded=1;arcSize=3;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=8;fontStyle=1;fontSize=12;fontColor=#0B6E99;fillColor=#F2FAFD;strokeColor=#29B5E8;strokeWidth=1;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="380" y="85" width="560" height="470" as="geometry" /></mxCell>
<mxCell id="prdRaw" value="&lt;b&gt;PRD_RAW&lt;/b&gt;  ·  Bronze – exact mirror (this project)" style="rounded=1;arcSize=3;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=8;fontStyle=1;fontSize=12;fontColor=#1F2933;fillColor=#FFFFFF;strokeColor=#29B5E8;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="400" y="125" width="520" height="250" as="geometry" /></mxCell>
<mxCell id="sch0" value="&lt;b&gt;SALESDB_DBO&lt;/b&gt;  &lt;font color=&quot;#616E7C&quot;&gt;schema · ORDERS, CUSTOMERS …&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#E3F4FB;strokeColor=#9ED8F0;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="420" y="165" width="300" height="32" as="geometry" /></mxCell>
<mxCell id="sch1" value="&lt;b&gt;SALESDB_SALES&lt;/b&gt;  &lt;font color=&quot;#616E7C&quot;&gt;schema&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#E3F4FB;strokeColor=#9ED8F0;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="420" y="205" width="300" height="32" as="geometry" /></mxCell>
<mxCell id="sch2" value="&lt;b&gt;HRDB_DBO&lt;/b&gt;  &lt;font color=&quot;#616E7C&quot;&gt;schema&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#E3F4FB;strokeColor=#9ED8F0;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="420" y="245" width="300" height="32" as="geometry" /></mxCell>
<mxCell id="sch3" value="&lt;b&gt;FINANCEDB_DBO&lt;/b&gt;  &lt;font color=&quot;#616E7C&quot;&gt;schema&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#E3F4FB;strokeColor=#9ED8F0;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="420" y="285" width="300" height="32" as="geometry" /></mxCell>
<mxCell id="sch4" value="&lt;b&gt;FINANCEDB_GL&lt;/b&gt;  &lt;font color=&quot;#616E7C&quot;&gt;schema&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#E3F4FB;strokeColor=#9ED8F0;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="420" y="325" width="300" height="32" as="geometry" /></mxCell>
<mxCell id="schM" value="&lt;font color=&quot;#616E7C&quot;&gt;… one schema per&lt;br&gt;source DB_SCHEMA&lt;br&gt;(managed access)&lt;br&gt;&lt;br&gt;Optional: split by&lt;br&gt;domain, e.g.&lt;br&gt;PRD_RAW_FINANCE&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;fontFamily=Helvetica;whiteSpace=wrap;verticalAlign=top;fontSize=10;" vertex="1" parent="1"><mxGeometry x="735" y="165" width="170" height="192" as="geometry" /></mxCell>
<mxCell id="prdAdm" value="&lt;b&gt;PRD_ADMIN&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;control tables · CT versions · audit · stages · file formats&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#29B5E8;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="400" y="390" width="250" height="62" as="geometry" /></mxCell>
<mxCell id="prdCur" value="&lt;b&gt;PRD_CURATED&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;Silver – later&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9AA5B1;strokeWidth=1;fontSize=11;dashed=1;fontColor=#616E7C;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="665" y="390" width="120" height="62" as="geometry" /></mxCell>
<mxCell id="prdAn" value="&lt;b&gt;PRD_ANALYTICS&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;Gold – later&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9AA5B1;strokeWidth=1;fontSize=11;dashed=1;fontColor=#616E7C;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="800" y="390" width="120" height="62" as="geometry" /></mxCell>
<mxCell id="prdWh" value="&lt;b&gt;Warehouses:&lt;/b&gt; PRD_LOAD_WH · PRD_QUERY_WH  &lt;font color=&quot;#616E7C&quot;&gt;auto-suspend 60s · resource monitors&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9ED8F0;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="400" y="468" width="520" height="36" as="geometry" /></mxCell>
<mxCell id="prdNote" value="No developer logins in PROD · own admins and network policy" style="text;html=1;align=left;verticalAlign=middle;fontFamily=Helvetica;fontSize=10;fontStyle=2;fontColor=#0B6E99;" vertex="1" parent="1"><mxGeometry x="400" y="515" width="520" height="24" as="geometry" /></mxCell>
<mxCell id="npZ" value="NONPROD ACCOUNT" style="rounded=1;arcSize=3;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=8;fontStyle=1;fontSize=12;fontColor=#6B5A10;fillColor=#FBFBF6;strokeColor=#B9A85A;strokeWidth=1;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="980" y="85" width="560" height="470" as="geometry" /></mxCell>
<mxCell id="np1" value="&lt;b&gt;DEV_RAW · DEV_ADMIN&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;same schema layout as PROD · build and unit test&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9A85A;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1000" y="130" width="520" height="62" as="geometry" /></mxCell>
<mxCell id="np2" value="&lt;b&gt;UAT_RAW · UAT_ADMIN&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;same layout · client testing and sign-off&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9A85A;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1000" y="207" width="520" height="62" as="geometry" /></mxCell>
<mxCell id="np3" value="&lt;b&gt;Warehouses:&lt;/b&gt; DEV_WH · UAT_WH  &lt;font color=&quot;#616E7C&quot;&gt;X-Small · auto-suspend 60s&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D9CD94;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1000" y="284" width="520" height="36" as="geometry" /></mxCell>
<mxCell id="np4" value="&lt;b&gt;Data for DEV / UAT&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;from non-prod SQL Servers, or masked / subset copies of prod.&lt;br&gt;Real prod data never lands here unmasked.&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFF8E6;strokeColor=#E0B54A;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1000" y="335" width="520" height="68" as="geometry" /></mxCell>
<mxCell id="np5" value="&lt;b&gt;Alternative: single account&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;DEV_ / UAT_ / PRD_ databases in one account. Cheaper and simpler, but prod is separated only by roles. If chosen: separate warehouses per env, no role spans prod and non-prod.&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9AA5B1;strokeWidth=1;fontSize=11;dashed=1;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1000" y="420" width="520" height="82" as="geometry" /></mxCell>
<mxCell id="eS1" value="load" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;fontSize=10;labelBackgroundColor=#FFFFFF;strokeColor=#2E7D32;strokeWidth=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="src0" target="sch0"><mxGeometry relative="1" as="geometry" /></mxCell>
<mxCell id="eS2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;fontSize=10;labelBackgroundColor=#FFFFFF;strokeColor=#2E7D32;strokeWidth=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="src2" target="sch3"><mxGeometry relative="1" as="geometry" /></mxCell>
<mxCell id="rbZ" value="ROLE-BASED ACCESS · users get functional roles only" style="rounded=1;arcSize=3;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=8;fontStyle=1;fontSize=12;fontColor=#5B2C83;fillColor=#FAF6FC;strokeColor=#7B3FA0;strokeWidth=1;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="40" y="580" width="1000" height="300" as="geometry" /></mxCell>
<mxCell id="rb1" value="&lt;b&gt;Identity provider&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;Entra ID / Okta groups&lt;br&gt;SSO + MFA · SCIM sync&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="65" y="630" width="190" height="72" as="geometry" /></mxCell>
<mxCell id="rb1b" value="&lt;b&gt;Service users&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;TYPE = SERVICE&lt;br&gt;key-pair auth (Airflow)&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="65" y="725" width="190" height="72" as="geometry" /></mxCell>
<mxCell id="rb2" value="&lt;b&gt;Functional roles&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;PRD_DATA_ENGINEER&lt;br&gt;PRD_ANALYST&lt;br&gt;PRD_SUPPORT_RO&lt;br&gt;PRD_LOADER_SVC&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#F3E8F7;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="300" y="640" width="200" height="140" as="geometry" /></mxCell>
<mxCell id="rb3" value="&lt;b&gt;Access roles (database roles)&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;PRD_RAW.R · PRD_RAW.RW · PRD_RAW.OWNER&lt;br&gt;PRD_ADMIN.RW&lt;br&gt;schema-level only for sensitive areas&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#7B3FA0;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="545" y="640" width="240" height="140" as="geometry" /></mxCell>
<mxCell id="rb4" value="&lt;b&gt;Objects&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#616E7C&quot;&gt;PRD_RAW, schemas, tables&lt;br&gt;future grants · managed access&lt;/font&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#E3F4FB;strokeColor=#29B5E8;strokeWidth=1;fontSize=11;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="830" y="650" width="185" height="120" as="geometry" /></mxCell>
<mxCell id="rb5" value="&lt;font color=&quot;#616E7C&quot;&gt;System roles kept for admin only: ACCOUNTADMIN (2–3 named people, MFA) · SECURITYADMIN / USERADMIN manage roles and users · SYSADMIN owns objects. All grants scripted (Terraform or generated SQL).&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;fontFamily=Helvetica;whiteSpace=wrap;fontSize=10;" vertex="1" parent="1"><mxGeometry x="65" y="815" width="950" height="40" as="geometry" /></mxCell>
<mxCell id="eR1" value="granted" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;fontSize=10;labelBackgroundColor=#FFFFFF;strokeColor=#7B3FA0;" edge="1" parent="1" source="rb1" target="rb2"><mxGeometry relative="1" as="geometry" /></mxCell>
<mxCell id="eR2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;fontSize=10;labelBackgroundColor=#FFFFFF;strokeColor=#7B3FA0;" edge="1" parent="1" source="rb1b" target="rb2"><mxGeometry relative="1" as="geometry" /></mxCell>
<mxCell id="eR3" value="granted" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;fontSize=10;labelBackgroundColor=#FFFFFF;strokeColor=#7B3FA0;" edge="1" parent="1" source="rb2" target="rb3"><mxGeometry relative="1" as="geometry" /></mxCell>
<mxCell id="eR4" value="privileges" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=blockThin;endFill=1;fontSize=10;labelBackgroundColor=#FFFFFF;strokeColor=#7B3FA0;" edge="1" parent="1" source="rb3" target="rb4"><mxGeometry relative="1" as="geometry" /></mxCell>
<mxCell id="seZ" value="DATA SECURITY" style="rounded=1;arcSize=3;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=14;spacingTop=8;fontStyle=1;fontSize=12;fontColor=#8A1C12;fillColor=#FDF2F1;strokeColor=#E5A39B;strokeWidth=1;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1070" y="580" width="470" height="300" as="geometry" /></mxCell>
<mxCell id="se0" value="&lt;b&gt;Network&lt;/b&gt; – policies limited to client IPs; private link optional" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#F0C8C2;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1090" y="618" width="430" height="30" as="geometry" /></mxCell>
<mxCell id="se1" value="&lt;b&gt;Encryption&lt;/b&gt; – automatic in transit and at rest" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#F0C8C2;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1090" y="654" width="430" height="30" as="geometry" /></mxCell>
<mxCell id="se2" value="&lt;b&gt;Classify&lt;/b&gt; – auto-classification tags PII columns" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#F0C8C2;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1090" y="690" width="430" height="30" as="geometry" /></mxCell>
<mxCell id="se3" value="&lt;b&gt;Mask&lt;/b&gt; – tag-based masking policies by role" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#F0C8C2;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1090" y="726" width="430" height="30" as="geometry" /></mxCell>
<mxCell id="se4" value="&lt;b&gt;Rows&lt;/b&gt; – row access policies where needed" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#F0C8C2;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1090" y="762" width="430" height="30" as="geometry" /></mxCell>
<mxCell id="se5" value="&lt;b&gt;Audit&lt;/b&gt; – ACCESS_HISTORY, LOGIN_HISTORY, Trust Center" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#F0C8C2;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1090" y="798" width="430" height="30" as="geometry" /></mxCell>
<mxCell id="se6" value="&lt;b&gt;Recovery&lt;/b&gt; – Time Travel + Fail-safe" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#F0C8C2;strokeWidth=1;fontSize=11;align=left;spacingLeft=10;fontSize=10;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1090" y="834" width="430" height="30" as="geometry" /></mxCell>
<mxCell id="p3f" value="Prepared by: Jitendra Chauhan" style="text;html=1;fontSize=10;fontColor=#7B8794;align=right;fontFamily=Helvetica;" vertex="1" parent="1"><mxGeometry x="1240" y="895" width="300" height="24" as="geometry" /></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
