{"id":390,"date":"2026-08-11T11:57:09","date_gmt":"2026-08-11T03:57:09","guid":{"rendered":"https:\/\/numsimlab.com\/?p=390"},"modified":"2026-08-11T11:57:09","modified_gmt":"2026-08-11T03:57:09","slug":"medallion-architecture-%e8%af%a6%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/numsimlab.com\/?p=390","title":{"rendered":"Medallion Architecture \u8be6\u89e3"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Medallion Architecture \u8be6\u89e3 \u00b7 \u5956\u724c\u67b6\u6784<\/title>\n<style>\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\nhtml{scroll-behavior:smooth}\n:root{\n  --bg:#f8f9fa;--bg2:#fff;--ink:#1a1a2e;--muted:#6c7086;--rule:#e2e4eb;\n  --accent:#2563eb;--accent2:#16a34a;--accent3:#dc2626;--accent4:#d97706;--accent5:#7c3aed;\n  --bronze:#cd7f32;--silver:#a8a8a8;--gold:#d4af37;\n  --card-bg:#fff;--code-bg:#f1f3f5;\n  --tag-g:#dcfce7;--tag-g-t:#166534;--tag-b:#dbeafe;--tag-b-t:#1e40af;\n  --tag-r:#fee2e2;--tag-r-t:#991b1b;--tag-y:#fef9c3;--tag-y-t:#713f12;--tag-p:#f3e8ff;--tag-p-t:#581c87;\n  --shadow:0 1px 3px rgba(0,0,.08);--radius:8px;--max-w:960px\n}\n[data-theme=\"dark\"]{\n  --bg:#0b0b1a;--bg2:#16162a;--ink:#e2e4f0;--muted:#7f8396;--rule:#26263e;\n  --accent:#60a5fa;--accent2:#4ade80;--accent3:#f87171;--accent4:#fbbf24;--accent5:#a78bfa;\n  --bronze:#b8860b;--silver:#c0c0c0;--gold:#ffd700;\n  --card-bg:#16162a;--code-bg:#1e1e36;\n  --tag-g:#14532d;--tag-g-t:#bbf7d0;--tag-b:#1e3a5f;--tag-b-t:#bfdbfe;\n  --tag-r:#7f1d1d;--tag-r-t:#fecaca;--tag-y:#713f12;--tag-y-t:#fef08a;\n  --tag-p:#3b1f6e;--tag-p-t:#e9d5ff;\n  --shadow:0 1px 3px rgba(0,0,.3)\n}\nbody{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Noto Sans SC\",\"PingFang SC\",\"Microsoft YaHei\",sans-serif;background:var(--bg);color:var(--ink);line-height:1.7;font-size:15px;transition:background .3s,color .3s}\nheader{position:fixed;top:0;left:0;right:0;z-index:100;background:var(--bg2);border-bottom:1px solid var(--rule);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:background .3s}\n.header-inner{max-width:var(--max-w);margin:0 auto;display:flex;align-items:center;justify-content:space-between;padding:0 1.5rem;height:56px}\n.logo{font-weight:700;font-size:.95rem;color:var(--accent);display:flex;align-items:center;gap:.4rem}\n.controls{display:flex;align-items:center;gap:.5rem}\n.lang-switch{display:flex;border:1px solid var(--rule);border-radius:6px;overflow:hidden}\n.lang-switch button{background:0 0;border:none;color:var(--muted);padding:.3rem .7rem;font-size:.8rem;cursor:pointer;transition:all .2s;font-family:inherit}\n.lang-switch button.active{background:var(--accent);color:#fff}\n.lang-switch button:not(.active):hover{color:var(--ink);background:var(--rule)}\n.theme-toggle{background:0 0;border:1px solid var(--rule);border-radius:6px;color:var(--muted);width:34px;height:34px;font-size:1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}\n.theme-toggle:hover{color:var(--ink);background:var(--rule)}\nmain{max-width:var(--max-w);margin:0 auto;padding:80px 1.5rem 3rem}\n.lang-section{display:none}.lang-section.active{display:block}\nh1{font-size:1.9rem;font-weight:800;line-height:1.3;margin-bottom:.5rem;letter-spacing:-.02em}\nh1 .sub{display:block;font-size:.85rem;font-weight:400;color:var(--muted);margin-top:.25rem;letter-spacing:0}\nh2{font-size:1.35rem;font-weight:700;margin:2.5rem 0 1rem;padding-bottom:.5rem;border-bottom:2px solid var(--accent);letter-spacing:-.01em}\nh3{font-size:1.05rem;font-weight:600;margin:1.5rem 0 .6rem;color:var(--accent)}\nh4{font-size:.95rem;font-weight:600;margin:1rem 0 .4rem;color:var(--ink)}\np{margin-bottom:.8rem}\na{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}\n.hero{text-align:center;padding:2rem 0 1rem}\n.hero p{font-size:1rem;color:var(--muted);max-width:700px;margin:0 auto}\n.tag{display:inline-block;padding:.12rem .5rem;border-radius:4px;font-size:.72rem;font-weight:600;margin-right:.25rem;white-space:nowrap}\n.tag-g{background:var(--tag-g);color:var(--tag-g-t)}.tag-b{background:var(--tag-b);color:var(--tag-b-t)}\n.tag-r{background:var(--tag-r);color:var(--tag-r-t)}.tag-y{background:var(--tag-y);color:var(--tag-y-t)}.tag-p{background:var(--tag-p);color:var(--tag-p-t)}\n.card{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.25rem;margin-bottom:1rem;box-shadow:var(--shadow)}\n.info-box{background:var(--bg);border-left:4px solid var(--accent);padding:.9rem 1.1rem;margin:1rem 0;border-radius:0 var(--radius) var(--radius) 0;font-size:.88rem}\n.info-box strong{color:var(--accent)}\n.info-box.warn{border-left-color:var(--accent4)}.info-box.warn strong{color:var(--accent4)}\n.info-box.danger{border-left-color:var(--accent3)}.info-box.danger strong{color:var(--accent3)}\n.info-box.success{border-left-color:var(--accent2)}.info-box.success strong{color:var(--accent2)}\n.toc{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.15rem 1.4rem;margin-bottom:2rem;box-shadow:var(--shadow)}\n.toc h3{margin:0 0 .5rem;font-size:.9rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}\n.toc ol{padding-left:1.1rem;columns:2;column-gap:2rem}\n.toc li{margin-bottom:.25rem;font-size:.88rem}.toc a{color:var(--ink)}.toc a:hover{color:var(--accent);text-decoration:none}\npre.code-block{background:var(--code-bg);padding:.85rem 1rem;border-radius:var(--radius);overflow-x:auto;font-family:\"SF Mono\",Consolas,\"Courier New\",monospace;font-size:.82rem;line-height:1.5;margin:.6rem 0;border:1px solid var(--rule)}\npre.code-block code{background:none;border:none;padding:0;font-size:inherit}\ncode,.inline-code{background:var(--code-bg);padding:.12rem .4rem;border-radius:4px;font-family:\"SF Mono\",Consolas,\"Courier New\",monospace;font-size:.83rem;border:1px solid var(--rule)}\n.table-wrap{overflow-x:auto;margin:1.2rem 0;border-radius:var(--radius);border:1px solid var(--rule)}\ntable{width:100%;border-collapse:collapse;font-size:.82rem}\nthead th{background:var(--accent);color:#fff;padding:.6rem .5rem;text-align:center;font-weight:600;white-space:nowrap}\nthead th:first-child{border-radius:6px 0 0 0}thead th:last-child{border-radius:0 6px 0 0}\ntbody td{padding:.55rem .5rem;border-bottom:1px solid var(--rule);text-align:center;vertical-align:middle}\ntbody tr:nth-child(even){background:var(--bg)}\ntbody tr:last-child td{border-bottom:none}\ntbody td:first-child{text-align:left;font-weight:600}\ncaption{caption-side:bottom;text-align:center;font-size:.8rem;color:var(--muted);margin-top:.5rem;padding:.4rem}\n.terminal{background:#1a1a2e;color:#a8e6cf;border-radius:var(--radius);padding:.9rem 1rem;font-family:\"SF Mono\",Consolas,\"Courier New\",monospace;font-size:.82rem;line-height:1.6;margin:.6rem 0;overflow-x:auto;border:1px solid #333}\n.terminal .prompt{color:#60a5fa}.terminal .comment{color:#6c7086;font-style:italic}.terminal .output{color:#e2e4f0}\n[data-theme=\"dark\"] .terminal{background:#08081a}\n.steps{counter-reset:step;list-style:none;padding:0}\n.steps li{counter-increment:step;position:relative;padding:.85rem 1rem .85rem 2.8rem;margin-bottom:.5rem;border-left:2px solid var(--rule);border-radius:0 var(--radius) var(--radius) 0;background:var(--card-bg);box-shadow:var(--shadow)}\n.steps li::before{content:counter(step);position:absolute;left:-13px;top:.85rem;width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.78rem;font-weight:700}\n.steps li .note{display:block;color:var(--muted);font-size:.82rem;margin-top:.2rem}\n.flow-diagram{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.25rem;margin:1.25rem 0;text-align:center}\n.flow-row{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:.35rem;margin:.4rem 0}\n.flow-item{display:inline-block;padding:.4rem .8rem;border-radius:6px;font-weight:600;font-size:.82rem;text-align:center;background:var(--accent);color:#fff;min-width:60px}\n.flow-item.green{background:var(--accent2)}.flow-item.red{background:var(--accent3)}.flow-item.yellow{background:var(--accent4);color:#1a1a2e}.flow-item.purple{background:var(--accent5)}\n.flow-item.bronze{background:var(--bronze)}.flow-item.silver{background:var(--silver);color:#1a1a2e}.flow-item.gold{background:var(--gold);color:#1a1a2e}\n.flow-arrow{color:var(--muted);font-size:1rem}\n.two-col{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;margin:1.25rem 0}\n.col{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.25rem;box-shadow:var(--shadow)}\n.col h4{margin-top:0}\n.three-col{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1rem;margin:1.25rem 0}\n.layer-card{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.25rem;box-shadow:var(--shadow);border-top:4px solid var(--accent)}\n.layer-card.bronze{border-top-color:var(--bronze)}\n.layer-card.silver{border-top-color:var(--silver)}\n.layer-card.gold{border-top-color:var(--gold)}\n.layer-card .layer-icon{font-size:2rem;margin-bottom:.5rem}\n.layer-card .layer-name{font-size:1.1rem;font-weight:700;margin-bottom:.3rem}\n.layer-card.bronze .layer-name{color:var(--bronze)}\n.layer-card.silver .layer-name{color:var(--silver)}\n.layer-card.gold .layer-name{color:var(--gold)}\n.layer-card .layer-desc{font-size:.85rem;color:var(--muted);margin-bottom:.6rem}\n.layer-card .layer-promise{font-size:.8rem;padding:.4rem .6rem;border-radius:4px;background:var(--bg);margin-top:.5rem}\n.compare-box{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin:1rem 0}\n.compare-col{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1rem;box-shadow:var(--shadow)}\n.compare-col h4{margin:0 0 .4rem;font-size:.88rem}\n.compare-col.do h4{color:var(--accent2)}\n.compare-col.dont h4{color:var(--accent3)}\n.file-tree{background:var(--code-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:.85rem 1rem;font-family:\"SF Mono\",Consolas,\"Courier New\",monospace;font-size:.82rem;line-height:1.6;margin:.6rem 0;overflow-x:auto;color:var(--ink)}\n.file-tree .dir{color:var(--accent);font-weight:600}\n.file-tree .file{color:var(--muted)}\n.file-tree .config{color:var(--accent2);font-weight:600}\n.badge{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .6rem;border-radius:4px;font-size:.78rem;font-weight:600;margin:0 .15rem}\n.badge.bronze{background:rgba(205,127,50,.15);color:var(--bronze)}\n.badge.silver{background:rgba(168,168,168,.2);color:var(--silver)}\n.badge.gold{background:rgba(212,175,55,.15);color:var(--gold)}\nfigure{text-align:center;margin:1.5rem 0}\nfigcaption{font-size:.8rem;color:var(--muted);margin-top:.5rem}\n@media(max-width:640px){\n  h1{font-size:1.4rem}.toc ol{columns:1}.header-inner{padding:0 1rem}main{padding:72px 1rem 2rem}\n  .steps li{padding-left:2.4rem}.steps li::before{left:-11px;width:22px;height:22px;font-size:.7rem}\n  .two-col{grid-template-columns:1fr}.three-col{grid-template-columns:1fr}.compare-box{grid-template-columns:1fr}\n}\nsup a{color:var(--accent);text-decoration:none;font-size:.75em;font-weight:600}\nsup a:hover{text-decoration:underline}\n<\/style>\n<\/head>\n<body>\n<header>\n  <div class=\"header-inner\">\n    <div class=\"logo\"><span>&#127942;<\/span> Medallion Architecture<\/div>\n    <div class=\"controls\">\n      <div class=\"lang-switch\">\n        <button class=\"active\" onclick=\"setLang('zh')\" id=\"btn-zh\">\u4e2d\u6587<\/button>\n        <button onclick=\"setLang('en')\" id=\"btn-en\">English<\/button>\n      <\/div>\n      <button class=\"theme-toggle\" onclick=\"toggleTheme()\" title=\"\u5207\u6362\u660e\u6697\u4e3b\u9898\">&#9788;<\/button>\n    <\/div>\n  <\/div>\n<\/header>\n<main>\n\n<!-- ======== \u4e2d\u6587\u7248 ======== -->\n<div class=\"lang-section active\" id=\"lang-zh\">\n<div class=\"hero\">\n  <h1>Medallion Architecture \u8be6\u89e3<span class=\"sub\">\u6570\u636e\u5206\u6790\u4e0e\u5de5\u7a0b\u9886\u57df\u7684\u5956\u724c\u67b6\u6784<\/span><\/h1>\n  <p>Medallion Architecture\uff08\u5956\u724c\u67b6\u6784\uff09\u662f\u4e00\u79cd\u5c06\u6570\u636e\u6309\u8d28\u91cf\u548c\u6210\u719f\u5ea6\u5206\u5c42\u7684\u6a21\u5f0f\uff0c\u6570\u636e\u4ece\u539f\u59cb\u72b6\u6001\u9010\u6b65\u7cbe\u70bc\u4e3a\u53ef\u76f4\u63a5\u7528\u4e8e\u4e1a\u52a1\u51b3\u7b56\u7684\u9ad8\u8d28\u91cf\u6570\u636e\u4ea7\u54c1\u3002Bronze\u3001Silver\u3001Gold \u4e09\u5c42\u7ed3\u6784\u7531 Databricks \u63d0\u51fa\uff0c\u73b0\u5df2\u6210\u4e3a\u6570\u636e\u6e56\u4ed3\u67b6\u6784\u7684\u4e8b\u5b9e\u6807\u51c6\u3002<sup><a href=\"#cite-1\">[1]<\/a><\/sup><\/p>\n<\/div>\n\n<div class=\"toc\">\n  <h3>\u76ee\u5f55<\/h3>\n  <ol>\n    <li><a href=\"#zh-1\">\u4e00\u3001\u4ec0\u4e48\u662f Medallion Architecture<\/a><\/li>\n    <li><a href=\"#zh-2\">\u4e8c\u3001\u4e09\u5c42\u67b6\u6784\u8be6\u89e3<\/a><\/li>\n    <li><a href=\"#zh-3\">\u4e09\u3001\u5de5\u4f5c\u539f\u7406\u4e0e\u6570\u636e\u6d41<\/a><\/li>\n    <li><a href=\"#zh-4\">\u56db\u3001\u6570\u636e\u8d28\u91cf\u68c0\u67e5\u5206\u5c42<\/a><\/li>\n    <li><a href=\"#zh-5\">\u4e94\u3001\u5404\u5c42\u5bf9\u6bd4<\/a><\/li>\n    <li><a href=\"#zh-6\">\u516d\u3001\u5b9e\u9645\u793a\u4f8b\uff1a\u8ba2\u5355\u7ba1\u9053<\/a><\/li>\n    <li><a href=\"#zh-7\">\u4e03\u3001\u6700\u4f73\u5b9e\u8df5<\/a><\/li>\n    <li><a href=\"#zh-8\">\u516b\u3001\u5e38\u89c1\u8bef\u533a<\/a><\/li>\n    <li><a href=\"#zh-9\">\u4e5d\u3001\u4e0e\u5176\u4ed6\u67b6\u6784\u7684\u5173\u7cfb<\/a><\/li>\n  <\/ol>\n<\/div>\n\n<!-- \u4e00\u3001\u4ec0\u4e48\u662f Medallion Architecture -->\n<h2 id=\"zh-1\">\u4e00\u3001\u4ec0\u4e48\u662f Medallion Architecture<\/h2>\n\n<p><strong>Medallion Architecture<\/strong>\uff08\u5956\u724c\u67b6\u6784\uff09\u662f\u4e00\u79cd\u6570\u636e\u751f\u547d\u5468\u671f\u4e0e\u8d28\u91cf\u5206\u5c42\u6a21\u5f0f\uff0c\u5c06\u539f\u59cb\u6570\u636e\u3001\u6e05\u6d17\u6570\u636e\u548c\u7cbe\u9009\u6570\u636e\u7ec4\u7ec7\u4e3a\u9010\u6b65\u63d0\u5347\u4ef7\u503c\u7684\u4e09\u5c42\u7ed3\u6784\uff0c\u4ee5\u652f\u6301\u53ef\u9760\u7684\u5206\u6790\u3001\u673a\u5668\u5b66\u4e60\u548c\u8fd0\u8425\u7528\u9014\u3002<sup><a href=\"#cite-2\">[2]<\/a><\/sup><\/p>\n\n<div class=\"info-box\">\n  <strong>\u4e00\u53e5\u8bdd\u5b9a\u4e49\uff1a<\/strong>Medallion Architecture \u662f\u4e00\u4e2a\u4e09\u5c42\u7684\u6570\u636e\u6210\u719f\u5ea6\u6a21\u578b\uff0c\u5c06\u539f\u59cb\u91c7\u96c6\u3001\u6e05\u6d17\u89c4\u8303\u5316\u548c\u4e1a\u52a1\u7ea7\u7cbe\u9009\u6570\u636e\u96c6\u7ec4\u7ec7\u4e3a\u8d28\u91cf\u3001\u6cbb\u7406\u548c\u6027\u80fd\u4fdd\u8bc1\u9010\u5c42\u9012\u5347\u7684\u4e09\u4e2a\u5c42\u7ea7\u3002\n<\/div>\n\n<p>\u8be5\u67b6\u6784\u7684\u6838\u5fc3\u601d\u60f3\u53ef\u4ee5\u7c7b\u6bd4\u4e3a\u4e00\u4e2a\u7cbe\u70bc\u5382\uff1a\u539f\u59cb\u77ff\u77f3\u4ece\u4e00\u7aef\u8fdb\u5165\uff0c\u7ecf\u8fc7\u9010\u6b65\u7cbe\u70bc\uff0c\u6700\u7ec8\u4ea7\u51fa\u53ef\u7528\u7684\u7cbe\u70bc\u91d1\u5c5e\u4ece\u53e6\u4e00\u7aef\u8f93\u51fa\u3002Bronze\u3001Silver\u3001Gold \u4e09\u4e2a\u540d\u79f0\u6b63\u662f\u53cd\u6620\u4e86\u8fd9\u79cd\u6e10\u8fdb\u5f0f\u7684\u8d28\u91cf\u63d0\u5347\u8fc7\u7a0b\u3002<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<div class=\"card\">\n  <h4>\u6838\u5fc3\u8bbe\u8ba1\u539f\u5219<\/h4>\n  <div class=\"two-col\" style=\"margin:0\">\n    <div class=\"col\" style=\"margin:0\">\n      <p><strong>\u6e10\u8fdb\u5f0f\u4e30\u5bcc\uff1a<\/strong>\u6bcf\u4e00\u5c42\u4f9d\u8d56\u4e8e\u524d\u4e00\u5c42\u7684\u8f93\u51fa\uff0c\u6570\u636e\u4ef7\u503c\u9010\u5c42\u9012\u589e\u3002<\/p>\n    <\/div>\n    <div class=\"col\" style=\"margin:0\">\n      <p><strong>\u53ef\u8ffd\u6eaf\u6027\uff1a<\/strong>\u5143\u6570\u636e\u548c\u8840\u7f18\u5fc5\u987b\u5728\u5c42\u95f4\u4fdd\u7559\u3002<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"two-col\" style=\"margin:0\">\n    <div class=\"col\" style=\"margin:0\">\n      <p><strong>\u5951\u7ea6\u6536\u7d27\uff1a<\/strong>\u968f\u7740\u6570\u636e\u4e0a\u5347\uff0cSchema \u548c\u8bed\u4e49\u5b9a\u4e49\u8d8a\u6765\u8d8a\u4e25\u683c\u3002<\/p>\n    <\/div>\n    <div class=\"col\" style=\"margin:0\">\n      <p><strong>\u53ef\u590d\u73b0\u6027\uff1a<\/strong>Bronze \u5c42\u5e94\u5141\u8bb8\u91cd\u65b0\u5904\u7406\u4ee5\u91cd\u5efa\u66f4\u9ad8\u5c42\u3002<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- \u4e8c\u3001\u4e09\u5c42\u67b6\u6784\u8be6\u89e3 -->\n<h2 id=\"zh-2\">\u4e8c\u3001\u4e09\u5c42\u67b6\u6784\u8be6\u89e3<\/h2>\n\n<div class=\"three-col\">\n  <div class=\"layer-card bronze\">\n    <div class=\"layer-icon\">&#129354;<\/div>\n    <div class=\"layer-name\">Bronze \u5c42<\/div>\n    <div class=\"layer-desc\">\u539f\u59cb\u6570\u636e\u843d\u5730\u5c42\uff0c\u6700\u5c0f\u5316\u8f6c\u6362\uff0c\u4fdd\u7559\u5b8c\u6574\u539f\u59cb\u4fe1\u53f7<\/div>\n    <div class=\"layer-promise\"><strong>\u627f\u8bfa\uff1a<\/strong>&#8220;\u8fd9\u662f\u4ece\u6570\u636e\u6e90\u63a5\u6536\u5230\u7684\u5b8c\u6574\u539f\u59cb\u6570\u636e&#8221;<\/div>\n  <\/div>\n  <div class=\"layer-card silver\">\n    <div class=\"layer-icon\">&#129353;<\/div>\n    <div class=\"layer-name\">Silver \u5c42<\/div>\n    <div class=\"layer-desc\">\u6e05\u6d17\u3001\u89c4\u8303\u5316\u3001\u53bb\u91cd\u540e\u7684\u53ef\u9760\u4e8b\u5b9e\u6570\u636e<\/div>\n    <div class=\"layer-promise\"><strong>\u627f\u8bfa\uff1a<\/strong>&#8220;\u8fd9\u662f\u5e72\u51c0\u3001\u6b63\u786e\u7684\u5b9e\u4f53\u8bb0\u5f55&#8221;<\/div>\n  <\/div>\n  <div class=\"layer-card gold\">\n    <div class=\"layer-icon\">&#129354;<\/div>\n    <div class=\"layer-name\">Gold \u5c42<\/div>\n    <div class=\"layer-desc\">\u9762\u5411\u4e1a\u52a1\u6d88\u8d39\u7684\u7cbe\u9009\u6570\u636e\u4ea7\u54c1\uff0c\u76f4\u63a5\u9a71\u52a8\u51b3\u7b56<\/div>\n    <div class=\"layer-promise\"><strong>\u627f\u8bfa\uff1a<\/strong>&#8220;\u8fd9\u662f\u4e1a\u52a1\u53ef\u636e\u6b64\u884c\u52a8\u7684\u6570\u636e\u4ea7\u54c1&#8221;<\/div>\n  <\/div>\n<\/div>\n\n<h3>2.1 Bronze \u5c42\uff1a\u539f\u59cb\u6570\u636e\u5c42<\/h3>\n\n<p><span class=\"badge bronze\">Bronze<\/span> \u5c42\u5b58\u50a8\u4ece\u6570\u636e\u6e90\u91c7\u96c6\u7684\u539f\u59cb\u6570\u636e\uff0c\u4ec5\u505a\u6700\u5c0f\u9650\u5ea6\u7684\u8f6c\u6362\u3002\u5b83\u7684\u6838\u5fc3\u76ee\u6807\u662f<strong>\u4fdd\u7559\u8db3\u591f\u7684\u539f\u59cb\u4fe1\u53f7\u4ee5\u652f\u6301\u540e\u7eed\u91cd\u653e<\/strong>\u3002\u5178\u578b\u6570\u636e\u5305\u62ec CDC \u4e8b\u4ef6\u3001API \u8fd4\u56de\u503c\u3001\u65e5\u5fd7\u3001Kafka \u4e3b\u9898\u3001CSV \u5bfc\u51fa\u548c\u4f9b\u5e94\u5546\u6570\u636e\u6587\u4ef6\u3002<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<div class=\"info-box warn\">\n  <strong>Bronze \u4e0d\u662f\u5783\u573e\u62bd\u5c49\uff1a<\/strong>\u867d\u7136\u5b58\u50a8\u539f\u59cb\u6570\u636e\uff0c\u4f46\u5fc5\u987b\u6709\u91c7\u96c6\u5143\u6570\u636e\uff08\u6765\u6e90\u3001\u6279\u6b21ID\u3001\u91c7\u96c6\u65f6\u95f4\u6233\uff09\u3001Schema \u6355\u83b7\u548c\u4fdd\u7559\u7b56\u7565\u3002\u76ee\u6807\u662f\u4fdd\u7559\u539f\u59cb\u4fe1\u53f7\uff0c\u800c\u4e0d\u662f\u5047\u88c5\u6570\u636e\u5df2\u7ecf\u5e72\u51c0\u3002\n<\/div>\n\n<p><strong>Bronze \u5c42\u5178\u578b\u8868\u7ed3\u6784\uff1a<\/strong><\/p>\n<pre class=\"code-block\"><code>bronze.orders_raw\n- source_system          -- \u6570\u636e\u6765\u6e90\u7cfb\u7edf\n- ingestion_batch_id     -- \u91c7\u96c6\u6279\u6b21ID\n- ingestion_time         -- \u91c7\u96c6\u65f6\u95f4\n- payload_json           -- \u539f\u59cb JSON \u8d1f\u8f7d\n- source_event_time      -- \u6e90\u4e8b\u4ef6\u65f6\u95f4\n- source_file_path       -- \u6e90\u6587\u4ef6\u8def\u5f84<\/code><\/pre>\n\n<h3>2.2 Silver \u5c42\uff1a\u6e05\u6d17\u89c4\u8303\u5316\u5c42<\/h3>\n\n<p><span class=\"badge silver\">Silver<\/span> \u5c42\u5c06\u539f\u59cb\u6570\u636e\u8f6c\u5316\u4e3a\u53ef\u7528\u7684\u5b9e\u4f53\u3002\u8fd9\u662f\u8fdb\u884c payload \u89e3\u6790\u3001\u65f6\u95f4\u6233\u6807\u51c6\u5316\u3001\u8bb0\u5f55\u53bb\u91cd\u3001\u7c7b\u578b\u68c0\u67e5\u3001\u5220\u9664\u5904\u7406\u3001\u53c2\u7167\u6570\u636e\u5173\u8054\u4ee5\u53ca\u6784\u5efa\u4e00\u81f4\u6027\u7ef4\u5ea6\u7684\u5730\u65b9\u3002<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<p>Silver \u8868\u5e94\u5bf9\u7406\u89e3\u9886\u57df\u7684\u5de5\u7a0b\u5e08\u548c\u5206\u6790\u5e08\u662f\u5b89\u5168\u7684\u3002\u5b83\u4eec\u4e0d\u4e00\u5b9a\u662f\u6700\u7ec8\u7684\u4e1a\u52a1\u6307\u6807\uff0c\u4f46\u5e94\u8be5\u662f<strong>\u53ef\u4fe1\u8d56\u7684\u6784\u5efa\u57fa\u5757<\/strong>\u3002<\/p>\n\n<p><strong>Silver \u5c42\u5178\u578b\u8868\u7ed3\u6784\uff1a<\/strong><\/p>\n<pre class=\"code-block\"><code>silver.orders\n- order_id              -- \u4e3b\u952e\uff0c\u5df2\u53bb\u91cd\n- customer_id           -- \u5ba2\u6237ID\uff0c\u5df2\u5173\u8054\n- order_status          -- \u8ba2\u5355\u72b6\u6001\uff08\u5df2\u6807\u51c6\u5316\uff09\n- order_total           -- \u8ba2\u5355\u603b\u989d\uff08\u5df2\u7c7b\u578b\u5316\uff09\n- currency              -- \u5e01\u79cd\n- ordered_at            -- \u4e0b\u5355\u65f6\u95f4\uff08\u4e8b\u4ef6\u65f6\u95f4\uff09\n- updated_at            -- \u66f4\u65b0\u65f6\u95f4\n- is_deleted            -- \u8f6f\u5220\u9664\u6807\u8bb0<\/code><\/pre>\n\n<h3>2.3 Gold \u5c42\uff1a\u4e1a\u52a1\u6570\u636e\u4ea7\u54c1\u5c42<\/h3>\n\n<p><span class=\"badge gold\">Gold<\/span> \u5c42\u53d1\u5e03\u56de\u7b54\u771f\u5b9e\u4e1a\u52a1\u95ee\u9898\u7684\u6570\u636e\u96c6\u3002Gold \u8868\u9a71\u52a8\u4eea\u8868\u677f\u3001\u8d22\u52a1\u62a5\u544a\u3001ML \u7279\u5f81\u3001\u53cd\u5411 ETL \u4efb\u52a1\u548c\u8fd0\u8425\u62a5\u8868\u3002\u5b83\u4eec\u5e94\u6709\u660e\u786e\u7684<strong>\u6240\u6709\u8005\u3001\u6587\u6863\u5316\u8bed\u4e49\u3001\u65b0\u9c9c\u5ea6\u671f\u671b\u548c\u8d28\u91cf\u68c0\u67e5<\/strong>\u3002<sup><a href=\"#cite-2\">[2]<\/a><\/sup><\/p>\n\n<p><strong>Gold \u5c42\u5178\u578b\u8868\u7ed3\u6784\uff1a<\/strong><\/p>\n<pre class=\"code-block\"><code>gold.daily_revenue\n- revenue_date           -- \u6536\u5165\u65e5\u671f\n- region                 -- \u533a\u57df\n- product_line           -- \u4ea7\u54c1\u7ebf\n- gross_revenue          -- \u603b\u6536\u5165\n- refunds                -- \u9000\u6b3e\u91d1\u989d\n- net_revenue            -- \u51c0\u6536\u5165\n- paying_customers       -- \u4ed8\u8d39\u5ba2\u6237\u6570<\/code><\/pre>\n\n<!-- \u4e09\u3001\u5de5\u4f5c\u539f\u7406\u4e0e\u6570\u636e\u6d41 -->\n<h2 id=\"zh-3\">\u4e09\u3001\u5de5\u4f5c\u539f\u7406\u4e0e\u6570\u636e\u6d41<\/h2>\n\n<p>\u5f53\u6570\u636e\u4ece\u6e90\u7cfb\u7edf\u8fdb\u5165 Medallion \u67b6\u6784\u65f6\uff0c\u4f1a\u7ecf\u5386\u4ee5\u4e0b\u5206\u5c42\u5904\u7406\u6d41\u7a0b\uff1a<\/p>\n\n<figure>\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item\">\u6e90\u7cfb\u7edf<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item bronze\">Bronze<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item silver\">Silver<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item gold\">Gold<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item green\">\u6d88\u8d39\u8005<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.8rem\">\n      <span class=\"flow-item yellow\" style=\"color:#1a1a2e;font-size:.75rem\">CDC\/API\/\u65e5\u5fd7\/CSV<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item bronze\" style=\"font-size:.75rem\">\u539f\u59cb\u843d\u5730<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item silver\" style=\"font-size:.75rem;color:#1a1a2e\">\u6e05\u6d17\u53bb\u91cd<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item gold\" style=\"font-size:.75rem;color:#1a1a2e\">\u4e1a\u52a1\u805a\u5408<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item green\" style=\"font-size:.75rem\">BI\/ML\/\u62a5\u8868<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>\u56fe 1<\/strong> Medallion Architecture \u6570\u636e\u6d41\uff1a\u4ece\u6e90\u7cfb\u7edf\u5230\u6d88\u8d39\u8005\u7684\u4e09\u5c42\u6e10\u8fdb\u7cbe\u70bc<\/figcaption>\n<\/figure>\n\n<ol class=\"steps\">\n  <li>\n    <strong>\u6570\u636e\u91c7\u96c6 &rarr; Bronze<\/strong>\n    <span class=\"note\">\u91c7\u96c6\u5668\u4ece\u6e90\u7cfb\u7edf\u6536\u96c6\u539f\u59cb\u8bb0\u5f55\u5e76\u5199\u5165 Bronze \u5c42\u3002\u6570\u636e\u4ee5\u8ffd\u52a0\u65b9\u5f0f\u5199\u5165\uff0c\u4fdd\u6301\u4e0d\u53ef\u53d8\u6027\u3002\u5305\u542b\u91c7\u96c6\u5143\u6570\u636e\uff08\u6765\u6e90\u3001\u6279\u6b21ID\u3001\u65f6\u95f4\u6233\uff09\u3002<\/span>\n  <\/li>\n  <li>\n    <strong>Bronze &rarr; Silver\uff08\u8f6c\u6362\uff09<\/strong>\n    <span class=\"note\">\u6279\u5904\u7406\u6216\u6d41\u5904\u7406\u5f15\u64ce\u89e3\u6790 payload\u3001\u6807\u51c6\u5316\u65f6\u95f4\u6233\u3001\u53bb\u91cd\u3001\u7c7b\u578b\u6821\u9a8c\u3001\u5904\u7406\u5220\u9664\u548c\u66f4\u65b0\u3001\u5173\u8054\u53c2\u7167\u6570\u636e\uff0c\u751f\u6210\u4e00\u81f4\u6027\u5b9e\u4f53\u8868\u3002<\/span>\n  <\/li>\n  <li>\n    <strong>Silver &rarr; Gold\uff08\u805a\u5408\uff09<\/strong>\n    <span class=\"note\">\u805a\u5408\u548c\u5bcc\u5316\u4f5c\u4e1a\u5c06 Silver \u5b9e\u4f53\u8f6c\u5316\u4e3a\u4e1a\u52a1\u6307\u6807\u3002Gold \u8868\u7f16\u7801\u4e1a\u52a1\u8bed\u4e49\uff0c\u914d\u5907\u6240\u6709\u8005\u3001\u65b0\u9c9c\u5ea6 SLA \u548c\u8bbf\u95ee\u7b56\u7565\u3002<\/span>\n  <\/li>\n  <li>\n    <strong>Gold &rarr; \u6d88\u8d39\u8005<\/strong>\n    <span class=\"note\">BI \u4eea\u8868\u677f\u3001ML \u8bad\u7ec3\u3001\u8d22\u52a1\u62a5\u544a\u3001\u53cd\u5411 ETL \u548c API \u76f4\u63a5\u6d88\u8d39 Gold \u5c42\u6570\u636e\u4ea7\u54c1\u3002<\/span>\n  <\/li>\n  <li>\n    <strong>\u91cd\u653e\u4e0e\u4fee\u590d<\/strong>\n    <span class=\"note\">\u5982\u679c\u53d1\u73b0 Bug \u6216\u4e1a\u52a1\u903b\u8f91\u53d8\u66f4\uff0c\u53ef\u4ece Bronze \u91cd\u65b0\u5904\u7406\u4ee5\u91cd\u5efa Silver \u548c Gold\uff0c\u540c\u65f6\u4fdd\u6301\u6570\u636e\u6e90\u771f\u53ef\u89c1\u3002<\/span>\n  <\/li>\n<\/ol>\n\n<div class=\"info-box\">\n  <strong>\u6210\u672c-\u6027\u80fd\u6743\u8861\uff1a<\/strong>Bronze \u503e\u5411\u4f4e\u6210\u672c\u5b58\u50a8\uff08\u5bf9\u8c61\u5b58\u50a8\uff09\uff0cGold \u503e\u5411\u67e5\u8be2\u6027\u80fd\u548c\u6cbb\u7406\uff08\u7269\u5316\u89c6\u56fe\u3001\u5217\u5f0f\u5b58\u50a8\uff09\u3002\n<\/div>\n\n<!-- \u56db\u3001\u6570\u636e\u8d28\u91cf\u68c0\u67e5\u5206\u5c42 -->\n<h2 id=\"zh-4\">\u56db\u3001\u6570\u636e\u8d28\u91cf\u68c0\u67e5\u5206\u5c42<\/h2>\n\n<p>\u8d28\u91cf\u68c0\u67e5\u5e94\u968f\u7740\u6570\u636e\u5411\u4e0a\u6d41\u52a8\u800c<strong>\u9010\u5c42\u6536\u7d27<\/strong>\u3002Bronze \u68c0\u67e5\u8bc1\u660e\u91c7\u96c6\u6210\u529f\u4e14\u53ef\u8ffd\u6eaf\uff1bSilver \u68c0\u67e5\u8bc1\u660e\u5b9e\u4f53\u6b63\u786e\u6027\uff1bGold \u68c0\u67e5\u8bc1\u660e\u4e1a\u52a1\u542b\u4e49\u548c\u6d88\u8d39\u8005\u5b89\u5168\u3002<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<div class=\"table-wrap\">\n  <table>\n    <thead>\n      <tr>\n        <th>\u8fb9\u754c<\/th>\n        <th>\u6709\u6548\u68c0\u67e5\u9879<\/th>\n        <th>\u5931\u8d25\u5904\u7406<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>\u6e90 &rarr; Bronze<\/td>\n        <td>\u6587\u4ef6\u6570\u91cf\u3001Schema \u6355\u83b7\u3001\u6e90\u65f6\u95f4\u6233\u3001\u6279\u6b21ID\u3001\u91cd\u590d\u6295\u9012\u7387\u3001\u7578\u5f62 payload \u7387<\/td>\n        <td>\u9694\u79bb\u574f payload\uff0c\u544a\u8b66\u91c7\u96c6\u8d1f\u8d23\u4eba\uff0c\u4fdd\u7559\u539f\u59cb\u6570\u636e\u7528\u4e8e\u91cd\u653e<\/td>\n      <\/tr>\n      <tr>\n        <td>Bronze &rarr; Silver<\/td>\n        <td>\u4e3b\u952e\u552f\u4e00\u6027\u3001\u5fc5\u586b\u5b57\u6bb5\u3001\u7c7b\u578b\u8f6c\u6362\u3001\u8fdf\u5230\u6570\u636e\u3001\u5220\u9664\u5904\u7406\u3001\u53c2\u7167\u5b8c\u6574\u6027<\/td>\n        <td>\u963b\u6b62\u63d0\u5347\u6216\u4ec5\u53d1\u5e03\u90e8\u5206\u6570\u636e\u5e76\u9644\u5e26\u53ef\u89c1\u7684\u65b0\u9c9c\u5ea6\u548c\u8d28\u91cf\u72b6\u6001<\/td>\n      <\/tr>\n      <tr>\n        <td>Silver &rarr; Gold<\/td>\n        <td>\u6307\u6807\u5bf9\u8d26\u3001\u8bed\u4e49\u5b9a\u4e49\u3001\u7ef4\u5ea6\u4e00\u81f4\u6027\u3001\u884c\u7ea7\u5b89\u5168\u3001\u65b0\u9c9c\u5ea6 SLA<\/td>\n        <td>\u963b\u6b62\u4eea\u8868\u677f\u5237\u65b0\uff0c\u901a\u77e5\u6570\u636e\u4ea7\u54c1\u8d1f\u8d23\u4eba\uff0c\u4fdd\u7559\u4e0a\u4e00\u53ef\u4fe1\u7248\u672c<\/td>\n      <\/tr>\n    <\/tbody>\n    <caption><strong>\u8868 1<\/strong> \u5404\u5c42\u8fb9\u754c\u7684\u8d28\u91cf\u68c0\u67e5\u4e0e\u5931\u8d25\u5904\u7406\u7b56\u7565<\/caption>\n  <\/table>\n<\/div>\n\n<div class=\"info-box success\">\n  <strong>Silver \u5c42\u7684\u516d\u5927\u8d28\u91cf\u7ef4\u5ea6\uff1a<\/strong>\u5b8c\u6574\u6027\uff08\u5173\u952e\u5b57\u6bb5\u5df2\u586b\u5145\uff09\u3001\u51c6\u786e\u6027\uff08\u503c\u5339\u914d\u73b0\u5b9e\uff09\u3001\u4e00\u81f4\u6027\uff08\u5173\u8054\u5b57\u6bb5\u4e00\u81f4\uff09\u3001\u65f6\u6548\u6027\uff08\u6309 SLA \u5237\u65b0\uff09\u3001\u6709\u6548\u6027\uff08\u683c\u5f0f\/\u8303\u56f4\/\u4e1a\u52a1\u89c4\u5219\uff09\u3001\u552f\u4e00\u6027\uff08\u5b9e\u4f53\u4ec5\u51fa\u73b0\u4e00\u6b21\uff09\u3002<sup><a href=\"#cite-4\">[4]<\/a><\/sup>\n<\/div>\n\n<!-- \u4e94\u3001\u5404\u5c42\u5bf9\u6bd4 -->\n<h2 id=\"zh-5\">\u4e94\u3001\u5404\u5c42\u5bf9\u6bd4<\/h2>\n\n<div class=\"table-wrap\">\n  <table>\n    <thead>\n      <tr>\n        <th>\u7ef4\u5ea6<\/th>\n        <th>Bronze<\/th>\n        <th>Silver<\/th>\n        <th>Gold<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>\u6838\u5fc3\u95ee\u9898<\/td>\n        <td>\u80fd\u5426\u5b8c\u6574\u91cd\u653e\u539f\u59cb\u6570\u636e\uff1f<\/td>\n        <td>\u5de5\u7a0b\u5e08\u80fd\u5426\u4fe1\u4efb\u8fd9\u4e9b\u5b9e\u4f53\uff1f<\/td>\n        <td>\u4e1a\u52a1\u65b9\u80fd\u5426\u76f4\u63a5\u636e\u6b64\u51b3\u7b56\uff1f<\/td>\n      <\/tr>\n      <tr>\n        <td>\u6570\u636e\u5f62\u6001<\/td>\n        <td>\u539f\u59cb\u6587\u4ef6\/\u4e8b\u4ef6\uff0c\u8ffd\u52a0\u5199\u5165<\/td>\n        <td>\u6e05\u6d17\u3001\u89c4\u8303\u5316\u3001\u53bb\u91cd\u7684\u5b9e\u4f53\u8868<\/td>\n        <td>\u805a\u5408\u3001\u4e1a\u52a1\u7ea7\u6570\u636e\u4ea7\u54c1<\/td>\n      <\/tr>\n      <tr>\n        <td>\u6570\u636e\u7c92\u5ea6<\/td>\n        <td>\u539f\u59cb\u4e8b\u4ef6\u7ea7<\/td>\n        <td>\u5b9e\u4f53\u7ea7\uff08\u5355\u6761\u8ba2\u5355\/\u5ba2\u6237\uff09<\/td>\n        <td>\u805a\u5408\u7ea7\uff08\u65e5\u6536\u5165\/\u6708\u7559\u5b58\uff09<\/td>\n      <\/tr>\n      <tr>\n        <td>\u8d28\u91cf\u4fdd\u8bc1<\/td>\n        <td>\u5b8c\u6574\u6027\u548c\u53ef\u8ffd\u6eaf\u6027<\/td>\n        <td>\u6b63\u786e\u6027\u548c\u4e00\u81f4\u6027<\/td>\n        <td>\u8bed\u4e49\u7a33\u5b9a\u6027\u548c\u65f6\u6548\u6027<\/td>\n      <\/tr>\n      <tr>\n        <td>\u4e1a\u52a1\u89c4\u5219<\/td>\n        <td>\u65e0<\/td>\n        <td>\u4e0d\u7f16\u7801\u4e1a\u52a1\u6307\u6807<\/td>\n        <td>\u7f16\u7801\u4e1a\u52a1\u8bed\u4e49\u548c\u5b9a\u4e49<\/td>\n      <\/tr>\n      <tr>\n        <td>\u5178\u578b\u8d1f\u8d23\u4eba<\/td>\n        <td>\u6570\u636e\u5e73\u53f0\/\u91c7\u96c6\u56e2\u961f<\/td>\n        <td>\u6570\u636e\u5de5\u7a0b\/\u9886\u57df\u56e2\u961f<\/td>\n        <td>\u5206\u6790\/\u9886\u57df\u4ea7\u54c1\u8d1f\u8d23\u4eba<\/td>\n      <\/tr>\n      <tr>\n        <td>\u6d88\u8d39\u8005<\/td>\n        <td>\u4ec5\u5185\u90e8\uff08\u7528\u4e8e\u91cd\u653e\uff09<\/td>\n        <td>\u5de5\u7a0b\u5e08\u3001\u5206\u6790\u5e08<\/td>\n        <td>\u4e1a\u52a1\u51b3\u7b56\u8005\u3001BI \u4eea\u8868\u677f\u3001ML \u6a21\u578b<\/td>\n      <\/tr>\n      <tr>\n        <td>\u5b58\u50a8\u7b56\u7565<\/td>\n        <td>\u4f4e\u6210\u672c\u5bf9\u8c61\u5b58\u50a8<\/td>\n        <td>\u5206\u533a\u8868\u5b58\u50a8<\/td>\n        <td>\u7269\u5316\u89c6\u56fe\u3001\u9ad8\u6027\u80fd\u67e5\u8be2<\/td>\n      <\/tr>\n      <tr>\n        <td>\u8bbf\u95ee\u63a7\u5236<\/td>\n        <td>\u6700\u5bbd\u677e<\/td>\n        <td>RBAC \u5f00\u59cb\u6536\u7d27<\/td>\n        <td>\u6700\u4e25\u683c\uff0c\u884c\u7ea7\u5b89\u5168<\/td>\n      <\/tr>\n      <tr>\n        <td>Schema \u5951\u7ea6<\/td>\n        <td>\u6355\u83b7\u4f46\u4e0d\u5f3a\u5236<\/td>\n        <td>Schema-on-Write<\/td>\n        <td>\u4e25\u683c\u8bed\u4e49\u5951\u7ea6<\/td>\n      <\/tr>\n      <tr>\n        <td>\u53ef\u53d8\u6027<\/td>\n        <td>\u4e0d\u53ef\u53d8\uff08\u8ffd\u52a0\uff09<\/td>\n        <td>\u53ef\u66f4\u65b0\uff08\u5408\u5e76\/SCD\uff09<\/td>\n        <td>\u53ef\u5237\u65b0\uff08\u5b9a\u65f6\/\u89e6\u53d1\uff09<\/td>\n      <\/tr>\n    <\/tbody>\n    <caption><strong>\u8868 2<\/strong> Bronze \/ Silver \/ Gold \u4e09\u5c42\u5168\u7ef4\u5ea6\u5bf9\u6bd4<\/caption>\n  <\/table>\n<\/div>\n\n<!-- \u516d\u3001\u5b9e\u9645\u793a\u4f8b -->\n<h2 id=\"zh-6\">\u516d\u3001\u5b9e\u9645\u793a\u4f8b\uff1a\u8ba2\u5355\u7ba1\u9053<\/h2>\n\n<p>\u4ee5\u4e00\u4e2a\u8ba2\u5355\u670d\u52a1\u4e3a\u4f8b\uff0c\u5c55\u793a\u6570\u636e\u5982\u4f55\u4ece Bronze \u6d41\u5411 Gold\uff1a<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<h3>6.1 \u573a\u666f\u63cf\u8ff0<\/h3>\n\n<p>\u4e00\u4e2a\u7535\u5546\u5e73\u53f0\u7684\u8ba2\u5355\u670d\u52a1\u6301\u7eed\u53d1\u51fa CDC\uff08\u53d8\u66f4\u6570\u636e\u6355\u83b7\uff09\u4e8b\u4ef6\u3002\u6570\u636e\u9700\u8981\u7ecf\u8fc7\u4e09\u5c42\u5904\u7406\u540e\uff0c\u6700\u7ec8\u4e3a\u8d22\u52a1\u56e2\u961f\u63d0\u4f9b\u6bcf\u65e5\u6536\u5165\u62a5\u8868\uff0c\u4e3a\u8fd0\u8425\u56e2\u961f\u63d0\u4f9b\u5c65\u7ea6\u6307\u6807\u3002<\/p>\n\n<h3>6.2 Bronze \u5c42\uff1a\u5b58\u50a8\u539f\u59cb CDC \u4e8b\u4ef6<\/h3>\n\n<pre class=\"code-block\"><code>bronze.orders_cdc\n  raw_payload          -- \u539f\u59cb CDC payload\n  op                   -- \u64cd\u4f5c\u7c7b\u578b (INSERT\/UPDATE\/DELETE)\n  source_lsn           -- \u6e90\u65e5\u5fd7\u5e8f\u5217\u53f7\n  source_event_time    -- \u6e90\u4e8b\u4ef6\u65f6\u95f4\n  ingestion_time       -- \u91c7\u96c6\u65f6\u95f4<\/code><\/pre>\n\n<h3>6.3 Silver \u5c42\uff1a\u91cd\u5efa\u8ba2\u5355\u72b6\u6001<\/h3>\n\n<pre class=\"code-block\"><code>silver.orders_current\n  order_id             -- \u4e3b\u952e\uff0c\u5df2\u53bb\u91cd\n  customer_id          -- \u5ba2\u6237ID\n  status               -- \u8ba2\u5355\u72b6\u6001 (pending\/paid\/shipped\/delivered\/refunded)\n  total_amount         -- \u8ba2\u5355\u603b\u989d\n  updated_at           -- \u6700\u540e\u66f4\u65b0\u65f6\u95f4\n  is_deleted           -- \u8f6f\u5220\u9664\u6807\u8bb0\n\nsilver.order_events\n  order_id             -- \u8ba2\u5355ID\n  event_type           -- \u4e8b\u4ef6\u7c7b\u578b\n  event_time           -- \u4e8b\u4ef6\u65f6\u95f4\n  previous_status      -- \u524d\u4e00\u72b6\u6001\n  next_status          -- \u540e\u4e00\u72b6\u6001<\/code><\/pre>\n\n<h3>6.4 Gold \u5c42\uff1a\u53d1\u5e03\u4e1a\u52a1\u6307\u6807<\/h3>\n\n<pre class=\"code-block\"><code>gold.daily_revenue\n  revenue_date         -- \u6536\u5165\u65e5\u671f\n  region               -- \u533a\u57df\n  channel              -- \u9500\u552e\u6e20\u9053\n  net_revenue          -- \u51c0\u6536\u5165\n  paid_orders          -- \u5df2\u4ed8\u6b3e\u8ba2\u5355\u6570<\/code><\/pre>\n\n<figure>\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item bronze\">bronze.orders_cdc<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item silver\" style=\"color:#1a1a2e\">silver.orders_current<\/span>\n      <span class=\"flow-arrow\">+<\/span>\n      <span class=\"flow-item silver\" style=\"color:#1a1a2e\">silver.order_events<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item gold\" style=\"color:#1a1a2e\">gold.daily_revenue<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>\u56fe 2<\/strong> \u8ba2\u5355\u7ba1\u9053\u793a\u4f8b\uff1a\u540c\u4e00\u6570\u636e\u6e90\u652f\u6491\u591a\u4e2a Silver \u5b9e\u4f53\u548c Gold \u6307\u6807<\/figcaption>\n<\/figure>\n\n<div class=\"info-box\">\n  <strong>\u5206\u79bb\u7684\u4ef7\u503c\uff1a<\/strong>\u5f53\u4e1a\u52a1\u903b\u8f91\u53d8\u66f4\u65f6\uff0c\u53ef\u4ece Bronze \u91cd\u5efa Silver\uff0c\u4fee\u590d Silver \u7684\u5b9e\u4f53\u89c4\u5219\uff0c\u540c\u65f6\u4fdd\u6301 Gold \u805a\u7126\u4e8e\u6d88\u8d39\u8005\u5b9a\u4e49\u3002\u4e8b\u6545\u6392\u67e5\u65f6\u53ef\u4ee5\u5b9a\u4f4d\u9519\u8bef\u5f15\u5165\u7684\u5c42\u7ea7\uff0c\u800c\u975e\u8c03\u8bd5\u4e00\u4e2a\u5de8\u5927\u7684\u6a21\u578b\u3002\n<\/div>\n\n<!-- \u4e03\u3001\u6700\u4f73\u5b9e\u8df5 -->\n<h2 id=\"zh-7\">\u4e03\u3001\u6700\u4f73\u5b9e\u8df5<\/h2>\n\n<div class=\"compare-box\">\n  <div class=\"compare-col do\">\n    <h4>&#9989; \u63a8\u8350\u505a\u6cd5<\/h4>\n    <p><strong>\u4fdd\u7559 Bronze \u7528\u4e8e\u91cd\u653e\uff1a<\/strong>Bronze \u4e0d\u53ef\u53d8\u6027\u548c\u4fdd\u7559\u7b56\u7565\u662f\u6574\u4e2a\u67b6\u6784\u53ef\u590d\u73b0\u6027\u7684\u57fa\u77f3\u3002<\/p>\n    <p><strong>Silver \u4fdd\u6301\u4e8b\u5b9e\u4e2d\u7acb\uff1a<\/strong>Silver \u5e94\u662f\u53ef\u590d\u7528\u7684\u4e8b\u5b9e\uff0c\u4e0d\u7f16\u7801\u5355\u4e00\u4eea\u8868\u677f\u7684\u4e1a\u52a1\u903b\u8f91\u3002<\/p>\n    <p><strong>Gold \u805a\u7126\u4e1a\u52a1\u6d88\u8d39\uff1a<\/strong>Gold \u7f16\u7801\u4e1a\u52a1\u8bed\u4e49\uff0c\u914d\u5907\u6240\u6709\u8005\u548c\u65b0\u9c9c\u5ea6\u76ee\u6807\u3002<\/p>\n    <p><strong>\u6bcf\u5c42\u8fb9\u754c\u8bbe\u8d28\u91cf\u68c0\u67e5\uff1a<\/strong>\u5c42\u95f4\u8fc7\u6e21\u9700\u8981\u6570\u636e\u8d28\u91cf\u68c0\u67e5\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f SQL \u8f6c\u6362\u3002<\/p>\n    <p><strong>\u8bb0\u5f55\u8840\u7f18\u548c\u5143\u6570\u636e\uff1a<\/strong>\u6bcf\u5c42\u4fdd\u7559\u8840\u7f18\uff0c\u652f\u6301\u5ba1\u8ba1\u548c\u53ef\u8ffd\u6eaf\u6027\u3002<\/p>\n    <p><strong>\u660e\u786e\u6240\u6709\u8005\uff1a<\/strong>\u6bcf\u4e2a Gold \u8868\u6709\u660e\u786e\u8d1f\u8d23\u4eba\u548c\u544a\u8b66\u8def\u7531\u3002<\/p>\n    <p><strong>\u5206\u5c42\u56de\u586b\uff1a<\/strong>\u56de\u586b\u5982\u540c\u751f\u4ea7\u53d8\u66f4\uff0c\u9700\u8981\u8303\u56f4\u3001\u8d1f\u8d23\u4eba\u3001\u9a8c\u8bc1\u67e5\u8be2\u548c\u56de\u6eda\u8ba1\u5212\u3002<\/p>\n  <\/div>\n  <div class=\"compare-col dont\">\n    <h4>&#10060; \u907f\u514d\u505a\u6cd5<\/h4>\n    <p><strong>\u8fc7\u65e9\u5220\u9664 Bronze\uff1a<\/strong>\u6ca1\u6709\u91cd\u653e\u80fd\u529b\uff0c\u6bcf\u6b21 Schema \u6216\u4e1a\u52a1\u89c4\u5219\u53d8\u66f4\u90fd\u5c06\u5f88\u75db\u82e6\u3002<\/p>\n    <p><strong>\u4e1a\u52a1\u6307\u6807\u653e\u5165 Silver\uff1a<\/strong>Silver \u5e94\u662f\u53ef\u590d\u7528\u4e8b\u5b9e\uff1bGold \u624d\u7f16\u7801\u4e1a\u52a1\u542b\u4e49\u3002<\/p>\n    <p><strong>\u6240\u6709\u5185\u5bb9\u590d\u5236\u5230\u6bcf\u5c42\uff1a<\/strong>\u5c42\u5e94\u589e\u52a0\u4ef7\u503c\uff0c\u800c\u975e\u6210\u500d\u589e\u52a0\u5b58\u50a8\u548c\u6df7\u4e71\u3002<\/p>\n    <p><strong>\u5c42\u95f4\u65e0\u6d4b\u8bd5\uff1a<\/strong>\u6bcf\u4e2a\u5c42\u8fc7\u6e21\u90fd\u9700\u8981\u6570\u636e\u8d28\u91cf\u68c0\u67e5\u3002<\/p>\n    <p><strong>Gold \u8868\u65e0\u6240\u6709\u8005\uff1a<\/strong>\u6ca1\u6709\u6240\u6709\u8005\u7684 Gold \u8868\u53ea\u662f\u7b49\u5f85\u51fa\u6545\u969c\u7684\u4eea\u8868\u677f\u4f9d\u8d56\u3002<\/p>\n    <p><strong>\u5ffd\u7565\u4e09\u79cd\u65f6\u95f4\uff1a<\/strong>\u4e8b\u4ef6\u65f6\u95f4\u3001\u91c7\u96c6\u65f6\u95f4\u548c\u5904\u7406\u65f6\u95f4\u5fc5\u987b\u533a\u5206\uff0c\u5426\u5219\u8c03\u8bd5\u56f0\u96be\u3002<\/p>\n    <p><strong>\u9759\u9ed8\u56de\u586b\uff1a<\/strong>\u9759\u9ed8\u6539\u53d8 Gold \u8868\u5373\u4f7f\u65b0\u6570\u5b57\u66f4\u6b63\u786e\u4e5f\u4f1a\u7834\u574f\u4fe1\u4efb\u3002<\/p>\n  <\/div>\n<\/div>\n\n<h3>7.1 Gold \u8868\u53d1\u5e03\u524d\u68c0\u67e5\u6e05\u5355<\/h3>\n\n<div class=\"card\">\n  <p><strong>&#9744; \u8c01\u62e5\u6709\u6b64\u8868\uff1f<\/strong>\u8d28\u91cf\u6216\u65b0\u9c9c\u5ea6\u5931\u8d25\u65f6\u8c01\u6536\u5230\u544a\u8b66\uff1f<\/p>\n  <p><strong>&#9744; \u8868\u7684\u7c92\u5ea6\u662f\u4ec0\u4e48\uff1f<\/strong>\u6d88\u8d39\u8005\u662f\u5426\u53ef\u80fd\u610f\u5916\u91cd\u590d\u8ba1\u6570\uff1f<\/p>\n  <p><strong>&#9744; \u4f9d\u8d56\u54ea\u4e9b Silver \u8868\uff1f<\/strong>\u8fd9\u4e9b\u4f9d\u8d56\u662f\u5426\u5df2\u6587\u6863\u5316\uff1f<\/p>\n  <p><strong>&#9744; \u7f16\u7801\u4e86\u54ea\u4e9b\u5b9a\u4e49\uff1f<\/strong>\u662f\u5426\u4e0e\u53e6\u4e00\u56e2\u961f\u7684\u6307\u6807\u5b9a\u4e49\u4e0d\u540c\uff1f<\/p>\n  <p><strong>&#9744; \u80fd\u5426\u4ece Bronze \u91cd\u5efa\uff1f<\/strong>\u53d1\u73b0 Bug \u65f6\u662f\u5426\u53ef\u590d\u73b0\uff1f<\/p>\n  <p><strong>&#9744; \u5931\u8d25\u53d1\u5e03\u65f6\u662f\u5426\u6709\u4e0a\u4e00\u53ef\u4fe1\u7248\u672c\uff1f<\/strong>\u6d88\u8d39\u8005\u662f\u5426\u53d7\u5f71\u54cd\uff1f<\/p>\n<\/div>\n\n<!-- \u516b\u3001\u5e38\u89c1\u8bef\u533a -->\n<h2 id=\"zh-8\">\u516b\u3001\u5e38\u89c1\u8bef\u533a<\/h2>\n\n<h3>8.1 \u5178\u578b\u6545\u969c\u6a21\u5f0f<\/h3>\n\n<div class=\"table-wrap\">\n  <table>\n    <thead>\n      <tr>\n        <th>\u6545\u969c<\/th>\n        <th>\u75c7\u72b6<\/th>\n        <th>\u53ef\u80fd\u539f\u56e0<\/th>\n        <th>\u7f13\u89e3\u63aa\u65bd<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>Gold \u6570\u636e\u8fc7\u671f<\/td>\n        <td>\u4eea\u8868\u677f\u663e\u793a\u65e7\u6570\u636e<\/td>\n        <td>\u4e0b\u6e38\u4f5c\u4e1a\u5931\u8d25<\/td>\n        <td>\u81ea\u52a8\u91cd\u8bd5\u548c\u544a\u8b66<\/td>\n      <\/tr>\n      <tr>\n        <td>Schema \u6f02\u79fb<\/td>\n        <td>Silver \u67e5\u8be2\u62a5\u9519<\/td>\n        <td>\u4e0a\u6e38 Schema \u53d8\u66f4<\/td>\n        <td>Schema \u6821\u9a8c\u548c\u8f6f\u5931\u8d25<\/td>\n      <\/tr>\n      <tr>\n        <td>\u91cd\u590d\u8bb0\u5f55<\/td>\n        <td>\u6307\u6807\u865a\u9ad8<\/td>\n        <td>\u975e\u5e42\u7b49\u91c7\u96c6<\/td>\n        <td>\u5e42\u7b49\u952e\u548c\u53bb\u91cd<\/td>\n      <\/tr>\n      <tr>\n        <td>\u5206\u533a\u4e0d\u5b8c\u6574<\/td>\n        <td>\u805a\u5408\u6570\u636e\u7f3a\u5931<\/td>\n        <td>Bronze \u90e8\u5206\u5199\u5165\u5931\u8d25<\/td>\n        <td>\u539f\u5b50\u5199\u5165\u548c\u6682\u5b58<\/td>\n      <\/tr>\n      <tr>\n        <td>\u6210\u672c\u98d9\u5347<\/td>\n        <td>\u8ba1\u7b97\u8d39\u7528\u8d85\u9884\u671f<\/td>\n        <td>Gold \u8868\u91cd\u5efa\u8fc7\u4e8e\u9891\u7e41<\/td>\n        <td>\u901f\u7387\u9650\u5236\u548c\u6210\u672c\u544a\u8b66<\/td>\n      <\/tr>\n      <tr>\n        <td>\u8bbf\u95ee\u6cc4\u9732<\/td>\n        <td>\u672a\u6388\u6743\u8bfb\u53d6 Gold<\/td>\n        <td>RBAC \u6216\u7b56\u7565\u914d\u7f6e\u9519\u8bef<\/td>\n        <td>\u7b56\u7565\u81ea\u52a8\u5316\u548c\u5ba1\u8ba1<\/td>\n      <\/tr>\n    <\/tbody>\n    <caption><strong>\u8868 3<\/strong> \u5e38\u89c1\u6545\u969c\u6a21\u5f0f\u4e0e\u7f13\u89e3\u63aa\u65bd<\/caption>\n  <\/table>\n<\/div>\n\n<h3>8.2 \u67b6\u6784\u8bef\u7528<\/h3>\n\n<div class=\"info-box danger\">\n  <strong>\u8fc7\u5ea6\u5206\u5c42\uff1a<\/strong>\u5bf9\u5fae\u6570\u636e\u96c6\u5e94\u7528\u4e09\u5c42\u67b6\u6784\u4f1a\u589e\u52a0\u5ef6\u8fdf\u548c\u8fd0\u8425\u5f00\u9500\u3002\u5c0f\u9879\u76ee\u6216\u77ed\u671f\u5b9e\u9a8c\u6570\u636e\u4e0d\u503c\u5f97\u5b8c\u6574\u7ed3\u6784\u5316\u3002\n<\/div>\n\n<div class=\"info-box warn\">\n  <strong>Gold \u5c42\u53d8\u6210\u552f\u4e00\u7684\u4e1a\u52a1\u89c4\u5219\u4ed3\u5e93\uff1a<\/strong>\u5f53\u6240\u6709\u4e1a\u52a1\u89c4\u5219\u4ec5\u5b58\u5728\u4e8e Gold \u65f6\uff0c\u4e00\u4e2a\u56e2\u961f\u7684\u4eea\u8868\u677f\u770b\u8d77\u6765\u6b63\u786e\uff0c\u800c\u5176\u4ed6\u6d88\u8d39\u8005\u770b\u5230\u4e0d\u4e00\u81f4\u7684\u6570\u5b57\u3002\n<\/div>\n\n<div class=\"info-box warn\">\n  <strong>Silver \u8fc7\u4e8e\u4e1a\u52a1\u5316\uff1a<\/strong>\u5982\u679c\u67d0\u4e2a\u4eea\u8868\u677f\u7684\u903b\u8f91\u8fdb\u5165 Silver\uff0c\u5176\u4ed6\u6240\u6709\u6d88\u8d39\u8005\u90fd\u4f1a\u7ee7\u627f\u8be5\u4eea\u8868\u677f\u7684\u5047\u8bbe\u3002\n<\/div>\n\n<!-- \u4e5d\u3001\u4e0e\u5176\u4ed6\u67b6\u6784\u7684\u5173\u7cfb -->\n<h2 id=\"zh-9\">\u4e5d\u3001\u4e0e\u5176\u4ed6\u67b6\u6784\u7684\u5173\u7cfb<\/h2>\n\n<div class=\"table-wrap\">\n  <table>\n    <thead>\n      <tr>\n        <th>\u6982\u5ff5<\/th>\n        <th>\u4e0e Medallion \u7684\u533a\u522b<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>Data Lake\uff08\u6570\u636e\u6e56\uff09<\/td>\n        <td>\u805a\u7126\u5b58\u50a8\u800c\u975e\u5206\u5c42\u7cbe\u70bc\uff1b\u5e38\u88ab\u6df7\u6dc6\u4e3a\u7b49\u540c\u4e8e Bronze \u5c42<\/td>\n      <\/tr>\n      <tr>\n        <td>Data Warehouse\uff08\u6570\u636e\u4ed3\u5e93\uff09<\/td>\n        <td>\u5f3a\u8c03\u5206\u6790\u5b58\u50a8\uff1b\u901a\u5e38\u4f4d\u4e8e Gold \u5c42\u4f4d\u7f6e<\/td>\n      <\/tr>\n      <tr>\n        <td>Lakehouse\uff08\u6e56\u4ed3\u4e00\u4f53\uff09<\/td>\n        <td>\u7ed3\u5408\u6570\u636e\u6e56\u548c\u6570\u636e\u4ed3\u5e93\u7279\u6027\uff1b\u652f\u6301\u5206\u5c42\u6a21\u5f0f\u4f46\u975e\u540c\u4e49\u8bcd<\/td>\n      <\/tr>\n      <tr>\n        <td>ETL\/ELT<\/td>\n        <td>\u662f\u8f6c\u6362\u65b9\u6cd5\u800c\u975e\u5206\u5c42\u5b9a\u4e49\uff1b\u4eba\u4eec\u5e38\u6df7\u6dc6\u6267\u884c\u65b9\u5f0f\u4e0e\u5206\u5c42\u67b6\u6784<\/td>\n      <\/tr>\n      <tr>\n        <td>CDC\uff08\u53d8\u66f4\u6570\u636e\u6355\u83b7\uff09<\/td>\n        <td>\u662f\u91c7\u96c6\u65b9\u6cd5\u800c\u975e\u5206\u5c42\u6a21\u578b\uff1b\u901a\u5e38\u4f5c\u4e3a Bronze \u5c42\u7684\u8f93\u5165\u6e90<\/td>\n      <\/tr>\n      <tr>\n        <td>Delta Lake \/ Iceberg<\/td>\n        <td>\u652f\u6301\u5206\u5c42\u6a21\u5f0f\u7684\u5b58\u50a8\u683c\u5f0f\uff1b\u975e\u5206\u5c42\u6240\u5fc5\u9700<\/td>\n      <\/tr>\n      <tr>\n        <td>Data Mesh\uff08\u6570\u636e\u7f51\u683c\uff09<\/td>\n        <td>\u7ec4\u7ec7\u6a21\u5f0f\u800c\u975e\u6570\u636e\u5206\u5c42\u6a21\u578b\uff1b\u4e0e\u5206\u5c42\u67b6\u6784\u4e92\u8865\u800c\u975e\u66ff\u4ee3<\/td>\n      <\/tr>\n      <tr>\n        <td>Semantic Layer\uff08\u8bed\u4e49\u5c42\uff09<\/td>\n        <td>\u4e1a\u52a1\u89c6\u56fe\uff0c\u901a\u5e38\u6784\u5efa\u5728 Gold \u4e4b\u4e0a<\/td>\n      <\/tr>\n    <\/tbody>\n    <caption><strong>\u8868 4<\/strong> Medallion Architecture \u4e0e\u76f8\u5173\u6982\u5ff5\u7684\u533a\u522b<\/caption>\n  <\/table>\n<\/div>\n\n<h3>9.1 \u5178\u578b\u67b6\u6784\u6a21\u5f0f<\/h3>\n\n<div class=\"card\">\n  <h4>1. \u6279\u5904\u7406 ELT on Data Lake<\/h4>\n  <p>\u4f7f\u7528\u5b9a\u65f6 Spark \u4f5c\u4e1a\u5c06 Bronze \u6587\u4ef6\u8f6c\u5316\u4e3a Silver \u8868\uff0c\u521b\u5efa Gold \u7269\u5316\u89c6\u56fe\u3002\u9002\u7528\u4e8e\u6210\u672c\u654f\u611f\u4e14\u65e0\u8fd1\u5b9e\u65f6\u9700\u6c42\u7684\u573a\u666f\u3002<\/p>\n<\/div>\n<div class=\"card\">\n  <h4>2. \u6d41\u5f0f\u4f18\u5148\u7ba1\u9053<\/h4>\n  <p>\u901a\u8fc7 Kafka \u91c7\u96c6\uff0c\u4f7f\u7528\u6d41\u5904\u7406\u5f15\u64ce\u8fd1\u5b9e\u65f6\u4ea7\u51fa Silver\uff0c\u805a\u5408\u5230 Gold \u652f\u6301\u4f4e\u5ef6\u8fdf\u4eea\u8868\u677f\u3002\u9002\u7528\u4e8e\u65b0\u9c9c\u5ea6\u5173\u952e\u7684\u573a\u666f\u3002<\/p>\n<\/div>\n<div class=\"card\">\n  <h4>3. Lakehouse + ACID \u5b58\u50a8<\/h4>\n  <p>\u5c06 Bronze \u548c Silver \u5b58\u50a8\u4e3a Delta\/Iceberg \u683c\u5f0f\uff08\u652f\u6301\u4e8b\u52a1\uff09\uff0c\u4f7f\u7528 SQL \u5f15\u64ce\u521b\u5efa Gold\u3002\u9002\u7528\u4e8e\u9700\u8981\u539f\u5b50\u6027\u548c\u91cd\u5904\u7406\u7684\u573a\u666f\u3002<\/p>\n<\/div>\n<div class=\"card\">\n  <h4>4. \u6df7\u5408 CDC + \u6279\u5904\u7406<\/h4>\n  <p>\u901a\u8fc7 CDC \u6355\u83b7\u6e90\u6570\u636e\u5e93\u53d8\u66f4\u5199\u5165 Bronze\uff0c\u5fae\u6279\u5904\u7406\u5230 Silver\uff0c\u5b9a\u65f6\u805a\u5408\u5230 Gold \u7528\u4e8e\u5206\u6790\u3002\u9002\u7528\u4e8e\u4e8b\u52a1\u7cfb\u7edf\u96c6\u6210\u3002<\/p>\n<\/div>\n\n<\/div>\n\n<!-- ======== English Version ======== -->\n<div class=\"lang-section\" id=\"lang-en\">\n<div class=\"hero\">\n  <h1>Medallion Architecture Explained<span class=\"sub\">A Comprehensive Guide to Bronze, Silver, and Gold Data Layers<\/span><\/h1>\n  <p>Medallion Architecture is a data quality stratification pattern that organizes raw, cleaned, and curated datasets into progressively higher-value stages. The three-tier Bronze, Silver, Gold structure was popularized by Databricks and is now the de facto standard for data lakehouse design.<sup><a href=\"#cite-1\">[1]<\/a><\/sup><\/p>\n<\/div>\n\n<div class=\"toc\">\n  <h3>Contents<\/h3>\n  <ol>\n    <li><a href=\"#en-1\">1. What is Medallion Architecture<\/a><\/li>\n    <li><a href=\"#en-2\">2. The Three Layers Explained<\/a><\/li>\n    <li><a href=\"#en-3\">3. How It Works: Data Flow<\/a><\/li>\n    <li><a href=\"#en-4\">4. Data Quality Checks by Layer<\/a><\/li>\n    <li><a href=\"#en-5\">5. Layer Comparison<\/a><\/li>\n    <li><a href=\"#en-6\">6. Example: Orders Pipeline<\/a><\/li>\n    <li><a href=\"#en-7\">7. Best Practices<\/a><\/li>\n    <li><a href=\"#en-8\">8. Common Mistakes<\/a><\/li>\n    <li><a href=\"#en-9\">9. Relationship with Other Architectures<\/a><\/li>\n  <\/ol>\n<\/div>\n\n<!-- 1. What is Medallion Architecture -->\n<h2 id=\"en-1\">1. What is Medallion Architecture<\/h2>\n\n<p><strong>Medallion Architecture<\/strong> is a data lifecycle and quality stratification pattern that organizes raw, cleaned, and curated datasets into progressively higher-value stages to support reliable analytics, ML, and operational use.<sup><a href=\"#cite-2\">[2]<\/a><\/sup><\/p>\n\n<div class=\"info-box\">\n  <strong>In one sentence:<\/strong> A three-tiered data maturity model organizing raw ingestion, cleaned normalized data, and curated business-ready datasets with ascending quality, governance, and performance guarantees.\n<\/div>\n\n<p>The core idea can be compared to a refinery: raw ore enters one end, is progressively refined, and usable refined metal exits the other. The names Bronze, Silver, and Gold reflect exactly that progressive quality improvement.<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<div class=\"card\">\n  <h4>Core Design Principles<\/h4>\n  <div class=\"two-col\" style=\"margin:0\">\n    <div class=\"col\" style=\"margin:0\">\n      <p><strong>Progressive enrichment:<\/strong> Each layer depends on previous layer outputs.<\/p>\n    <\/div>\n    <div class=\"col\" style=\"margin:0\">\n      <p><strong>Traceability:<\/strong> Metadata and lineage must persist between layers.<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"two-col\" style=\"margin:0\">\n    <div class=\"col\" style=\"margin:0\">\n      <p><strong>Tightening contracts:<\/strong> Schemas and semantic definitions tighten as data ascends.<\/p>\n    <\/div>\n    <div class=\"col\" style=\"margin:0\">\n      <p><strong>Reproducibility:<\/strong> Bronze should allow reprocessing to rebuild higher layers.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- 2. The Three Layers -->\n<h2 id=\"en-2\">2. The Three Layers Explained<\/h2>\n\n<div class=\"three-col\">\n  <div class=\"layer-card bronze\">\n    <div class=\"layer-icon\">&#129354;<\/div>\n    <div class=\"layer-name\">Bronze<\/div>\n    <div class=\"layer-desc\">Raw data landing zone with minimal transformation<\/div>\n    <div class=\"layer-promise\"><strong>Promise:<\/strong> &#8220;This is exactly what arrived from the source&#8221;<\/div>\n  <\/div>\n  <div class=\"layer-card silver\">\n    <div class=\"layer-icon\">&#129353;<\/div>\n    <div class=\"layer-name\">Silver<\/div>\n    <div class=\"layer-desc\">Cleaned, normalized, deduplicated reliable facts<\/div>\n    <div class=\"layer-promise\"><strong>Promise:<\/strong> &#8220;This is the clean, correct entity record&#8221;<\/div>\n  <\/div>\n  <div class=\"layer-card gold\">\n    <div class=\"layer-icon\">&#129354;<\/div>\n    <div class=\"layer-name\">Gold<\/div>\n    <div class=\"layer-desc\">Business-ready curated data products for consumption<\/div>\n    <div class=\"layer-promise\"><strong>Promise:<\/strong> &#8220;This is what the business can act on&#8221;<\/div>\n  <\/div>\n<\/div>\n\n<h3>2.1 Bronze Layer: Raw Data<\/h3>\n\n<p>The <span class=\"badge bronze\">Bronze<\/span> layer stores source data with minimal transformation. Its core goal is to <strong>preserve enough original signal to support replay<\/strong>. Typical data includes CDC events, API payloads, logs, Kafka topics, CSV exports, and vendor data files.<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<div class=\"info-box warn\">\n  <strong>Bronze is not a junk drawer:<\/strong> While storing raw data, it must have ingestion metadata (source, batch ID, timestamps), schema capture, and retention policy. The goal is to preserve the original signal, not pretend the data is already clean.\n<\/div>\n\n<p><strong>Typical Bronze table structure:<\/strong><\/p>\n<pre class=\"code-block\"><code>bronze.orders_raw\n- source_system          -- source system identifier\n- ingestion_batch_id     -- ingestion batch ID\n- ingestion_time         -- when received\n- payload_json           -- raw JSON payload\n- source_event_time      -- when event occurred at source\n- source_file_path       -- original file path<\/code><\/pre>\n\n<h3>2.2 Silver Layer: Clean &#038; Conformed Facts<\/h3>\n\n<p>The <span class=\"badge silver\">Silver<\/span> layer turns raw data into usable entities. This is where you parse payloads, normalize timestamps, deduplicate records, apply type checks, handle deletes, join reference data, and create conformed dimensions.<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<p>Silver tables should be safe for engineers and analysts who understand the domain. They are not necessarily final business metrics, but they should be <strong>dependable building blocks<\/strong>.<\/p>\n\n<p><strong>Typical Silver table structure:<\/strong><\/p>\n<pre class=\"code-block\"><code>silver.orders\n- order_id              -- primary key, deduplicated\n- customer_id           -- linked customer\n- order_status          -- standardized status\n- order_total           -- typed total amount\n- currency              -- currency code\n- ordered_at            -- event time\n- updated_at            -- last update time\n- is_deleted            -- soft delete flag<\/code><\/pre>\n\n<h3>2.3 Gold Layer: Business-Ready Data Products<\/h3>\n\n<p>The <span class=\"badge gold\">Gold<\/span> layer publishes datasets that answer real business questions. Gold tables power dashboards, finance reports, ML features, reverse ETL jobs, and operational reporting. They should have <strong>strong ownership, documented semantics, freshness expectations, and quality checks<\/strong>.<sup><a href=\"#cite-2\">[2]<\/a><\/sup><\/p>\n\n<p><strong>Typical Gold table structure:<\/strong><\/p>\n<pre class=\"code-block\"><code>gold.daily_revenue\n- revenue_date           -- revenue date\n- region                 -- region\n- product_line           -- product line\n- gross_revenue          -- gross revenue\n- refunds                -- refund amount\n- net_revenue            -- net revenue\n- paying_customers       -- paying customer count<\/code><\/pre>\n\n<!-- 3. How It Works -->\n<h2 id=\"en-3\">3. How It Works: Data Flow<\/h2>\n\n<p>As data flows from source systems through the Medallion Architecture, it goes through the following staged process:<\/p>\n\n<figure>\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item\">Source<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item bronze\">Bronze<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item silver\">Silver<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item gold\">Gold<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item green\">Consumers<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.8rem\">\n      <span class=\"flow-item yellow\" style=\"color:#1a1a2e;font-size:.75rem\">CDC\/API\/Logs\/CSV<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item bronze\" style=\"font-size:.75rem\">Raw Landing<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item silver\" style=\"font-size:.75rem;color:#1a1a2e\">Clean &#038; Dedupe<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item gold\" style=\"font-size:.75rem;color:#1a1a2e\">Aggregate<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item green\" style=\"font-size:.75rem\">BI\/ML\/Reports<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>Figure 1<\/strong> Medallion Architecture data flow: three-stage progressive refinement from source to consumers<\/figcaption>\n<\/figure>\n\n<ol class=\"steps\">\n  <li>\n    <strong>Ingestion &rarr; Bronze<\/strong>\n    <span class=\"note\">Ingestors collect raw records from sources and write to Bronze. Data is appended immutably with ingestion metadata (source, batch ID, timestamps).<\/span>\n  <\/li>\n  <li>\n    <strong>Bronze &rarr; Silver (Transform)<\/strong>\n    <span class=\"note\">Batch or streaming engines parse payloads, normalize timestamps, deduplicate, type-check, handle deletes\/updates, join reference data to produce conformed entity tables.<\/span>\n  <\/li>\n  <li>\n    <strong>Silver &rarr; Gold (Aggregate)<\/strong>\n    <span class=\"note\">Aggregation and enrichment jobs transform Silver entities into business metrics. Gold tables encode business semantics with owners, freshness SLAs, and access policies.<\/span>\n  <\/li>\n  <li>\n    <strong>Gold &rarr; Consumers<\/strong>\n    <span class=\"note\">BI dashboards, ML training, finance reports, reverse ETL, and APIs directly consume Gold layer data products.<\/span>\n  <\/li>\n  <li>\n    <strong>Replay &#038; Repair<\/strong>\n    <span class=\"note\">If a bug is found or business logic changes, Silver and Gold can be rebuilt from Bronze deterministically while keeping the source of truth visible.<\/span>\n  <\/li>\n<\/ol>\n\n<div class=\"info-box\">\n  <strong>Cost-performance tradeoff:<\/strong> Bronze favors low-cost storage (object stores); Gold favors query performance and governance (materialized views, columnar storage).\n<\/div>\n\n<!-- 4. Quality Checks -->\n<h2 id=\"en-4\">4. Data Quality Checks by Layer<\/h2>\n\n<p>Quality checks should become <strong>stricter as data moves upward<\/strong>. Bronze checks prove ingestion worked and is traceable. Silver checks prove entity correctness. Gold checks prove business meaning and consumer safety.<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<div class=\"table-wrap\">\n  <table>\n    <thead>\n      <tr>\n        <th>Boundary<\/th>\n        <th>Useful Checks<\/th>\n        <th>Failure Action<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>Source &rarr; Bronze<\/td>\n        <td>File count, schema capture, source timestamp, batch ID, duplicate delivery, malformed payload rate<\/td>\n        <td>Quarantine bad payloads, alert ingestion owner, keep raw data for replay<\/td>\n      <\/tr>\n      <tr>\n        <td>Bronze &rarr; Silver<\/td>\n        <td>Primary key uniqueness, required fields, type conversion, late arrivals, deletes, referential integrity<\/td>\n        <td>Stop promotion or publish partial data with visible freshness\/quality status<\/td>\n      <\/tr>\n      <tr>\n        <td>Silver &rarr; Gold<\/td>\n        <td>Metric reconciliation, semantic definitions, accepted dimensions, row-level security, freshness SLA<\/td>\n        <td>Block dashboard refresh, notify data product owner, preserve previous trusted version<\/td>\n      <\/tr>\n    <\/tbody>\n    <caption><strong>Table 1<\/strong> Quality checks and failure actions at each layer boundary<\/caption>\n  <\/table>\n<\/div>\n\n<div class=\"info-box success\">\n  <strong>Silver&#8217;s Six Quality Dimensions:<\/strong> Completeness (critical fields populated), Accuracy (values match reality), Consistency (related fields agree), Timeliness (refresh per SLA), Validity (format\/range\/business rules), Uniqueness (entities appear once).<sup><a href=\"#cite-4\">[4]<\/a><\/sup>\n<\/div>\n\n<!-- 5. Layer Comparison -->\n<h2 id=\"en-5\">5. Layer Comparison<\/h2>\n\n<div class=\"table-wrap\">\n  <table>\n    <thead>\n      <tr>\n        <th>Dimension<\/th>\n        <th>Bronze<\/th>\n        <th>Silver<\/th>\n        <th>Gold<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>Core Question<\/td>\n        <td>Can we replay what arrived?<\/td>\n        <td>Can engineers trust these entities?<\/td>\n        <td>Can the business act on this?<\/td>\n      <\/tr>\n      <tr>\n        <td>Data Shape<\/td>\n        <td>Raw files\/events, append-only<\/td>\n        <td>Cleaned, normalized, deduped entities<\/td>\n        <td>Aggregated, business-level products<\/td>\n      <\/tr>\n      <tr>\n        <td>Granularity<\/td>\n        <td>Raw event level<\/td>\n        <td>Entity level (single order\/customer)<\/td>\n        <td>Aggregate level (daily revenue\/monthly retention)<\/td>\n      <\/tr>\n      <tr>\n        <td>Quality Guarantee<\/td>\n        <td>Completeness &#038; traceability<\/td>\n        <td>Correctness &#038; conformance<\/td>\n        <td>Semantic stability &#038; freshness<\/td>\n      <\/tr>\n      <tr>\n        <td>Business Rules<\/td>\n        <td>None<\/td>\n        <td>Does not encode metrics<\/td>\n        <td>Encodes business semantics<\/td>\n      <\/tr>\n      <tr>\n        <td>Typical Owner<\/td>\n        <td>Data platform \/ ingestion team<\/td>\n        <td>Data engineering \/ domain team<\/td>\n        <td>Analytics \/ domain product owner<\/td>\n      <\/tr>\n      <tr>\n        <td>Consumers<\/td>\n        <td>Internal only (for replay)<\/td>\n        <td>Engineers, analysts<\/td>\n        <td>Business decision-makers, BI, ML<\/td>\n      <\/tr>\n      <tr>\n        <td>Storage Strategy<\/td>\n        <td>Low-cost object storage<\/td>\n        <td>Partitioned table store<\/td>\n        <td>Materialized views, high-performance<\/td>\n      <\/tr>\n      <tr>\n        <td>Access Control<\/td>\n        <td>Most relaxed<\/td>\n        <td>RBAC tightening<\/td>\n        <td>Most strict, row-level security<\/td>\n      <\/tr>\n      <tr>\n        <td>Schema Contract<\/td>\n        <td>Captured but not enforced<\/td>\n        <td>Schema-on-Write<\/td>\n        <td>Strict semantic contract<\/td>\n      <\/tr>\n      <tr>\n        <td>Mutability<\/td>\n        <td>Immutable (append)<\/td>\n        <td>Updatable (merge\/SCD)<\/td>\n        <td>Refreshable (scheduled\/triggered)<\/td>\n      <\/tr>\n    <\/tbody>\n    <caption><strong>Table 2<\/strong> Full comparison of Bronze \/ Silver \/ Gold layers<\/caption>\n  <\/table>\n<\/div>\n\n<!-- 6. Example -->\n<h2 id=\"en-6\">6. Example: Orders Pipeline<\/h2>\n\n<p>Using an e-commerce order service as an example, here&#8217;s how data flows from Bronze to Gold:<sup><a href=\"#cite-3\">[3]<\/a><\/sup><\/p>\n\n<h3>6.1 Scenario<\/h3>\n\n<p>An e-commerce platform&#8217;s order service continuously emits CDC (Change Data Capture) events. Data needs to flow through three layers to ultimately provide daily revenue reports for finance and fulfillment metrics for operations.<\/p>\n\n<h3>6.2 Bronze: Store Raw CDC Events<\/h3>\n\n<pre class=\"code-block\"><code>bronze.orders_cdc\n  raw_payload          -- raw CDC payload\n  op                   -- operation type (INSERT\/UPDATE\/DELETE)\n  source_lsn           -- source log sequence number\n  source_event_time    -- source event time\n  ingestion_time       -- when received by platform<\/code><\/pre>\n\n<h3>6.3 Silver: Reconstruct Order State<\/h3>\n\n<pre class=\"code-block\"><code>silver.orders_current\n  order_id             -- primary key, deduplicated\n  customer_id          -- customer ID\n  status               -- order status (pending\/paid\/shipped\/delivered\/refunded)\n  total_amount         -- order total\n  updated_at           -- last update time\n  is_deleted           -- soft delete flag\n\nsilver.order_events\n  order_id             -- order ID\n  event_type           -- event type\n  event_time           -- event time\n  previous_status      -- previous status\n  next_status          -- next status<\/code><\/pre>\n\n<h3>6.4 Gold: Publish Business Metrics<\/h3>\n\n<pre class=\"code-block\"><code>gold.daily_revenue\n  revenue_date         -- revenue date\n  region               -- region\n  channel              -- sales channel\n  net_revenue          -- net revenue\n  paid_orders          -- paid order count<\/code><\/pre>\n\n<figure>\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item bronze\">bronze.orders_cdc<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item silver\" style=\"color:#1a1a2e\">silver.orders_current<\/span>\n      <span class=\"flow-arrow\">+<\/span>\n      <span class=\"flow-item silver\" style=\"color:#1a1a2e\">silver.order_events<\/span>\n      <span class=\"flow-arrow\">&rarr;<\/span>\n      <span class=\"flow-item gold\" style=\"color:#1a1a2e\">gold.daily_revenue<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>Figure 2<\/strong> Orders pipeline example: one source feeds multiple Silver entities and Gold metrics<\/figcaption>\n<\/figure>\n\n<div class=\"info-box\">\n  <strong>Value of separation:<\/strong> When business logic changes, you can replay from Bronze to rebuild Silver, fix Silver&#8217;s entity rules, and keep Gold focused on consumer definitions. Incident response is cleaner \u2014 you can identify which layer introduced the error instead of debugging one giant model.\n<\/div>\n\n<!-- 7. Best Practices -->\n<h2 id=\"en-7\">7. Best Practices<\/h2>\n\n<div class=\"compare-box\">\n  <div class=\"compare-col do\">\n    <h4>&#9989; Recommended<\/h4>\n    <p><strong>Keep Bronze for replay:<\/strong> Bronze immutability and retention are the foundation of reproducibility.<\/p>\n    <p><strong>Silver stays fact-neutral:<\/strong> Silver should be reusable facts, not encoding one dashboard&#8217;s logic.<\/p>\n    <p><strong>Gold focuses on consumption:<\/strong> Gold encodes business semantics with owners and freshness targets.<\/p>\n    <p><strong>Quality checks at each boundary:<\/strong> Layer transitions need data quality tests, not just SQL transforms.<\/p>\n    <p><strong>Record lineage &#038; metadata:<\/strong> Each layer preserves lineage for audit and traceability.<\/p>\n    <p><strong>Clear ownership:<\/strong> Every Gold table has a named owner and alert routing.<\/p>\n    <p><strong>Treat backfills as production changes:<\/strong> Scope, owner, validation, rollback plan, and consumer communication.<\/p>\n  <\/div>\n  <div class=\"compare-col dont\">\n    <h4>&#10060; Avoid<\/h4>\n    <p><strong>Deleting Bronze too early:<\/strong> Without replay, every schema or business-rule change becomes painful.<\/p>\n    <p><strong>Business metrics in Silver:<\/strong> Silver should be reusable facts; Gold encodes business meaning.<\/p>\n    <p><strong>Copying everything into every layer:<\/strong> Layers should add value, not multiply storage and confusion.<\/p>\n    <p><strong>No tests at boundaries:<\/strong> Each layer transition needs quality checks.<\/p>\n    <p><strong>Gold without an owner:<\/strong> A gold table without an owner is a dashboard dependency waiting to break.<\/p>\n    <p><strong>Ignoring three timestamps:<\/strong> Event time, ingestion time, and processing time must be distinguished.<\/p>\n    <p><strong>Silent backfills:<\/strong> Silently changing a Gold table breaks trust even if the new number is more correct.<\/p>\n  <\/div>\n<\/div>\n\n<h3>7.1 Gold Table Publishing Checklist<\/h3>\n\n<div class=\"card\">\n  <p><strong>&#9744; Who owns this table?<\/strong> Who gets alerted when freshness or quality fails?<\/p>\n  <p><strong>&#9744; What is the grain?<\/strong> Can a consumer accidentally double-count?<\/p>\n  <p><strong>&#9744; Which Silver tables feed it?<\/strong> Are dependencies documented?<\/p>\n  <p><strong>&#9744; What definitions are encoded?<\/strong> Do they differ from another team&#8217;s metric?<\/p>\n  <p><strong>&#9744; Can it be reproduced from Bronze?<\/strong> Is it reproducible if a bug is found?<\/p>\n  <p><strong>&#9744; Is a previous trusted version available?<\/strong> Are consumers protected during failed publishes?<\/p>\n<\/div>\n\n<!-- 8. Common Mistakes -->\n<h2 id=\"en-8\">8. Common Mistakes<\/h2>\n\n<h3>8.1 Typical Failure Modes<\/h3>\n\n<div class=\"table-wrap\">\n  <table>\n    <thead>\n      <tr>\n        <th>Failure<\/th>\n        <th>Symptom<\/th>\n        <th>Likely Cause<\/th>\n        <th>Mitigation<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>Stale Gold<\/td>\n        <td>Dashboards show old data<\/td>\n        <td>Downstream job failure<\/td>\n        <td>Automated retries and alerting<\/td>\n      <\/tr>\n      <tr>\n        <td>Schema drift<\/td>\n        <td>Silver query errors<\/td>\n        <td>Upstream schema change<\/td>\n        <td>Schema validation and soft-fail<\/td>\n      <\/tr>\n      <tr>\n        <td>Duplicate records<\/td>\n        <td>Inflated metrics<\/td>\n        <td>Non-idempotent ingestion<\/td>\n        <td>Idempotency keys and dedupe<\/td>\n      <\/tr>\n      <tr>\n        <td>Partial partitions<\/td>\n        <td>Missing aggregates<\/td>\n        <td>Failed partial writes to Bronze<\/td>\n        <td>Atomic writes and staging<\/td>\n      <\/tr>\n      <tr>\n        <td>Cost spike<\/td>\n        <td>Unexpected compute bills<\/td>\n        <td>Overly frequent Gold rebuilds<\/td>\n        <td>Rate limits and cost alerts<\/td>\n      <\/tr>\n      <tr>\n        <td>Access leak<\/td>\n        <td>Unauthorized Gold reads<\/td>\n        <td>Weak RBAC or policy misconfig<\/td>\n        <td>Policy automation and audits<\/td>\n      <\/tr>\n    <\/tbody>\n    <caption><strong>Table 3<\/strong> Common failure modes and mitigations<\/caption>\n  <\/table>\n<\/div>\n\n<h3>8.2 Architecture Misuse<\/h3>\n\n<div class=\"info-box danger\">\n  <strong>Over-layering:<\/strong> Applying three-tier architecture to micro-datasets adds latency and operational overhead. Small projects or short-lived experimental data don&#8217;t warrant full structuring.\n<\/div>\n\n<div class=\"info-box warn\">\n  <strong>Gold becomes the only business rule repository:<\/strong> When all business rules exist only in Gold, one team&#8217;s dashboard looks right while every other consumer sees inconsistent numbers.\n<\/div>\n\n<div class=\"info-box warn\">\n  <strong>Silver too business-specific:<\/strong> If one dashboard&#8217;s logic enters Silver, every other consumer inherits that dashboard&#8217;s assumptions.\n<\/div>\n\n<!-- 9. Relationship -->\n<h2 id=\"en-9\">9. Relationship with Other Architectures<\/h2>\n\n<div class=\"table-wrap\">\n  <table>\n    <thead>\n      <tr>\n        <th>Concept<\/th>\n        <th>How it differs from Medallion<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td>Data Lake<\/td>\n        <td>Focuses on storage, not staged refinement; often confused as equivalent to Bronze<\/td>\n      <\/tr>\n      <tr>\n        <td>Data Warehouse<\/td>\n        <td>Emphasizes analytics storage; often sits at the Gold layer position<\/td>\n      <\/tr>\n      <tr>\n        <td>Lakehouse<\/td>\n        <td>Combines lake and warehouse features; supports layering but not synonymous<\/td>\n      <\/tr>\n      <tr>\n        <td>ETL\/ELT<\/td>\n        <td>Transformation approach, not a layer definition; execution vs layering often conflated<\/td>\n      <\/tr>\n      <tr>\n        <td>CDC<\/td>\n        <td>Ingestion method, not a layering model; typically feeds Bronze<\/td>\n      <\/tr>\n      <tr>\n        <td>Delta Lake \/ Iceberg<\/td>\n        <td>Storage formats that support layering patterns; not required for layering<\/td>\n      <\/tr>\n      <tr>\n        <td>Data Mesh<\/td>\n        <td>Organizational pattern, not data staging model; complements rather than replaces layering<\/td>\n      <\/tr>\n      <tr>\n        <td>Semantic Layer<\/td>\n        <td>Business view typically built on top of Gold<\/td>\n      <\/tr>\n    <\/tbody>\n    <caption><strong>Table 4<\/strong> Medallion Architecture vs related concepts<\/caption>\n  <\/table>\n<\/div>\n\n<h3>9.1 Typical Architecture Patterns<\/h3>\n\n<div class=\"card\">\n  <h4>1. Batch ELT on Data Lake<\/h4>\n  <p>Use scheduled Spark jobs to transform Bronze files into Silver tables, creating Gold materialized views. Use when cost-efficiency matters and near-real-time is not required.<\/p>\n<\/div>\n<div class=\"card\">\n  <h4>2. Streaming-First Pipeline<\/h4>\n  <p>Ingest via Kafka, use stream processors to produce Silver in near real-time, aggregate into Gold for low-latency dashboards. Use when freshness is critical.<\/p>\n<\/div>\n<div class=\"card\">\n  <h4>3. Lakehouse with ACID Storage<\/h4>\n  <p>Store Bronze and Silver as Delta\/Iceberg (transactional), use SQL engine to create Gold. Use when atomicity and reprocessing are needed.<\/p>\n<\/div>\n<div class=\"card\">\n  <h4>4. Hybrid CDC + Batch<\/h4>\n  <p>Capture source DB changes to Bronze via CDC, micro-batch to Silver, scheduled aggregations to Gold. Use for transactional system integration.<\/p>\n<\/div>\n\n<\/div>\n\n<\/main>\n\n<footer>\n  <div class=\"sources\" style=\"max-width:var(--max-w);margin:0 auto;padding:0 1.5rem\">\n    <h2 style=\"border-bottom-color:var(--rule);margin-top:0\">\u53c2\u8003\u8d44\u6599 \/ References<\/h2>\n    <ol style=\"padding-left:1.2rem;font-size:.85rem;color:var(--muted)\">\n      <li id=\"cite-1\">\n        <span class=\"src-title\">Databricks, What is the medallion lakehouse architecture? Official documentation defining Bronze, Silver, and Gold layers.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/docs.databricks.com\/aws\/en\/lakehouse\/medallion\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.databricks.com\/aws\/en\/lakehouse\/medallion<\/a>\n      <\/li>\n      <li id=\"cite-2\">\n        <span class=\"src-title\">TheDataOps.org, What is Bronze\/Silver\/Gold layers? Meaning, examples, use cases, and measurement. A comprehensive guide to the medallion pattern.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/www.thedataops.org\/bronze-silver-gold-layers\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.thedataops.org\/bronze-silver-gold-layers\/<\/a>\n      <\/li>\n      <li id=\"cite-3\">\n        <span class=\"src-title\">CodersSecret, Bronze, Silver, and Gold Data Layers Explained. Detailed walkthrough with orders pipeline example and quality check boundaries.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/coderssecret.com\/blog\/bronze-silver-gold-data-layers-explained\" target=\"_blank\" rel=\"noopener\">https:\/\/coderssecret.com\/blog\/bronze-silver-gold-data-layers-explained<\/a>\n      <\/li>\n      <li id=\"cite-4\">\n        <span class=\"src-title\">GitHub, Medallion Quality Strategy. Silver layer quality dimensions and transformation activities framework.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/github.com\/kanad13\/data-quality-framework\/blob\/main\/100-guidelines\/130-medallion-quality-strategy.md\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/kanad13\/data-quality-framework\/blob\/main\/100-guidelines\/130-medallion-quality-strategy.md<\/a>\n      <\/li>\n    <\/ol>\n  <\/div>\n<\/footer>\n\n<script>\nfunction setLang(lang) {\n  document.querySelectorAll('.lang-section').forEach(function(el) {\n    el.classList.remove('active');\n  });\n  document.querySelectorAll('.lang-section[id=\"lang-' + lang + '\"]').forEach(function(el) {\n    el.classList.add('active');\n  });\n  document.querySelectorAll('.lang-switch button').forEach(function(btn) {\n    btn.classList.remove('active');\n  });\n  document.getElementById('btn-' + lang).classList.add('active');\n  localStorage.setItem('medallion-lang', lang);\n}\nfunction toggleTheme() {\n  var html = document.documentElement;\n  var theme = html.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';\n  html.setAttribute('data-theme', theme);\n  localStorage.setItem('medallion-theme', theme);\n}\n(function() {\n  var savedLang = localStorage.getItem('medallion-lang');\n  if (savedLang) setLang(savedLang);\n  var savedTheme = localStorage.getItem('medallion-theme');\n  if (savedTheme) document.documentElement.setAttribute('data-theme', savedTheme);\n})();\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Medallion Architecture \u8be6\u89e3 \u00b7 \u5956\u724c\u67b6\u6784 &#127942; Medallion Ar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-390","post","type-post","status-publish","format-standard","hentry","category-ai"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/390","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=390"}],"version-history":[{"count":1,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/390\/revisions"}],"predecessor-version":[{"id":391,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/390\/revisions\/391"}],"wp:attachment":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}