{"allowedRenditionsWidth":["320","480","640","768","960","1200","1440","1920"],"cssClassNames":"page basicpage summit-page","templateName":"base-page-template54","canonicalLink":"https://www.snowflake.com/en/artificial-intelligence/machine-learning/mlops/continuous-training/","robotsTags":[],"description":"Continuous training automates model retraining as data drifts. Learn when to retrain, how to validate a challenger model, and govern each version.","language":"en","title":"Continuous Training in ML: When to Retrain | Snowflake","analyticsPageType":"homepage","analyticsCategory":"general","analyticsSubCategory":"","excludeFromAnalytics":false,":hierarchyType":"page",":path":"/content/snowflake-site/global/en/artificial-intelligence/machine-learning/mlops/continuous-training","coveoConfig":{"apiKey":"xx335921a6-2a0a-40f2-a167-e390b4766c3d","pipeline":"snowflake.com","searchHub":"snowflake.com","organizationId":"snowflakecomputingproduction8neljofn"},"analyticsDebugMode":false,"analyticsData":{"excludeFromAnalytics":false,"subCategory":"","pageType":"homepage","templateName":"base-page-template54","siteName":"snowflake","pageUrl":"/content/snowflake-site/global/en/artificial-intelligence/machine-learning/mlops/continuous-training","language":"en","category":"general","pageName":"Continuous Training in Machine Learning: When to Retrain and How to Validate","contentTags":[]},"analyticsContentTags":[],"analyticsEnabled":true,"isPasswordProtected":false,":type":"snowflake-site/components/structure/page",":mappedPath":"/en/artificial-intelligence/machine-learning/mlops/continuous-training/",":items":{"root":{"columnClassNames":{"markup_editor_928258845":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-banner":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-header":"aem-GridColumn aem-GridColumn--default--12","responsivegrid":"aem-GridColumn aem-GridColumn--default--12","markup_editor_597730182":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-footer":"aem-GridColumn aem-GridColumn--default--12","experiencefragment":"aem-GridColumn aem-GridColumn--default--12","modal_container":"aem-GridColumn aem-GridColumn--default--12","markup_editor":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnCount":12,":items":{"experiencefragment-banner":{"id":"experiencefragment-2bc9abe614","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/master/jcr:content","configured":true,"xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/master.xfmodel.json",":type":"snowflake-site/components/experiencefragment"},"experiencefragment-header":{"id":"experiencefragment-cf724b8e04","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/jcr:content","configured":true,"xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master.xfmodel.json","languageNavPath":"/content/snowflake-site/global/en/artificial-intelligence/machine-learning/mlops/continuous-training.languagenav.json",":type":"snowflake-site/components/experiencefragment"},"responsivegrid":{"columnClassNames":{"flexible_column_cont_939100716":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1158003461":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_663228916":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_912630531":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1398138236":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1786318617":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1467213961":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1377146023":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnCount":12,":items":{"flexible_column_cont":{"id":"flexible-column-container-4545147fbb","propertiesId":"hub-hero-breadcrumbs","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"small","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"page-section","backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-2f04cf012c",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"breadcrumb":{"id":"breadcrumb-03076d67bb","items":[{"id":"breadcrumb-03076d67bb-item-f710b50fc9","link":{"valid":true,"url":"/en/artificial-intelligence/machine-learning/"},"active":false,"current":false,"title":"Machine Learning",":type":"snowflake-site/components/structure/page","appliedCssClassNames":"summit-page"},{"id":"breadcrumb-03076d67bb-item-0f2fad7189","link":{"valid":true,"url":"/en/artificial-intelligence/machine-learning/mlops/"},"active":false,"current":false,"title":"MLOps",":type":"snowflake-site/components/structure/page","appliedCssClassNames":"summit-page"},{"id":"breadcrumb-03076d67bb-item-5727451ff5","link":{"valid":true,"url":"/en/artificial-intelligence/machine-learning/mlops/continuous-training/"},"active":true,"current":true,"title":"Continuous Training",":type":"snowflake-site/components/structure/page","appliedCssClassNames":"summit-page"}],":type":"snowflake-site/components/breadcrumb"}},":itemsOrder":["breadcrumb"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container","appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_939100716":{"id":"flexible-column-container-fd57f015ee","propertiesId":"hub-hero","type":"2-column-even","alignColumns":"center","containerMaxWidth":"extra-large","topPadding":"extra-small","bottomPadding":"extra-small","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"page-section","backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-92bf8de52f",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"title_v2":{"id":"title-v2-c146f3c562","additionalClasses":"hub-hero__headline","type":"heading1","lines":["Continuous Training in Machine Learning: When to Retrain and How to Validate"],":type":"snowflake-site/components/title-v2","appliedCssClassNames":"left-alignment"},"text":{"id":"text-2bea031cc2","additionalClasses":"hub-hero__subheadline","text":"\u003Cp\u003EModels age as data and behavior change. Continuous training helps teams decide when to retrain, determine whether a new model is actually better and preserve the governance needed to manage each production version.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"},"container":{"additionalClasses":"hub-hero__authors","columnClassNames":{"content_chip_copy":"aem-GridColumn aem-GridColumn--default--12","content_chip":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-da12d50288",":type":"snowflake-site/components/container",":items":{"content_chip":{"id":"content-chip-8c6d72628f","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/Laurie-Macpherson/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Read bio"},"image":{"id":"image","isLcpImage":true,"alt":"Laurie MacPherson","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--a7e9fdff-6f08-4edc-9cd1-e213bb234aaa/laurie-macpherson.jpg?quality=85&preferwebp=true","width":"800","lazyEnabled":true,"height":"800",":type":"snowflake-site/components/image"},"headline":{"id":"title","type":"heading5","lines":["Laurie MacPherson","Technical Writer, Snowflake"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip"},"content_chip_copy":{"id":"content-chip-c253dd271e","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/david-gaule/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Read bio"},"image":{"id":"image","isLcpImage":false,"alt":"David Gaule","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--fd9454ea-3b59-4d19-95be-534774cbd226/david.jpg?quality=85&preferwebp=true","width":"512","lazyEnabled":true,"height":"512",":type":"snowflake-site/components/image"},"headline":{"id":"title","type":"heading5","lines":["David Gaule","Technical Editor, Snowflake"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip"}},":itemsOrder":["content_chip","content_chip_copy"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small"}},":itemsOrder":["title_v2","text","container"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small"},"flexible_column_content_container_2":{"additionalClasses":"hub-hero__video-column","layout":"SIMPLE","id":"container-d7f219bad1",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"youtube":{"id":"embed-8f31eddd90","youtubeVideoId":"7afEH7Zcs-s","layout":"responsive","youtubeAspectRatio":"56.25","youtubeAutoPlay":false,"youtubeLoop":false,"youtubeMute":false,"youtubePlaysInline":false,"youtubeRel":false,"embeddableResourceType":"core/wcm/components/embed/v1/embed/embeddable/youtube","type":"EMBEDDABLE",":type":"snowflake-site/components/youtube"}},":itemsOrder":["youtube"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container","appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_1398138236":{"id":"flexible-column-container-114e230798","propertiesId":"hub-hero-related-topics","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"extra-small","bottomPadding":"medium","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"page-section","backgroundImageOption":"none","flexible_column_content_container_1":{"additionalClasses":"related-topics-outer-container border-top","layout":"SIMPLE","id":"container-1f2b431071",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"text_894059747":{"id":"text-905bdc2498","additionalClasses":"seo-hub-hero__related-topic-label","text":"\u003Cp\u003EMLOps Topics:\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"},"text":{"id":"text-51509482c4","additionalClasses":"related-topics ","text":"\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/mlops/ai-data-pipelines/\"\u003EAI Data Pipelines\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/mlops/model-deployment/\"\u003EML Model Deployment\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/mlops/model-serving/\"\u003EML Model Serving\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/mlops/pipelines/\"\u003EML Pipelines\u003C/a\u003E\u003C/li\u003E\r\n\u003C/ul\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small"}},":itemsOrder":["text_894059747","text"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container","appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_663228916":{"id":"flexible-column-container-c5afca4f13","propertiesId":"hub-body","type":"2-column-60-40","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"medium","bottomPadding":"medium","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"page-section","backgroundImageOption":"none","flexible_column_content_container_1":{"additionalClasses":"longform-content","layout":"SIMPLE","id":"hub-body-content",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"callout__0":{"id":"text-b18960222a","additionalClasses":"callout callout--general","text":"\u003Cp\u003E\u003Cstrong\u003ECONTINUOUS TRAINING DEFINED\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003EContinuous training is the automated, policy-driven process of producing and evaluating new model versions as production conditions change. Rather than retraining constantly, it keeps a repeatable training workflow ready to run when predefined signals indicate that a new candidate may be needed.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"},"text__0":{"id":"text-385a2f72e3","text":"\u003Cp\u003EProduction \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/models/\"\u003Emachine learning (ML) models\u003C/a\u003E can degrade even while the application around them is functioning normally. Changes in data distributions or in the relationships the model learned may cause a stale model to return perfectly valid-looking predictions as its accuracy gradually declines. In \u003Ca href=\"https://www.nature.com/articles/s41598-022-15245-z\" target=\"_blank\"\u003Ea study of 128 model-data set pairs\u003C/a\u003E, researchers observed temporal degradation in 91% of the pairs they evaluated. For most models, performance degradation isn’t a question of if, but when.\u003C/p\u003E\n\u003Cp\u003ERetraining is the obvious response. The challenge is defining the conditions that should trigger it, the criteria required for promotion and the lineage needed to understand each new version.\u003C/p\u003E\n\u003Cp\u003EContinuous training puts those decisions into a repeatable sequence: a defined trigger starts a retraining run, validation determines whether the challenger should replace the production model and \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/observability/model-monitoring/\"\u003Emonitoring\u003C/a\u003E tracks the new version after \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/mlops/model-deployment/\"\u003Edeployment\u003C/a\u003E. Done well, that sequence keeps retraining responsive without separating automation from the governance needed to understand and control each production change.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"title_what-continuous-training-actually-means-in-mlops":{"id":"title-v2-73cbb37a21","additionalClasses":"anchor-title anchor-title--what-continuous-training-actually-means-in-mlops","type":"heading2","lines":["What continuous training actually means in MLOps"],":type":"snowflake-site/components/title-v2"},"text_what-continuous-training-actually-means-in-mlops_0":{"id":"text-3b105803d9","text":"\u003Cp\u003EContinuous training is an \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/mlops/\"\u003EMLOps\u003C/a\u003E practice for automatically initiating and managing retraining of production models according to predefined conditions. Despite the name, training doesn’t run continuously. The workflow is available to run when a trigger fires, typically because a schedule has been reached, incoming data has shifted, enough new training data has accumulated or measured model performance has deteriorated.\u003C/p\u003E\n\u003Cp\u003EFor example, a continuous training workflow might sit idle for a week, start a training job on Monday night and produce a new candidate model several hours later. The candidate must then pass the organization’s evaluation and promotion criteria before it replaces the current production version.\u003C/p\u003E\n\u003Cp\u003EContinuous training generally retains the familiar batch training model. Each run has identifiable inputs, produces an identifiable model version and can be evaluated before anything changes in production. Those boundaries also give teams useful \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/ai-governance/model-governance/\"\u003Emodel governance\u003C/a\u003E points: a training data set can be recorded, a model version registered, evaluation results retained and a promotion approved or rejected.\u003C/p\u003E\n\u003Cp\u003EContinuous training is related to but distinct from two related processes:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Cstrong\u003EIn online learning,\u003C/strong\u003E the model updates incrementally as new observations arrive rather than waiting for a discrete retraining run.\u003C/li\u003E\n\u003Cli\u003E\u003Cstrong\u003EIn continual learning,\u003C/strong\u003E the same model keeps learning over time as new data or tasks are introduced. The technical challenge is preserving what it learned earlier while incorporating the new information.\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003EContinuous training and continual learning solve different problems. Continuous training is an MLOps process comparable to CI/CD: a trigger starts a new training run, which produces a new model version for evaluation and possible deployment. Continual learning is a model-training approach: the model learns sequentially from new data or tasks while trying to retain what it learned earlier. That is why catastrophic forgetting is a central concern in continual learning, but not in a conventional continuous-training pipeline.\u003C/p\u003E\n\u003Cp\u003E\u003Cem\u003EIn this video, Sukanya Joshi, AI/ML Solutions Consultant at Snowflake, guides you through an end-to-end MLOps workflow — from model development to deployment:\u003C/em\u003E\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"yt_what-continuous-training-actually-means-in-mlops_0":{"id":"embed-bbd288236c","youtubeVideoId":"Qz9AmhRFf18","layout":"responsive","youtubeAspectRatio":"56.25","youtubeAutoPlay":false,"youtubeLoop":false,"youtubeMute":false,"youtubePlaysInline":false,"youtubeRel":false,"embeddableResourceType":"core/wcm/components/embed/v1/embed/embeddable/youtube","type":"EMBEDDABLE",":type":"snowflake-site/components/youtube"},"title_choosing-when-to-retrain-identifying-the-triggers":{"id":"title-v2-0ff1ee18f2","additionalClasses":"anchor-title anchor-title--choosing-when-to-retrain-identifying-the-triggers","type":"heading2","lines":["Choosing when to retrain: identifying the triggers"],":type":"snowflake-site/components/title-v2"},"text_choosing-when-to-retrain-identifying-the-triggers_0":{"id":"text-085f6ad59c","text":"\u003Cp\u003EOnce a retraining pipeline exists, teams need a policy for starting it. Common trigger types include:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Cstrong\u003EScheduled retraining:\u003C/strong\u003E Run the pipeline daily, weekly, monthly or at another predefined interval.\u003C/li\u003E\n\u003Cli\u003E\u003Cstrong\u003EDrift threshold:\u003C/strong\u003E Start a run when production data crosses a statistical drift threshold.\u003C/li\u003E\n\u003Cli\u003E\u003Cstrong\u003EPerformance degradation:\u003C/strong\u003E Retrain when a metric such as accuracy, F1 or root mean squared error falls below an established floor.\u003C/li\u003E\n\u003Cli\u003E\u003Cstrong\u003EData-volume threshold:\u003C/strong\u003E Wait until enough new labeled observations have accumulated to support another training cycle.\u003C/li\u003E\n\u003Cli\u003E\u003Cstrong\u003EUpstream change or manual trigger:\u003C/strong\u003E Start retraining after a feature, data source or other relevant dependency changes, or when a practitioner explicitly initiates a run.\u003C/li\u003E\n\u003C/ul\u003E\n\u003Cp\u003EScheduled retraining is often a sensible default for \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/\"\u003Emachine learning\u003C/a\u003E teams. The compute budget is predictable, teams know when new model versions will be produced and the cadence is straightforward to document. If the underlying data changes slowly and the model’s useful life is reasonably well understood, a weekly or monthly schedule may be entirely appropriate.\u003C/p\u003E\n\u003Cp\u003EWhen production conditions shift faster than the chosen cadence, however, another approach is needed. For example, a product launch might change customer behavior within days, or an upstream pipeline change might alter feature distributions between scheduled runs. In those cases, teams usually add another trigger.\u003C/p\u003E\n\u003Cp\u003EPerformance degradation is another indicator. If model quality has fallen below the accepted threshold, there’s a clear reason to investigate a replacement. The difficulty is that many production systems cannot measure performance immediately. For example, a churn model predicting whether a customer will leave within 90 days has to wait for enough outcomes to be known before today’s predictions can be scored. Credit defaults, medical outcomes and other long-horizon applications have the same problem. By the time the team has enough ground truth to confirm declining performance, the model may have been operating under changed conditions for weeks or months.\u003C/p\u003E\n\u003Cp\u003EDrift monitoring fills part of that gap. Production inputs and prediction distributions are available earlier than outcome labels, so changes in those signals give teams something to investigate while they’re still waiting for direct performance evidence.\u003C/p\u003E\n\u003Cp\u003EFor practical reasons, many teams combine a schedule with a few event-based triggers. The schedule prevents the model from aging indefinitely, while drift or performance thresholds bring the next run forward when the data or model behavior changes sooner than expected.\u003C/p\u003E\n\u003Cp\u003EIt’s important to note that the trigger should start the training process and nothing more. Promotion should depend on whether the challenger performs well enough to replace the production model.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"callout_choosing-when-to-retrain-identifying-the-triggers_0":{"id":"text-0e1f52c287","additionalClasses":"callout callout--warning","text":"\u003Cp\u003E\u003Cstrong\u003ECOMMON PITFALL\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003EA common mistake is treating drift as proof that a model needs replacement. A drift alert shows that production conditions have changed, not necessarily that model performance has declined. Use drift to trigger investigation or retraining, but keep promotion dependent on validation against the current production model.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"},"card_v2_choosing-when-to-retrain-identifying-the-triggers_0":{"id":"card-v2-29c6a7c8cf","additionalClasses":"seo-customer","configurationStatus":{"configured":true,"message":""},"title":{"id":"title","type":"heading4","lines":["IGS Energy"],":type":"snowflake-site/components/title-v2"},"button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/customers/all-customers/case-study/igs-energy/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Read the full case study"},"image":{"id":"image","isLcpImage":false,"alt":"ISG Energy Logo","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--90de0532-42fa-442f-addd-8b8217bbad20/igs-energy%25403x.png?quality=85&preferwebp=true","width":"624","lazyEnabled":true,"height":"351",":type":"snowflake-site/components/image"},"type":"content-card","text":{"id":"text","text":"\u003Cp\u003EIGS Energy uses Snowflake as the backbone of its data infrastructure to support AI and machine learning use cases such as demand forecasting, anomaly detection and faster stakeholder iteration with Streamlit. By moving from hundreds of thousands of individual forecasting models in Databricks to one unified model in Snowflake, IGS reduced training costs by 75% while maintaining accuracy and generating forecasts for hundreds of thousands of customers in minutes.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text"},"layoutStyle":"horizontal",":type":"snowflake-site/components/card-v2"},"title_choosing-a-drift-signal-what-conditions-fire-a-trigger":{"id":"title-v2-f6aba28a09","additionalClasses":"anchor-title anchor-title--choosing-a-drift-signal-what-conditions-fire-a-trigger","type":"heading2","lines":["Choosing a drift signal: what conditions fire a trigger"],":type":"snowflake-site/components/title-v2"},"text_choosing-a-drift-signal-what-conditions-fire-a-trigger_0":{"id":"text-2a203f97a4","text":"\u003Cp\u003E“Detect drift” isn’t specific enough to implement. Teams have to decide which distribution they’re monitoring, how they’ll compare it with a baseline and how large a change should count as significant.\u003C/p\u003E\n\u003Ch3\u003EData drift: changes in production inputs\u003C/h3\u003E\n\u003Cp\u003EData drift measures changes in the distribution of production features relative to a reference distribution, often the data used to train the current model. A retailer might see order values shift after a pricing change, for example, or a lender might start receiving applications from a population that looks materially different from the one represented in the training set.\u003C/p\u003E\n\u003Cp\u003ESeveral statistical methods are commonly used to quantify those shifts. The \u003Ca href=\"https://www.itl.nist.gov/div898/handbook/eda/section3/eda35g.htm\" target=\"_blank\"\u003EKolmogorov-Smirnov test\u003C/a\u003E compares distributions directly, while the \u003Ca href=\"https://www.researchgate.net/publication/332960131_The_Population_Accuracy_Index_A_New_Measure_of_Population_Stability_for_Model_Monitoring\" target=\"_blank\"\u003EPopulation Stability Index (PSI)\u003C/a\u003E measures how far a current distribution has moved from its baseline. \u003Ca href=\"https://researchportal.ip-paris.fr/en/publications/learning-from-time-changing-data-with-adaptive-windowing/\" target=\"_blank\"\u003EADWIN/ADWIN2\u003C/a\u003E takes a streaming approach, looking for statistically significant changes within a moving window of observations.\u003C/p\u003E\n\u003Cp\u003EData drift is an especially useful signal when outcome labels are delayed because production feature values are available immediately. The signal still needs interpretation, though. A feature distribution can change without affecting the relationship the model learned, so a crossed threshold indicates that production conditions have shifted; it doesn’t, by itself, show that model performance has deteriorated.\u003C/p\u003E\n\u003Ch3\u003EConcept drift: changes in the relationship the model learned\u003C/h3\u003E\n\u003Cp\u003EConcept drift concerns the relationship between the inputs and the target. If a pattern that once predicted churn no longer carries the same predictive value, the model is relying on a relationship that no longer reflects current behavior.\u003C/p\u003E\n\u003Cp\u003EThis makes concept drift more directly relevant to model quality than input drift, but it’s also harder to observe quickly. Confirming that the relationship has changed usually requires ground-truth outcomes, which may not be available until days, weeks or months after the original prediction.\u003C/p\u003E\n\u003Cp\u003EFor applications with significant label lag, teams often use input or prediction drift as an earlier warning while they wait for enough outcome data to measure the model’s actual performance.\u003C/p\u003E\n\u003Ch3\u003EPrediction drift: changes in model outputs\u003C/h3\u003E\n\u003Cp\u003EPrediction drift tracks changes in the distribution of the model’s own outputs. Suppose a fraud model historically classifies 10% of transactions as high risk and then begins classifying 25% as high risk. A team can then investigate why the change has occurred.\u003C/p\u003E\n\u003Cp\u003EPrediction drift is useful as an early-warning signal, especially when ground truth isn’t yet available. As with data drift, the signal is merely a reason to investigate rather than evidence that the current model should be replaced.\u003C/p\u003E\n\u003Ch3\u003ESetting drift thresholds\u003C/h3\u003E\n\u003Cp\u003EThe final design choice is how much change should be enough to trigger action. A tight threshold catches smaller shifts, but it also increases the number of false alarms and unnecessary retraining runs. A loose threshold reduces that activity but increases the chance that meaningful degradation persists unnoticed.\u003C/p\u003E\n\u003Cp\u003EThe trade-off is operational as much as statistical. An unnecessary retraining run consumes compute and review time, and a missed signal leaves the underperforming model in production longer. The threshold should reflect the cost of both outcomes, along with the model’s criticality and the change rate of the production environment.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"title_the-validation-gate-what-stops-a-bad-retrain-from-reaching-production":{"id":"title-v2-db97799897","additionalClasses":"anchor-title anchor-title--the-validation-gate-what-stops-a-bad-retrain-from-reaching-production","type":"heading2","lines":["The validation gate: what stops a bad retrain from reaching production"],":type":"snowflake-site/components/title-v2"},"text_the-validation-gate-what-stops-a-bad-retrain-from-reaching-production_0":{"id":"text-4381e37c58","text":"\u003Cp\u003EA completed retraining job produces a candidate model that needs to be evaluated against the existing model. It shouldn’t automatically produce the next production model.\u003C/p\u003E\n\u003Cp\u003EA typical validation sequence looks like this:\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EValidate incoming training data → train the challenger → compare challenger and champion → run guardrail checks → approve and promote → monitor with a rollback path\u003C/strong\u003E\u003C/p\u003E\n\u003Ch3\u003EValidate the incoming training data\u003C/h3\u003E\n\u003Cp\u003EBefore the training job starts, check the data feeding it. Schema changes, unexpected ranges, missing values or other quality issues are cheaper to catch here than after the pipeline has trained and registered another model on top of them.\u003C/p\u003E\n\u003Ch3\u003ECompare the challenger with the champion\u003C/h3\u003E\n\u003Cp\u003EOnce training finishes, evaluate the new challenger against the current production champion on the same held-out data set. The practical question is whether the challenger performs well enough to justify replacing what is already serving, not whether it clears some generic definition of a “good” model.\u003C/p\u003E\n\u003Ch3\u003ERun guardrail checks\u003C/h3\u003E\n\u003Cp\u003EAggregate metrics don’t always tell the whole story. A challenger might improve overall accuracy while performing worse for an important segment, so validation often includes segment-level analysis, fairness checks, prediction sanity checks and other application-specific criteria.\u003C/p\u003E\n\u003Ch3\u003ETest under production conditions when needed\u003C/h3\u003E\n\u003Cp\u003EFor higher-consequence applications, offline evaluation may be only the first gate. Shadow deployment lets the challenger process live inputs without affecting production decisions, while A/B testing compares model behavior across separate traffic populations. Both approaches need enough data and time to distinguish real improvement from ordinary variation.\u003C/p\u003E\n\u003Ch3\u003EApprove and promote\u003C/h3\u003E\n\u003Cp\u003EPromotion is a governance checkpoint. Depending on the model and the organization, that step may include automated acceptance criteria, human approval or both. Recording the decision alongside the model version, metrics and deployment status preserves the reason one model replaced another.\u003C/p\u003E\n\u003Ch3\u003EMonitor and roll back if needed\u003C/h3\u003E\n\u003Cp\u003EValidation doesn’t end at deployment. Production monitoring should continue against defined thresholds, with a known previous version available if the newly promoted model underperforms.\u003C/p\u003E\n\u003Cp\u003ENote that the trigger and the validation gate answer two different questions. The trigger answers whether another candidate should be trained. The gate answers whether that candidate is worthy of replacing the existing model.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"callout_the-validation-gate-what-stops-a-bad-retrain-from-reaching-production_0":{"id":"text-5c0466ff1b","additionalClasses":"callout callout--tip","text":"\u003Cp\u003E\u003Cstrong\u003EQUICK TIP\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003EDefine promotion criteria before retraining begins. Predefined thresholds for model quality, segment performance and guardrails make challenger-versus-champion decisions more consistent and easier to audit.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"},"title_why-continuous-training-fails-without-governed-data-and-features":{"id":"title-v2-7e1d6859a9","additionalClasses":"anchor-title anchor-title--why-continuous-training-fails-without-governed-data-and-features","type":"heading2","lines":["Why continuous training fails without governed data and features"],":type":"snowflake-site/components/title-v2"},"text_why-continuous-training-fails-without-governed-data-and-features_0":{"id":"text-61f319cfb9","text":"\u003Cp\u003EContinuous training depends on being able to trust what each retraining run used and produced. As the pipeline repeats, weak data controls, inconsistent feature logic or missing lineage make it harder to tell whether a new model reflects a genuine improvement or simply a change somewhere upstream.\u003C/p\u003E\n\u003Ch3\u003EWeak data controls propagate into every retraining run\u003C/h3\u003E\n\u003Cp\u003EAutomated retraining places more pressure on the data foundation underneath it. During a manual retraining cycle, a practitioner is likely to inspect at least part of the training data. Once the workflow runs automatically, an upstream quality problem may pass through repeated training cycles unless the pipeline catches it first.\u003C/p\u003E\n\u003Cp\u003ESchema changes, missing values, unexpected ranges or changes in source behavior all deserve checks before training starts. Otherwise, the pipeline is simply repeating a bad assumption more efficiently.\u003C/p\u003E\n\u003Ch3\u003EInconsistent feature logic creates training-serving skew\u003C/h3\u003E\n\u003Cp\u003EIf the training pipeline calculates a feature one way and the serving system calculates it another way, the model learns from a representation it won’t actually receive during inference.\u003C/p\u003E\n\u003Cp\u003EA \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/feature-engineering/feature-store/\"\u003Efeature store\u003C/a\u003E can reduce that risk by centralizing feature definitions and reuse across training and serving. Historical training adds another requirement: point-in-time correctness. Features should reflect only the information that would have been available at the time of the original prediction, rather than incorporating later data that leaks future knowledge into the training set.\u003C/p\u003E\n\u003Ch3\u003EMissing lineage makes retraining hard to reproduce\u003C/h3\u003E\n\u003Cp\u003EA registry entry showing only that model version 17 replaced version 16 leaves teams wondering why the new version performed better. Reconstructing a new version’s history requires the training data, feature definitions, code and configuration associated with each run.\u003C/p\u003E\n\u003Cp\u003EAs retraining cycles accumulate, those relationships become increasingly important. Data versioning and lineage connect each model to the inputs and transformations that produced it, giving teams a way to reproduce a run, investigate unexpected behavior and explain why one version replaced another.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"title_retraining-cadence-and-cost-how-often-is-too-often":{"id":"title-v2-4997126f8e","additionalClasses":"anchor-title anchor-title--retraining-cadence-and-cost-how-often-is-too-often","type":"heading2","lines":["Retraining cadence and cost: how often is too often"],":type":"snowflake-site/components/title-v2"},"text_retraining-cadence-and-cost-how-often-is-too-often_0":{"id":"text-7232058820","text":"\u003Cp\u003EEvery retraining run consumes resources. Training uses compute, evaluation adds more work and successful runs create additional model versions that have to be tracked and governed. For this reason, teams need to know how quickly the current model is likely to lose enough performance to justify the next run. This gives them a defensible starting cadence — perhaps monthly rather than weekly — while drift or performance triggers handle changes that happen between scheduled runs.\u003C/p\u003E\r\n\u003Cp\u003EHistorical experiments can provide a starting point. Train the model on data from an earlier period, evaluate it against successive later periods and measure how long it takes performance to cross the organization’s acceptable threshold. If meaningful deterioration tends to appear after six weeks, for example, a monthly retraining schedule has a defensible basis.\u003C/p\u003E\r\n\u003Cp\u003EThat kind of experiment also helps separate cadence from habit. “We retrain every Friday” is an operational convention. “We retrain every four weeks because performance has historically degraded after five to six” is a good model policy.\u003C/p\u003E\r\n\u003Cp\u003EMore frequent retraining carries costs beyond compute. Training on small amounts of newly accumulated data may cause the model to respond to noise rather than meaningful change. Rapid version turnover also makes production analysis harder: when data, features and model versions are all changing frequently, isolating the cause of a metric shift takes more careful lineage and experimentation.\u003C/p\u003E\r\n\u003Cp\u003EThe acceptable cadence also depends partly on consequence. A model driving a high-impact operational decision may justify closer monitoring, faster retraining and a more extensive validation process, while a stable internal ranking model with expensive training requirements may warrant a slower schedule and an event-based trigger for unusual changes.\u003C/p\u003E\r\n\u003Cp\u003EResearch hasn’t settled on a universal retraining interval. Work on retraining timing continues to examine both when a new run is warranted and how much post-drift data is enough to support it. That uncertainty is useful to acknowledge. Daily, weekly and monthly schedules are design choices tied to the model, the data and the cost of degraded predictions, not markers of MLOps maturity.\u003C/p\u003E\r\n\u003Cp\u003EFor \u003Ca href=\"https://www.snowflake.com/en/fundamentals/large-language-model/\"\u003Elarge language models\u003C/a\u003E, the same economic logic applies even though the update mechanisms differ. \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/machine-learning/model-training/fine-tuning/\"\u003EFine-tuning\u003C/a\u003E, retrieval changes and other narrower updates are often more practical than full retraining.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"title_continuous-training-on-snowflake":{"id":"title-v2-a05cffe570","additionalClasses":"anchor-title anchor-title--continuous-training-on-snowflake","type":"heading2","lines":["Continuous training on Snowflake"],":type":"snowflake-site/components/title-v2"},"text_continuous-training-on-snowflake_0":{"id":"text-07b1994827","text":"\u003Cp\u003EA retraining loop depends on several objects staying connected over time: production signals, training data, feature definitions, training runs, model versions and promotion decisions.\u003C/p\u003E\n\u003Cp\u003ESnowflake supports the lifecycle around governed data already used for model development and evaluation. Tasks and task graphs (DAGs) can schedule and coordinate retraining workflows, while Snowflake ML Jobs supports scalable training workloads. Snowflake Notebooks and Snowpark Container Services provide additional environments for development and specialized compute where the workflow requires them.\u003C/p\u003E\n\u003Cp\u003ESnowflake Feature Store manages reusable feature definitions for training and inference, including point-in-time-correct retrieval for historical training data. That helps reduce training-serving skew and gives teams a consistent way to reconstruct the inputs behind a retraining run.\u003C/p\u003E\n\u003Cp\u003EOnce training produces a candidate, \u003Ca href=\"https://docs.snowflake.com/en/developer-guide/snowflake-ml/model-registry/model-management\"\u003ESnowflake Model Registry\u003C/a\u003E records model versions, metrics, metadata and deployment status. The registry also manages models trained outside Snowflake, which gives teams a consistent lifecycle record even when training takes place across different tools.\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"https://docs.snowflake.com/en/developer-guide/snowflake-ml/model-registry/model-observability\"\u003ESnowflake ML Observability\u003C/a\u003E covers the production side of the loop, tracking model behavior and drift over time. Those signals feed the retraining decision, while evaluation and promotion remain separate steps.\u003C/p\u003E\n\u003Cp\u003ELineage ties the pieces together. When source data, feature views, training data sets and model versions are connected, practitioners have more than a list of model artifacts. They can trace a production model back toward the inputs that produced it and compare successive retraining runs with the surrounding context intact.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"title_keep-retraining-reproducible-and-governed":{"id":"title-v2-47d564e563","additionalClasses":"anchor-title anchor-title--keep-retraining-reproducible-and-governed","type":"heading2","lines":["Keep retraining reproducible and governed"],":type":"snowflake-site/components/title-v2"},"text_keep-retraining-reproducible-and-governed_0":{"id":"text-1beb4b6c76","text":"\u003Cp\u003EContinuous training works best as a governed sequence around each retraining run. A trigger determines when to train another candidate, validation determines whether that candidate should replace the current model and post-deployment monitoring shows how the new version performs in production.\u003C/p\u003E\n\u003Cp\u003EThe quality of that process depends on the context preserved from one run to the next. Versioned training data, consistent feature definitions and lineage make it possible to reconstruct why one model differs from another, while the registry records which version was approved and deployed.\u003C/p\u003E\n\u003Cp\u003EFor many teams, the practical design combines a scheduled retraining cadence with drift or performance signals that can bring a run forward when conditions change sooner than expected. Keeping the model, its training data, feature definitions, lineage and production history connected gives each new retraining sequence the context it needs — and gives teams a clear record of what changed, why the new model was promoted and what to restore if production performance declines.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"callout_keep-retraining-reproducible-and-governed_0":{"id":"text-4907938d3c","additionalClasses":"callout callout--general","text":"\u003Cp\u003E\u003Cstrong\u003EKEY TAKEAWAY\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003EContinuous training isn’t simply automated retraining. A reliable approach separates the decision to train a new candidate from the decision to promote it, while preserving the data, features, metrics and lineage needed to understand every model version.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"}},":itemsOrder":["callout__0","text__0","title_what-continuous-training-actually-means-in-mlops","text_what-continuous-training-actually-means-in-mlops_0","yt_what-continuous-training-actually-means-in-mlops_0","title_choosing-when-to-retrain-identifying-the-triggers","text_choosing-when-to-retrain-identifying-the-triggers_0","callout_choosing-when-to-retrain-identifying-the-triggers_0","card_v2_choosing-when-to-retrain-identifying-the-triggers_0","title_choosing-a-drift-signal-what-conditions-fire-a-trigger","text_choosing-a-drift-signal-what-conditions-fire-a-trigger_0","title_the-validation-gate-what-stops-a-bad-retrain-from-reaching-production","text_the-validation-gate-what-stops-a-bad-retrain-from-reaching-production_0","callout_the-validation-gate-what-stops-a-bad-retrain-from-reaching-production_0","title_why-continuous-training-fails-without-governed-data-and-features","text_why-continuous-training-fails-without-governed-data-and-features_0","title_retraining-cadence-and-cost-how-often-is-too-often","text_retraining-cadence-and-cost-how-often-is-too-often_0","title_continuous-training-on-snowflake","text_continuous-training-on-snowflake_0","title_keep-retraining-reproducible-and-governed","text_keep-retraining-reproducible-and-governed_0","callout_keep-retraining-reproducible-and-governed_0"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-medium"},"flexible_column_content_container_2":{"additionalClasses":"hub-sidebar","layout":"SIMPLE","id":"hub-body-aside",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"container":{"additionalClasses":"sticky-sidebar","columnClassNames":{"text_943981956_copy_":"aem-GridColumn aem-GridColumn--default--12","text_copy":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-f1cce14d2e",":type":"snowflake-site/components/container",":items":{"text_943981956_copy_":{"id":"text-4b71f80f6a","additionalClasses":"eyebrow-text","text":"\u003Cp\u003EIn This Guide\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular"},"text_copy":{"id":"text-568ae7ac0b","additionalClasses":"page-toc","text":"\u003Cul\u003E\u003Cli data-anchor=\"what-continuous-training-actually-means-in-mlops\"\u003EWhat continuous training actually means in MLOps\u003C/li\u003E\u003Cli data-anchor=\"choosing-when-to-retrain-identifying-the-triggers\"\u003EChoosing when to retrain: identifying the triggers\u003C/li\u003E\u003Cli data-anchor=\"choosing-a-drift-signal-what-conditions-fire-a-trigger\"\u003EChoosing a drift signal: what conditions fire a trigger\u003C/li\u003E\u003Cli data-anchor=\"the-validation-gate-what-stops-a-bad-retrain-from-reaching-production\"\u003EThe validation gate: what stops a bad retrain from reaching production\u003C/li\u003E\u003Cli data-anchor=\"why-continuous-training-fails-without-governed-data-and-features\"\u003EWhy continuous training fails without governed data and features\u003C/li\u003E\u003Cli data-anchor=\"retraining-cadence-and-cost-how-often-is-too-often\"\u003ERetraining cadence and cost: how often is too often\u003C/li\u003E\u003Cli data-anchor=\"continuous-training-on-snowflake\"\u003EContinuous training on Snowflake\u003C/li\u003E\u003Cli data-anchor=\"keep-retraining-reproducible-and-governed\"\u003EKeep retraining reproducible and governed\u003C/li\u003E\u003C/ul\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small text-color-text-05"}},":itemsOrder":["text_943981956_copy_","text_copy"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-medium"}},":itemsOrder":["container"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small"},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container"},"flexible_column_cont_1786318617":{"id":"flexible-column-container-345d4b0a0e","propertiesId":"hub-faq","type":"2-column-40-60","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"large","bottomPadding":"large","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"hub-faq-intro",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"title_v2_copy":{"id":"title-v2-8906c47efb","additionalClasses":"hub-faq__headline","type":"heading2","lines":["Frequently Asked Questions"],":type":"snowflake-site/components/title-v2","appliedCssClassNames":"left-alignment"},"text_copy":{"id":"text-3bd1840f7c","additionalClasses":"hub-faq__subheadline","text":"\u003Cp\u003EYour common questions about continuous training, answered by Snowflake experts.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"}},":itemsOrder":["title_v2_copy","text_copy"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small"},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"hub-faq-accordions",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"simple_snowflake_acc":{"id":"simple-snowflake-accordion-74c97240ed","additionalClasses":"seo-hub__faqs","showDivider":false,"accordionItemsList":[{"title":"Should a retrain start from scratch or continue from the existing model?","richText":"\u003Cp\u003ERetraining from scratch on a refreshed data set is often the cleaner operational choice because each model version has a distinct training run and a clearly defined set of inputs. Warm-starting from existing weights may reduce training time for some models, but it also adds the previous model version to the lineage that practitioners need to track.\u003C/p\u003E\n\u003Cp\u003EThe right choice depends on the algorithm, training cost and how much reproducibility the application requires.\u003C/p\u003E"},{"title":"Who owns the retraining pipeline — data science or platform engineering?","richText":"\u003Cp\u003EOwnership usually spans both functions. Data scientists define the model logic, evaluation metrics and acceptance criteria, while ML platform or engineering teams handle orchestration, triggers, deployment controls and rollback mechanisms.\u003C/p\u003E\n\u003Cp\u003EThe validation gate provides a useful handoff point. Data science defines what a challenger has to prove; platform engineering makes sure the workflow enforces those conditions consistently.\u003C/p\u003E"}],":type":"snowflake-site/components/simple-snowflake-accordion"}},":itemsOrder":["simple_snowflake_acc"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container","appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_1467213961":{"id":"flexible-column-container-b8ab30e28e","propertiesId":"hub-explore-resources-header","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"large","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-97e2ba0298",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"title_v2":{"id":"title-v2-667f02ea1a","additionalClasses":"hub-explore-resources-header__headline","type":"heading2","lines":["Explore AI Resources"],":type":"snowflake-site/components/title-v2","appliedCssClassNames":"left-alignment"}},":itemsOrder":["title_v2"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container","appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_912630531":{"id":"flexible-column-container-2d43fc9c6e","propertiesId":"hub-explore-resources-grid","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"small","bottomPadding":"large","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"hub-explore-resources-grid-inner",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"resource_chip_0":{"id":"content-chip-eddb997268","tagText":"BLOG","tagColor":"#71D3DC","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/blog/scalable-model-development-production-snowflake-ml/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Read more"},"headline":{"id":"title-v2-66350e10fe","type":"heading5","lines":["Build, Deploy and Serve Models at Scale with Snowflake ML"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip","appliedCssClassNames":"snowflake-content-chip-white-bg"},"resource_chip_1":{"id":"content-chip-6d6b8432df","tagText":"GUIDE","tagColor":"#71D3DC","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/developers/guides/managing-ml-models-from-iteration-to-production-with-mlops-in-snowflake/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Read more"},"headline":{"id":"title-v2-69933d7b5e","type":"heading5","lines":["Managing ML Models from Iteration to Production with MLOps"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip","appliedCssClassNames":"snowflake-content-chip-white-bg"},"resource_chip_2":{"id":"content-chip-70176007d9","tagText":"GUIDE","tagColor":"#71D3DC","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/developers/guides/develop-and-manage-ml-models-with-feature-store-and-model-registry/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Read more"},"headline":{"id":"title-v2-47c0b0b1c9","type":"heading5","lines":["Develop and Manage ML Models with Feature Store and Model Registry"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip","appliedCssClassNames":"snowflake-content-chip-white-bg"},"resource_chip_3":{"id":"content-chip-a6ca62a932","tagText":"BLOG","tagColor":"#71D3DC","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://medium.com/snowflake/build-ml-models-anywhere-run-inference-in-snowflake-d87f3d350345"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Read more"},"headline":{"id":"title-v2-70943336f0","type":"heading5","lines":["Build ML Models Anywhere, Run Inference in Snowflake"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip","appliedCssClassNames":"snowflake-content-chip-white-bg"}},":itemsOrder":["resource_chip_0","resource_chip_1","resource_chip_2","resource_chip_3"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container","appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_1158003461":{"id":"flexible-column-container-74b0e734f9","propertiesId":"hub-explore-topics-header","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"large","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-56054fdb55",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"title_v2_copy_copy":{"id":"title-v2-fa0b7a28aa","additionalClasses":"hub-explore-topics-header__headline","type":"heading2","lines":["Explore AI Topics"],":type":"snowflake-site/components/title-v2","appliedCssClassNames":"left-alignment"},"text_copy_copy":{"id":"text-ac557f42a4","additionalClasses":"hub-explore-topics-header__subheadline","text":"\u003Cp\u003EDeep dives into every aspect of artificial intelligence\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"}},":itemsOrder":["title_v2_copy_copy","text_copy_copy"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small"},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container","appliedCssClassNames":"snowflake-flexible-column-container-white-bg"},"flexible_column_cont_1377146023":{"id":"flexible-column-container-b20bb7401e","propertiesId":"hub-explore-topics-grid","type":"3-column-even","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"small","bottomPadding":"large","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-4ab1709f45",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"topic_card_0":{"id":"card-v2-e1f4f44806","configurationStatus":{"configured":true,"message":""},"title":{"id":"title","type":"heading4","lines":["Model Deployment"],":type":"snowflake-site/components/title-v2"},"button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/artificial-intelligence/machine-learning/mlops/model-deployment/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Learn more"},"type":"content-card","text":{"id":"text","text":"\u003Cp\u003EThe release process that moves a trained, validated model into a production environment.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text"},"layoutStyle":"vertical",":type":"snowflake-site/components/card-v2"}},":itemsOrder":["topic_card_0"]},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-0c86945ed3",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"topic_card_1":{"id":"card-v2-a278a53c5d","configurationStatus":{"configured":true,"message":""},"title":{"id":"title","type":"heading4","lines":["ML Inference"],":type":"snowflake-site/components/title-v2"},"button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/artificial-intelligence/machine-learning/inference/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Learn more"},"type":"content-card","text":{"id":"text","text":"\u003Cp\u003EThe act of generating predictions from a trained model on real input data.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text"},"layoutStyle":"vertical",":type":"snowflake-site/components/card-v2"}},":itemsOrder":["topic_card_1"]},"flexible_column_content_container_3":{"layout":"SIMPLE","id":"container-eb8016f3b0",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"topic_card_2":{"id":"card-v2-bca1a309df","configurationStatus":{"configured":true,"message":""},"title":{"id":"title","type":"heading4","lines":["Model Monitoring"],":type":"snowflake-site/components/title-v2"},"button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/artificial-intelligence/observability/model-monitoring/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Learn more"},"type":"content-card","text":{"id":"text","text":"\u003Cp\u003ETracking a production model's accuracy, drift, latency and business impact after deployment.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text"},"layoutStyle":"vertical",":type":"snowflake-site/components/card-v2"}},":itemsOrder":["topic_card_2"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container","appliedCssClassNames":"snowflake-flexible-column-container-white-bg"}},":itemsOrder":["flexible_column_cont","flexible_column_cont_939100716","flexible_column_cont_1398138236","flexible_column_cont_663228916","flexible_column_cont_1786318617","flexible_column_cont_1467213961","flexible_column_cont_912630531","flexible_column_cont_1158003461","flexible_column_cont_1377146023"],":type":"wcm/foundation/components/responsivegrid"},"modal_container":{"layout":"SIMPLE","id":"container-492115af39",":type":"snowflake-site/components/modal/modal-container",":items":{},":itemsOrder":[]},"markup_editor_928258845":{"id":"markup-editor-6f938acbc3","title":" ","cssContent":".snowflake-flexible-column-container-gray-10-bg\u003E.snowflake-flexible-column-container{background-color:var(--ui-background-05) !important}.text-size-regular:has(.seo-hub-hero__related-topic-label){display:flex;align-items:center}.hub-hero__headline span{text-transform:none !important}.hub-hero__subheadline p{max-width:70ch;margin-top:8px}.hub-hero__authors \u003E .container \u003E .cmp-container \u003E .aem-container{display:flex;flex-direction:row}.hub-hero__authors \u003E .container \u003E .cmp-container \u003E .aem-container \u003E div{width:auto !important;margin:24px 48px 0 0 !important}.hub-hero__authors .heading-5-v2{gap:var(--spacing-00)}.hub-hero__authors .snowflake-content-chip-button{display:none !important}.hub-hero__authors .snowflake-person-chip-content .body-2,.hub-hero__authors .snowflake-content-chip-content .snowflake-title-v2-line{font-size:16px !important;line-height:20px !important;font-family:\"Lato\",sans-serif !important;color:#000 !important;font-weight:600 !important}.hub-hero__authors .snowflake-person-chip-content .body-3,.hub-hero__authors .snowflake-content-chip-content .snowflake-title-v2-line:not(:first-child){font-weight:400 !important;color:var(--text-05) !important;font-size:16px !important}.hub-hero__authors .snowflake-image-container img{aspect-ratio:1 !important;border-radius:100%;overflow:hidden}.hub-hero__authors .snowflake-person-chip-avatar{width:56px;height:56px}.hub-hero__authors .snowflake-content-chip{align-items:center;display:inline-flex}.hub-hero__authors .snowflake-content-chip-image{max-width:56px;line-height:0;margin-right:var(--spacing-03)}.hub-hero__authors .snowflake-person-chip-inner-horizontal{gap:var(--spacing-03)}@media screen and (min-width:1367px){.hub-hero__headline .heading-1-v2{font-size:48px;line-height:44px}}#hub-explore-resources-grid-inner\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:24px}#hub-explore-resources-grid-inner\u003E.container\u003E.cmp-container\u003E.aem-container::before,#hub-explore-resources-grid-inner\u003E.container\u003E.cmp-container\u003E.aem-container::after{display:none}#hub-explore-resources-grid-inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(25% - 18px)}.text-color-text-05 .snowflake-text h2,.text-color-text-05.cq-Editable-dom h2,.text-color-text-05 .snowflake-text h3,.text-color-text-05.cq-Editable-dom h3,.text-color-text-05 .snowflake-text h4,.text-color-text-05.cq-Editable-dom h4,.text-color-text-05 .snowflake-text h5,.text-color-text-05.cq-Editable-dom h5,.text-color-text-05 .snowflake-text h6,.text-color-text-05.cq-Editable-dom h6{color:#000 !important}","isGSAPEnabled":false,":type":"snowflake-site/components/markup-editor"},"markup_editor_597730182":{"id":"markup-editor-c85c0d40ed","title":" ","cssContent":".sf-copy-markdown [data-copy-md]{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;font-family:'Texta',sans-serif;text-transform:uppercase;font-weight:800 !important;font-size:14px;font-weight:500;color:#11567f;background:#f0faff;border:1px solid #b8e6f9;border-radius:24px;cursor:pointer;transition:background .2s ease,border-color .2s ease,color .2s ease}.sf-copy-markdown [data-copy-md]:hover{background:#ddf3fc;border-color:#29b5e8}.sf-copy-markdown [data-copy-md][data-copied=\"1\"]{color:#0f7b3e;background:#ecfdf5;border-color:#6ee7a0;pointer-events:none}.sf-copy-markdown [data-copy-md] svg{flex-shrink:0}.longform-conten .snowflake-content-chip-white-bg .snowflake-content-chip{box-shadow:0 0 24px 4px rgba(0,0,0,.02),0 4px 8px 0 rgba(0,0,0,.04);flex-direction:row-reverse;align-items:center}.longform-conten .snowflake-content-chip-button{display:none}.longform-conten .snowflake-content-chip-image__inner{aspect-ratio:5 / 3;display:flex;justify-content:center;align-items:center;background-color:var(--ui-01);border-radius:4px}.longform-conten .snowflake-content-chip-image{margin-right:0;margin-left:48px}.longform-conten .snowflake-content-chip-image img{width:50%;border-radius:0 !important;object-fit:contain}.longform-content .black-blue-text-color .snowflake-title-v2-line:not(:first-child){font-size:14px !important;font-weight:400 !important;color:rgba(0,0,0,.6) !important;margin-top:8px !important}.page-toc ul li:first-child{padding-top:0 !important}.page-toc ul li:last-child{padding-bottom:0 !important}.seo-hub__top-bar \u003E .container \u003E .cmp-container \u003E .aem-container \u003E div:first-child{flex-grow:1}.sf-copy-markdown{margin-top:40px !important}.page-toc ul{margin-top:16px !important}.seo-hub__top-bar \u003E .container \u003E .cmp-container \u003E .aem-container{display:flex;justify-content:space-between}.sf-copy-markdown{}.callout.snowflake-text p:not(:first-child){margin-top:var(--spacing-01)}.callout \u003E span \u003E p:first-child \u003E strong,.callout \u003E span \u003E p:first-child \u003E b{text-transform:uppercase;font-family:'Texta',sans-serif;font-size:16px !important;color:var(--ui-01) !important}.seo-hub-hero__subheadline p{max-width:50ch}.tag-group ul{list-style-type:none;padding:0;margin:0;display:flex;flex-direction:row;row-gap:12px;column-gap:8px;align-items:center;flex-wrap:wrap}.tag-group ul li:first-child{flex-shrink:0}.tag-group ul li a{display:inline-block;padding:2px 12px;border-radius:48px;background-color:#ededed;color:#666;font-size:14px !important}@media screen and (min-width:1367px){.seo-hub-hero__headline span.snowflake-title-v2-line{font-size:56px !important}}.callout.snowflake-text p:not(:first-child){margin-top:var(--spacing-01)}.callout \u003E span \u003E p:first-child \u003E b{text-transform:uppercase;font-family:'Texta',sans-serif;font-size:16px !important;color:var(--ui-01) !important}.seo-hub-hero__subheadline p{max-width:80ch}#hero:has(.snowflake-youtube-lite) .seo-hub-hero__subheadline p{max-width:50ch}.tag-group ul{list-style-type:none;padding:0;margin:0;display:flex;flex-direction:row;row-gap:12px;column-gap:8px;align-items:center;flex-wrap:wrap}.tag-group ul li:first-child{width:100%;flex-shrink:0}.tag-group ul li a{display:inline-block;padding:2px 12px;border-radius:48px;background-color:#ededed;color:#666;font-size:14px !important}@media screen and (min-width:1367px){.seo-hub-hero__headline span.snowflake-title-v2-line{font-size:56px !important}}","isGSAPEnabled":false,":type":"snowflake-site/components/markup-editor"},"markup_editor":{"id":"markup-editor-e53be39139","title":" ","cssContent":"div.snowflake-breadcrumb a.snowflake-breadcrumb-item,.snowflake-breadcrumb div.snowflake-breadcrumb-item{text-transform:none;font-weight:500}.snowflake-breadcrumb svg{display:none !important}.snowflake-breadcrumb a:has(svg)::after{content:'/';margin:0 12px;color:#666}.hub-sidebar{padding:0 40px}.sticky-sidebar{max-width:340px;margin-left:auto}.page-toc ul{list-style-type:none;padding:0}.page-toc li{padding:8px 16px;border-left:4px solid var(--ui-01);cursor:pointer;transition:300ms ease all}.page-toc li:hover{color:var(--ui-01);border-color:#7fd3f1;transition:300ms ease all}.callout,.customer-card{background-color:#eef9fd;border-left:4px solid var(--ui-01);padding:24px 24px 24px 32px;border-radius:4px}.logo-container{max-width:180px}.longform-content li{margin-top:1rem !important}div.longform-content p{max-width:80ch}.bolder .snowflake-title-v2-line{font-weight:900 !important}.border-top\u003Ediv{border-top:1px solid #ccc;padding-top:48px}.related-topics ul{list-style-type:none;padding:0;margin:0;display:flex;gap:8px;flex-wrap:wrap}.related-topics li{display:inline-block;border:1px solid #ccc;padding:4px 12px;border-radius:24px}div.longform-content .snowflake-text h2,div.longform-content .snowflake-text .heading-2-v2,div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-title-v2 .heading-3-v2,div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-title-v2 .heading-4-v2,div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-title-v2 .heading-5-v2,div.longform-content .snowflake-text h6,div.longform-content .snowflake-title-v2 .heading-6-v2,div.longform-content .snowflake-text .heading-6-v2{text-transform:none !important}div.longform-content .snowflake-text h2,div.longform-content .snowflake-text .heading-2-v2,div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-text h6,div.longform-content .snowflake-text .heading-6-v2{margin-top:1.5rem !important;line-height:1.1 !important}div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-title-v2 .heading-3-v2,div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-title-v2 .heading-4-v2,div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-title-v2 .heading-5-v2,div.longform-content .snowflake-text h6,div.longform-content .snowflake-text .heading-6-v2,div.longform-content .snowflake-title-v2 .heading-6-v2{font-family:Lato,sans-serif !important;font-weight:800 !important}div.longform-content .snowflake-text h2,div.longform-content .snowflake-text .heading-2-v2,div.longform-content .snowflake-title-v2 .heading-2-v2{text-transform:none !important;font-size:28px !important}div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-title-v2 .heading-3-v2{font-size:22px !important}div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-title-v2 .heading-4-v2{font-size:18px !important}div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-title-v2 .heading-5-v2{font-size:16px !important}div.longform-content .snowflake-text h6,div.longform-content .snowflake-text .heading-6-v2,div.longform-content .snowflake-title-v2 .heading-6-v2{font-size:14px !important}@media screen and (min-width:992px){div.longform-content .snowflake-text h2,div.longform-content .snowflake-text .heading-2-v2,div.longform-content .snowflake-title-v2 .heading-2-v2{font-size:38px !important}div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-title-v2 .heading-3-v2{font-size:26px !important}div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-title-v2 .heading-4-v2{font-size:22px !important}div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-title-v2 .heading-5-v2{font-size:18px !important}div.longform-content .snowflake-text h6,div.longform-content .snowflake-text .heading-6-v2,div.longform-content .snowflake-title-v2 .heading-6-v2{font-size:16px !important}}.sticky-sidebar .page-toc li.is-active{font-weight:600;color:var(--snow-blue,#29b5e8)}.sticky-sidebar .page-toc li[data-anchor]{cursor:pointer}.longform-content table{margin-top:24px;margin-bottom:24px;width:100%;background-color:var(--ui-background-01);border-collapse:collapse;border:2px solid var(--ui-background-09);font-family:'Lato',sans-serif;color:var(--ui-background-09)}.longform-content table thead{background-color:var(--ui-01)}.longform-content th,.longform-content td{min-width:120px;border:2px solid var(--ui-background-09);padding:var(--spacing-01)}.longform-content ol{margin-top:0 !important}.longform-content ol li{margin-bottom:1rem !important}.longform-content ul li{margin:0;padding:0 0 0 32px;position:relative}.longform-content ul{list-style-type:none}.longform-content ul li::before{content:\"\";display:block;border-radius:100%;background:#29b5e8;width:18px;height:18px;position:absolute;top:4px;left:0;border:5px solid #e5f2f7;box-sizing:border-box}.seo-customer.snowflake-card-v2-advanced-horizontal .snowflake-card-v2-advanced-image-container{max-width:200px}.seo-customer.snowflake-card-v2-advanced-horizontal .snowflake-card-v2-advanced-image-container img{object-fit:contain}.related-topics-outer-container \u003E .container \u003E .cmp-container \u003E .aem-container{display:flex;flex-direction:row}.related-topics-outer-container \u003E .container \u003E .cmp-container \u003E .aem-container \u003E div{width:auto !important;margin:0 !important}.related-topics-outer-container \u003E .container \u003E .cmp-container \u003E .aem-container \u003E div:first-child{margin-right:16px !important;flex-shrink:0}","jsContent":"(function(){var OFFSET=100;if(window.gsap&&window.ScrollTrigger){gsap.registerPlugin(ScrollTrigger);var sidebar=document.querySelector('.sticky-sidebar');var body=document.querySelector('.longform-content');if(sidebar&&body){ScrollTrigger.create({trigger:sidebar,start:'top 100px',endTrigger:body,end:'bottom bottom',pin:sidebar,pinSpacing:false});}}document.addEventListener('click',function(e){var li=e.target.closest('li[data-anchor]');if(!li)return;var slug=li.getAttribute('data-anchor');var heading=document.querySelector('.anchor-title--'+CSS.escape(slug));if(!heading)return;e.preventDefault();var top=heading.getBoundingClientRect().top+window.pageYOffset-OFFSET;window.scrollTo({top:top,behavior:'smooth'});history.replaceState(null,'','#'+slug);},false);var headings=document.querySelectorAll('[class*=\"anchor-title--\"]');if(headings.length&&'IntersectionObserver'in window){var io=new IntersectionObserver(function(entries){entries.forEach(function(entry){if(!entry.isIntersecting)return;var cls=Array.from(entry.target.classList).find(function(c){return c.indexOf('anchor-title--')===0;});if(!cls)return;var slug=cls.replace('anchor-title--','');document.querySelectorAll('li[data-anchor]').forEach(function(li){li.classList.toggle('is-active',li.getAttribute('data-anchor')===slug);});});},{rootMargin:'-20% 0px -70% 0px',threshold:0});headings.forEach(function(h){io.observe(h);});}})();","isGSAPEnabled":true,":type":"snowflake-site/components/markup-editor"},"experiencefragment-footer":{"id":"experiencefragment-a754ef4d59","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master/jcr:content","configured":true,"xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master.xfmodel.json",":type":"snowflake-site/components/experiencefragment"},"experiencefragment":{"id":"experiencefragment-c93d72bd93","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer-legal-disclaimers/master/jcr:content","configured":true,"xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer-legal-disclaimers/master.xfmodel.json",":type":"snowflake-site/components/experiencefragment"}},":itemsOrder":["experiencefragment-banner","experiencefragment-header","responsivegrid","modal_container","markup_editor_928258845","markup_editor_597730182","markup_editor","experiencefragment-footer","experiencefragment"],":type":"wcm/foundation/components/responsivegrid"}},":itemsOrder":["root"],"locale":"en"}
  