{"cssClassNames":"page basicpage summit-page","allowedRenditionsWidth":["320","480","640","768","960","1200","1440","1920"],"templateName":"quickstart-page-template","language":"en","title":"Build Autonomous Pipelines for AI Agents","analyticsPageType":"quickstart-page-template","analyticsCategory":"general","analyticsSubCategory":"","excludeFromAnalytics":false,"analyticsDebugMode":false,":items":{"root":{"columnClassNames":{"markup_editor_1950346551":"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","experiencefragment-footer":"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-88911131c4","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/master/jcr:content","configured":true,":items":{"root":{"columnClassNames":{"pushdown_banner_copy":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-34e7627e01",":items":{"pushdown_banner_copy":{"id":"pushdown-banner-656783e749","contentHeadline":"Snowflake World Tour hits your city","contentDescription":"See how leading teams deploy agents at scale. Find a stop near you. Register free.","contentJustifyContent":"center","linkStyle":"text-white","linkCTA":{"id":"link-cta","heapButtonClasses":["pushdown_banner"],"showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"/en/world-tour/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Register now"},":type":"snowflake-site/components/pushdown-banner","appliedCssClassNames":"snowflake-pushdown-banner-text-white snowflake-pushdown-banner-background-black"}},":itemsOrder":["pushdown_banner_copy"],":type":"snowflake-site/components/container"},"image":{":type":"nt:unstructured"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","image","cq:metadata"],"classNames":"aem-xf",":type":"snowflake-site/components/experiencefragment"},"experiencefragment-header":{"id":"experiencefragment-cca05ff7ca","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/jcr:content","configured":true,":items":{"root":{"columnClassNames":{"mega_header":"aem-GridColumn aem-GridColumn--default--12","markup_editor":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-ddafb6fc4a",":items":{"markup_editor":{"id":"markup-editor-960669fc6e","title":" ","cssContent":".footer-nav__link-group .snowflake-button-container,.subnav__item--button,.snowflake-card-v2-advanced-button .snowflake-button-container{justify-content:flex-start}.mega-nav__sign-in.snowflake-button-container{display:none}@media screen and (min-width:768px){.mega-nav__sign-in.snowflake-button-container{display:inline-block;font-family:'Texta',sans-serif;font-weight:800 !important}}@media screen and (min-width:1024px) and (max-width:1199px){.snowflake-mega-nav-header-buttons-container .snowflake-button-blue .snowflake-button-container{font-size:13px !important}.snowflake-language-navigation .language-icon{width:18px !important;height:18px !important;margin-right:4px !important}}.mega-nav__sign-in svg{display:none}.nav-item__platform-parent-why-sf.snowflake-mega-nav-nav-item\u003Ea:hover,.nav-item__platform-parent.snowflake-mega-nav-nav-item\u003Ea:hover{background-color:transparent !important}.nav-platform-sidebar .snowflake-mega-nav-nav-item:hover.blue-icon .snowflake-mega-nav-nav-item-icon__inner{background-color:var(--ui-01) !important}@media screen and (min-width:1024px){.snowflake-mega-nav-navigation-dropdown{overflow:hidden}.meganav-platform-features{padding-left:64px}.meganav-platform-features::before{content:'';transform:translateX(-64px);display:block;z-index:0;width:100%;height:100%;position:absolute;top:0;background:#f7f9fa}.nav-item--si.snowflake-mega-nav-nav-item\u003Ea:hover{background-color:transparent}.nav-item--si{border-bottom:1px solid #ccc;padding-bottom:16px;margin-bottom:8px}.nav-item__platform-parent{border-bottom:1px solid #ccc;margin-bottom:8px;padding-bottom:16px}.nav-item__platform-parent-why-sf .snowflake-mega-nav-nav-item-description::after{content:'What Snowflake can do for you \u003E';display:block;color:var(--ui-01);margin-top:16px}.nav-item__platform-parent .snowflake-mega-nav-nav-item-description::after{content:'View the platform \u003E';display:block;color:var(--ui-01);margin-top:16px}}@media screen and (min-width:1367px){.snowflake-mega-nav-nav-item-description{font-size:13px !important;line-height:20px !important}.snowflake-mega-nav-nav-item-title-wrapper\u003E.snowflake-mega-nav-nav-item-title{font-size:17px !important}.nav-item__platform-parent-why-sf .snowflake-mega-nav-nav-item-title,.nav-item__platform-parent .snowflake-mega-nav-nav-item-title{font-size:24px !important;line-height:32px !important;margin-bottom:8px !important}.nav-item__platform-parent-why-sf .snowflake-mega-nav-nav-item-description,.nav-item__platform-parent .snowflake-mega-nav-nav-item-description{font-size:14px !important;line-height:20px !important}}html.wf-texta-n9-loading .display-1-v2{font-size:48px!important;line-height:50px!important;letter-spacing:-.5px!important;font-family:sans-serif!important}html.wf-texta-n9-loading .heading-4-v2{font-size:18px!important;line-height:24px!important;font-family:sans-serif!important}@media screen and (min-width:768px){html.wf-texta-n9-loading .display-2-v2{font-size:48px!important;line-height:50px!important;font-family:sans-serif!important}html.wf-texta-n9-loading .display-1-v2{font-size:55.5px!important;line-height:54px!important;letter-spacing:-.5px!important;font-family:sans-serif!important}html.wf-lato-n4-loading .body-2,html.wf-lato-n4-loading .heading-5-v2,html.wf-lato-n4-loading .snowflake-card-v2-advanced-text .snowflake-text p{font-size:15.5px!important;font-family:sans-serif!important}html.wf-texta-n9-loading .heading-2,html.wf-texta-n9-loading .heading-2-v2{font-size:34px!important;line-height:38px!important;letter-spacing:-.75px!important;font-family:sans-serif!important}html.wf-texta-n8-loading .heading-6-v2.snowflake-mega-nav-navigation-title{font-size:13.5px!important;font-family:sans-serif!important}html.wf-texta-n8-loading .heading-4,html.wf-texta-n8-loading .snowflake-button-container,html.wf-texta-n8-loading .snowflake-button-regular .snowflake-button-container{font-size:13px!important;line-height:20px!important;letter-spacing:.25px!important;font-family:sans-serif!important}}@media screen and (min-width:1024px){html.wf-lato-n4-loading .snowflake-mega-nav-nav-item-description{font-size:11.5px!important;font-family:sans-serif!important}html.wf-lato-n4-loading .body-2,html.wf-lato-n4-loading .text-size-regular .snowflake-text li,html.wf-lato-n4-loading .text-size-regular .snowflake-text p,html.wf-lato-n4-loading .text-size-regular .snowflake-text span[data-testid=text-content],html.wf-lato-n4-loading .text-size-regular.cq-Editable-dom li,html.wf-lato-n4-loading .text-size-regular.cq-Editable-dom p,html.wf-lato-n4-loading .text-size-regular.cq-Editable-dom span[data-testid=text-content]{font-size:13.5px!important;font-family:sans-serif!important}html.wf-texta-n8-loading .snowflake-button-compact .snowflake-button-container{font-size:12px!important;letter-spacing:0!important;line-height:18px!important}}@media screen and (min-width:1367px){html.wf-lato-n4-loading .hp-hero__eyebrow a\u003Eb:first-child{font-size:11px!important;font-family:sans-serif!important}html.wf-texta-n8-loading .hp-hero__eyebrow a{font-size:13px!important;font-family:sans-serif!important}html.wf-texta-n9-loading .display-2-v2{font-size:61px!important;line-height:60px!important;font-family:sans-serif!important}html.wf-texta-n9-loading .display-1-v2{font-size:74.5px!important;line-height:74px!important;letter-spacing:-.75px!important;font-family:sans-serif!important}html.wf-texta-n9-loading .heading-2,html.wf-texta-n9-loading .heading-2-v2{font-size:41px!important;letter-spacing:-.75px!important;font-family:sans-serif!important}html.wf-texta-n9-loading .heading-3-v2{font-family:sans-serif!important;letter-spacing:-.75px!important;font-size:33.75px!important}html.wf-texta-n9-loading .heading-4-v2{font-size:19.5px!important;line-height:26px!important;font-family:sans-serif!important}html.wf-texta-n8-loading .heading-6-v2{font-size:12px!important;font-family:sans-serif!important}html.wf-texta-n8-loading .heading-6-v2.snowflake-mega-nav-navigation-title{font-size:14px!important;font-family:sans-serif!important}html.wf-lato-n4-loading .body-1,html.wf-lato-n4-loading .cq-Editable-dom[data-cq-data-path*=text] ol\u003Eli,html.wf-lato-n4-loading .snowflake-text li,html.wf-lato-n4-loading .snowflake-text p,html.wf-lato-n4-loading .text-size-large .snowflake-text li,html.wf-lato-n4-loading .text-size-large .snowflake-text p,html.wf-lato-n4-loading .text-size-large .snowflake-text span[data-testid=text-content],html.wf-lato-n4-loading .text-size-large.cq-Editable-dom li,html.wf-lato-n4-loading .text-size-large.cq-Editable-dom p,html.wf-lato-n4-loading .text-size-large.cq-Editable-dom span[data-testid=text-content],html.wf-lato-n4-loading.cq-Editable-dom[data-cq-data-path*=text]\u003Ep,html.wf-lato-n4-loading.cq-Editable-dom[data-cq-data-path*=text]\u003Eul\u003Eli{font-size:17.5px!important;font-family:sans-serif!important}html.wf-lato-n4-loading .body-2,html.wf-lato-n4-loading .text-size-regular .snowflake-text li,html.wf-lato-n4-loading .text-size-regular .snowflake-text p,html.wf-lato-n4-loading .text-size-regular .snowflake-text span[data-testid=text-content],html.wf-lato-n4-loading .text-size-regular.cq-Editable-dom li,html.wf-lato-n4-loading .text-size-regular.cq-Editable-dom p,html.wf-lato-n4-loading .text-size-regular.cq-Editable-dom span[data-testid=text-content],html.wf-texta-n8-loading .snowflake-button-link .snowflake-button-container,html.wf-texta-n8-loading .snowflake-button-link-back .snowflake-button-container{font-size:15.5px!important;font-family:sans-serif!important}html.wf-lato-n4-loading .body-3,html.wf-lato-n4-loading .text-size-small .snowflake-text li,html.wf-lato-n4-loading .text-size-small .snowflake-text p,html.wf-lato-n4-loading .text-size-small .snowflake-text span[data-testid=text-content],html.wf-lato-n4-loading .text-size-small.cq-Editable-dom li,html.wf-lato-n4-loading .text-size-small.cq-Editable-dom p,html.wf-lato-n4-loading .text-size-small.cq-Editable-dom span[data-testid=text-content]{font-size:13.5px!important;font-family:sans-serif!important}}#industryPlatformSection,.sc-hero{background-position:top left;background-size:20% auto}.bwalignc,.bwalignr{list-style-position:inside}.snowflake-text p sup{font-size:10px}#industryPlatformSection .industry-platform__row .snowflake-flexible-column-container-items,.button-group-pair\u003E.container\u003E.cmp-container\u003E.aem-container,.snowflake-hero-system-content-container{gap:16px}.agenda-item p,.button-group-pair\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv,.partner-details p{margin:0!important}.button-group-pair\u003E.container\u003E.cmp-container\u003E.aem-container::after,.button-group-pair\u003E.container\u003E.cmp-container\u003E.aem-container::before,.hide-logo .snowflake-case-study-card-logo,.partner-page__powered-by-logo,.sc-hero div.code-toolbar\u003E.toolbar,.snowflake-card-v2-advanced.no-link .snowflake-card-v2-advanced-button,.snowflake-partner-hero-card-badge-container{display:none!important}.section--card-mobile-carousel .snowflake-flexible-column-container-items-with-carousel{max-width:100%!important}@media screen and (min-width:768px){.button-group-pair .snowflake-button-container.inline-button--desktop,.button-group-pair\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:auto!important;display:inline-block!important}.button-group-pair\u003E.container\u003E.cmp-container\u003E.aem-container{align-items:center;justify-content:flex-start!important}.button-group-pair.center\u003E.container\u003E.cmp-container\u003E.aem-container{justify-content:center!important}.section--card-mobile-carousel{margin-left:var(--tablet-portrait-margin,48px)!important;margin-right:var(--tablet-portrait-margin,48px);width:calc(100% - 96px)!important;width:calc(100% - var(--tablet-portrait-margin) * 2)!important}}@media screen and (min-width:1024px){.section--card-mobile-carousel{margin-left:var(--tablet-horizontal-margin,48px)!important;margin-right:var(--tablet-horizontal-margin,48px);width:calc(100% - 96px)!important;width:calc(100% - var(--tablet-horizontal-margin) * 2)!important}.snowflake-mega-nav-header-mobile-icon{display:none!important}}@media screen and (min-width:1367px){.section--card-mobile-carousel{margin-left:var(--desktop-margin,6.5%)!important;margin-right:var(--desktop-margin,6.5%);width:87%!important;width:calc(100% - var(--desktop-margin) * 2)!important}.logo-container{min-width:143px}.sc-hero__headline .heading-1-v2{font-size:60px}.snowflake-mega-nav-navigation-title{font-size:17px}.snowflake-mega-nav-dropdown-footer-wrapper .snowflake-title-v2 .snowflake-title-v2-line:first-child{font-size:16px!important;line-height:24px!important}}.hero--home{overflow:hidden;background-color:var(--ui-01);z-index:2}.hp-hero__subheadline{width:90%}.hero--home .snowflake-button-container{transition:.3s}.hero--home .snowflake-button-primary a:hover,.hero--home .snowflake-button-secondary a:hover,.hero--home .snowflake-button-white a:hover{transition:.3s;background-color:var(--ui-02)!important;color:var(--ui-05)!important}.hero--home .snowflake-button-secondary a:hover{border-color:var(--ui-05)!important}.hero--home .snowflake-button-primary a:hover,.hero--home .snowflake-button-white a:hover{border-color:var(--ui-02)!important}.bwalignc,.hp-hero__eyebrow{text-align:center}.hp-hero__eyebrow a{display:inline-flex;flex-direction:column;justify-content:center;cursor:pointer;padding:8px;border-radius:var(--spacing-01);gap:8px;align-items:center;background-color:#45aee3;color:var(--ui-03);font-family:Texta,sans-serif;font-weight:800;font-size:16px;line-height:22px;transition:background-color .3s}.hp-hero__eyebrow a:hover{background-color:#7fc6ea;text-decoration:none;transition:background-color .3s}.hp-hero__eyebrow a\u003Eb:first-child{text-transform:uppercase;white-space:nowrap;display:inline-block;background-color:var(--ui-02);color:var(--ui-05);font-size:12px!important;line-height:16px!important;font-family:Lato,sans-serif;font-weight:500!important;padding:3px 6px;border-radius:2px;letter-spacing:1px}@media screen and (min-width:767px){.hp-hero__eyebrow{text-align:left}.hp-hero__eyebrow a{flex-direction:row;text-align:left}}.hero--home__inner .offset-video,.hero--home__inner .snowflake-experience-fragment,.offset-video__bg-image{max-height:200px;overflow:hidden}.hero--home__inner .offset-video .wistia-responsive-padding{padding-top:100%}.hero--home__inner .snowflake-experience-fragment,.offset-video__bg-image{position:absolute!important;top:0;left:0;width:100%}.offset-video__bg-image{z-index:-1}@media screen and (min-width:768px){.hero--home__inner .snowflake-experience-fragment,.offset-video,.offset-video__bg-image{position:absolute!important;max-height:none;top:0;left:0;width:250%;padding-bottom:250%;transform:translate(0,-50%);height:0}.workloads_7.unistore{max-width:317px}}.promo-banner--homepage{z-index:2}.homepage-banner-offset-container::after{content:\"\";display:block;position:absolute;bottom:0;z-index:1;left:0;width:100%;height:80%;background:#fff}.section--quicklinks .snowflake-button-full-width a{padding-left:24px!important;padding-right:24px!important;transition:box-shadow .25s cubic-bezier(.4,0,.2,1);text-align:left;display:flex;justify-content:center;align-items:center}.section--quicklinks .snowflake-button-full-width a:hover{box-shadow:0 16px 16px 0 rgb(0 0 0 / .16);transition:box-shadow .25s cubic-bezier(.4,0,.2,1)}.section--quicklinks .snowflake-button-container:focus-visible a::before,.section--quicklinks .snowflake-button-full-width a::before{content:\"\";width:23px;height:23px;flex-shrink:0;margin-right:12px;display:inline-block;background-size:cover;background-repeat:no-repeat;background-position:center}#industryPartnerSlider .snowflake-navigation-icon.swiper-button-disabled,#partnerResources .section--resource-hub a svg,.button-tabs span.snowflake-tabs-navigation-item:after,.customer-card--hide-cta .snowflake-case-study-card-button,.dot-tabs span.snowflake-tabs-navigation-item::after,.partner-sidebar__mobile-expand,html:not(.aem-AuthorLayer-initial):not(.aem-AuthorLayer-Edit) .tab-content:not(.is-active){display:none}.section--quicklinks .snowflake-button-full-width a.pricing::before{background-image:url(https://www.snowflake.com/content/dam/snowflake-site/general/icons/decorative-icons/pricing-icon.svg)}.section--quicklinks .snowflake-button-full-width a.snowflake_on_snowflake::before{background-image:url(https://www.snowflake.com/content/dam/snowflake-site/general/icons/navigation/nav-icon_snowflake-bug.svg)}.section--quicklinks .snowflake-button-full-width a.virtual_hands_on_labs::before{background-image:url(https://www.snowflake.com/content/dam/snowflake-site/general/icons/navigation/nav-icon__training.svg)}.section--quicklinks .snowflake-button-full-width a.weekly_demo::before{background-image:url(https://www.snowflake.com/content/dam/snowflake-site/general/icons/navigation/nav-icon__webinars.svg)}@media screen and (min-width:1024px){.hero--home__inner .snowflake-experience-fragment,.offset-video,.offset-video__bg-image{left:-50%}.section--quicklinks .snowflake-flexible-column-container-items{gap:24px}.snowflake-quote-item-inner{padding:32px 24px 24px!important}}#communitiesOuter_overflowBottomGray::after{max-height:100px}#caseStudyOuter_overflowBottomMidBlue::after{max-height:180px}#caseStudyInner .snowflake-case-study-card .snowflake-wistia-video{border-radius:0!important}#caseStudyInner .snowflake-case-study-card{box-shadow:none!important;border-radius:0}#caseStudyInner{max-width:1200px;margin:0 auto;box-shadow:rgb(152 162 179 / .1) 0 10px 20px 0,rgb(152 162 179 / .25) 0 2px 6px 0;border-radius:8px;overflow:hidden;position:relative;z-index:1}.case-study__logo-bar\u003E.snowflake-flexible-column-container-items{background:#f7f9fa;padding:32px 16px 40px}.case-study__logo-bar .cmp-image__image{width:90%;margin:0 auto;max-width:240px}.hp-platform__text-group\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:not(:first-child),.sc-sidebar__group .snowflake-button-link{margin-top:8px}.workloads_7.unistore{margin-left:auto;margin-right:auto}#homepageFootnotesInner .snowflake-simple-stat-disclaimer .snowflake-text p{color:#fff!important}.snowflake-simple-stat-disclaimer .snowflake-text p\u003Ea{border-bottom:1px solid var(--ui-03);color:var(--text-03)}.snowflake-card-v2-advanced{color:inherit}#workloadCardGridOuter .snowflake-card-v2-base-front{gap:0}.video-modal.snowflake-modal-window-open-inner{background-color:#fff0;padding:8px;border:none}.snowflake-container-arrow-dotted-faded .snowflake-container-arrow-dotted-faded-image{width:40%!important;max-width:420px;top:4%!important}.list--blue-bullets ul{margin:0!important;padding:0!important;list-style-type:none}.list--blue-bullets li{margin:0;padding:0 0 0 32px;position:relative}.list--blue-bullets 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}.list--blue-bullets li:not(:last-child){margin-bottom:1rem}.logo-tabs .snowflake-navigation-container,.snowflake-simple-stat-content:empty,.summit-speaker-card .snowflake-card-v2-advanced-text{margin-bottom:0}#techResourceInner,#techResourceOuter,div.overflow-bottom--blue,div.overflow-bottom--gray,div.overflow-bottom--mid-blue,div.overflow-bottom--white,div.overflow-top--blue,div.overflow-top--gray,div.overflow-top--mid-blue,div.overflow-top--white,div[id$=overflowBottomGray],div[id$=overflowBottomMidBlue],div[id$=overflowTopBlue],div[id$=overflowTopGray]{position:relative}div.overflow-bottom--blue::after,div.overflow-bottom--gray::after,div.overflow-bottom--mid-blue::after,div.overflow-bottom--white::after,div.overflow-top--blue::after,div.overflow-top--gray::after,div.overflow-top--mid-blue::after,div.overflow-top--white::after,div[id$=overflowBottomGray]::after,div[id$=overflowBottomMidBlue]::after,div[id$=overflowBottomWhite]::after,div[id$=overflowTopBlue]::after,div[id$=overflowTopGray]::after,div[id$=overflowTopWhite]::after{content:\"\";display:block;position:absolute;left:0;width:100%;height:40%}div.overflow-top--blue::after,div.overflow-top--gray::after,div.overflow-top--mid-blue::after,div.overflow-top--white::after,div[id$=overflowTopBlue]::after,div[id$=overflowTopGray]::after,div[id$=overflowTopWhite]::after{top:0}div.overflow-bottom--blue::after,div.overflow-bottom--gray::after,div.overflow-bottom--mid-blue::after,div.overflow-bottom--white::after,div[id$=overflowBottomGray]::after,div[id$=overflowBottomMidBlue]::after,div[id$=overflowBottomWhite]::after{bottom:0}div.overflow-bottom--white::after,div.overflow-top--white::after,div[id$=overflowBottomWhite]::after,div[id$=overflowTopWhite]::after{background:#fff!important}div.overflow-bottom--gray::after,div.overflow-top--gray::after,div[id$=overflowBottomGray]::after,div[id$=overflowTopGray]::after{background:#f6f9fa!important}div.overflow-bottom--mid-blue::after,div.overflow-top--mid-blue::after,div[id$=overflowBottomMidBlue]::after,div[id$=overflowTopMidBlue]::after{background:#11567f!important}div.overflow-bottom--blue::after,div.overflow-top--blue::after,div[id$=overflowBottomBlue]::after,div[id$=overflowTopBlue]::after{background:#259edc!important}.snowflake-premium-content-banner.promo-banner--no-shadow{box-shadow:none!important}#industryPartnerSlider .cmp-image__image,#industryPartnerSlider .section--partner-tabs .snowflake-image-container .cmp-image__image,#partnerSidebar,.has-shadow .cmp-image__image{box-shadow:0 10px 20px 0 rgb(152 162 179 / .1),0 2px 6px 0 rgb(152 162 179 / .25)}.content-chip--has-desc{align-items:flex-start;padding:20px!important}.content-chip--has-desc .snowflake-content-chip-image{max-width:100px}.content-chip--has-desc .snowflake-content-chip-image__image{aspect-ratio:1}.content-chip--has-desc .snowflake-title-v2-line:first-child{font-size:18px!important}.content-chip--has-desc .snowflake-title-v2-line:nth-child(2){color:#000!important;font-weight:500!important;font-size:16px!important;line-height:22px!important;margin-top:2px!important}.content-chip--has-desc .snowflake-content-chip-button{margin-top:6px!important;font-size:18px!important;display:none}.square-image .snowflake-content-chip-image{aspect-ratio:1;max-width:120px}.section--logo-bar.smaller-logos .snowflake-image-container .cmp-image__image{max-width:200px;margin:0 auto}.snowflake-card-v2-advanced-tag,.snowflake-content-chip-tag{padding:3px 6px!important}.sc-overview__webinar-promo-banner .snowflake-content-chip-button,.snowflake-card-v2-advanced-title:first-child,.summit-pricing-block__aside ul{margin-top:0}.dot-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item{width:40px;height:40px;display:flex;justify-content:center;align-items:center;margin:0!important}.dot-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item p{width:12px;height:12px;background:var(--ui-12);border-radius:100%}.dot-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item p,.logo-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item p{font-size:0!important}.dot-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item.active p{background:var(--ui-01)}.button-tabs .snowflake-navigation-container .swiper-wrapper{padding:8px 0}.button-tabs .snowflake-navigation-container .swiper-slide{margin:0 6px}.button-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item{padding:8px 24px;background-color:#f6f9fa;border-radius:48px;margin:0}.button-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item p{text-transform:uppercase;font-family:Texta,sans-serif;font-weight:700}.button-tabs .border-top{border-top:1px solid #ccc}.button-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item.active{background-color:var(--ui-01);box-shadow:0 2px 6px 0 rgb(152 162 179 / .25),0 10px 20px 0 rgb(152 162 179 / .1)}.button-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item.active p{color:#fff}.button-tabs.has-icons .snowflake-navigation-container .snowflake-tabs-navigation-item p::before{content:\"\";display:inline-block;width:20px;height:20px;background-size:contain;background-repeat:no-repeat;background-position:center center;margin-right:12px;vertical-align:middle;margin-top:-3px}.logo-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item{width:220px;padding-bottom:50%;height:0;margin:0 8px!important;background-size:cover;background-repeat:no-repeat;opacity:.5;transition:opacity .3s}.logo-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item:hover{opacity:.75;transition:opacity .3s}.logo-tabs .snowflake-navigation-container .snowflake-tabs-navigation-item.active{opacity:1;transition:opacity .3s}.dot-tabs .aem-container.cmp-tabs,.logo-tabs .aem-container.cmp-tabs{display:flex;flex-direction:column-reverse}.snowflake-icon.is-center{margin:0 auto;display:block}#industryPartnerSlider .snowflake-flexible-column-container-items,#partnerLogoSquare .snowflake-flexible-column-container-items{gap:24px}#techResourceOuter::after{content:\"\";display:block;position:absolute;top:0;left:0;width:100%;height:40%;background:#f6f9fa}#techResourceInner{z-index:1}.partner-tier-tag h6{display:inline-block!important;padding:2px 6px;border-radius:2px;color:#666}.partner-tier-tag.registered h6{background-color:#f6f9fa}.partner-tier-tag.elite h6{background-color:#11567f;color:#fff}.partner-tier-tag.premier h6{background-color:#b14c77;color:#fff}.partner-tier-tag.select h6{background-color:#5094a0;color:#fff}.partner-details\u003Espan{display:flex;gap:24px}.partner-details a{color:inherit!important;font-weight:400!important}.partner-details p::before{content:\"\";display:inline-block;vertical-align:middle;width:16px;height:16px;background-repeat:no-repeat;background-position:center;transform:translateY(-1px);background-size:auto 90%;margin-right:6px}.partner-details__location::before{background-image:url(\"data:image/svg+xml,%3Csvg width='13' height='18' viewBox='0 0 13 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6.25 17.7531C6.4375 17.7531 6.6 17.6844 6.7375 17.5531C6.875 17.4219 6.95 17.2531 6.95 17.0531C6.95 16.8531 7.075 16.4281 7.3 15.7969C7.5875 15.0281 7.925 14.3156 8.30625 13.6406C8.8 12.7781 9.3125 12.1031 9.85 11.6094C10.75 10.7969 11.4125 9.96563 11.85 9.12188C12.2875 8.27813 12.5063 7.40313 12.5063 6.49063C12.5063 5.36563 12.2187 4.31563 11.6437 3.33438C11.0937 2.40313 10.3438 1.65938 9.4 1.10938C8.43125 .534376 7.375 .246876 6.24375 .246876C5.1125 .246876 4.06875 .534376 3.0875 1.10938C2.15625 1.65938 1.4125 2.40313 .862498 3.33438C.287498 4.31563 0 5.36563 0 6.49063C0 7.47188 .262499 8.42813 .787499 9.35938C1.14375 10.0031 1.65625 10.6656 2.3125 11.3344C2.75625 11.8031 3.24375 12.4781 3.78125 13.3656C4.225 14.0969 4.63125 14.8594 5 15.6656C5.35 16.3844 5.53125 16.8531 5.55625 17.0656C5.55625 17.2594 5.625 17.4156 5.7625 17.5531C5.9 17.6844 6.0625 17.7531 6.25 17.7531ZM6.16875 14.9156C5.775 14.0656 5.325 13.2469 4.825 12.4594C4.275 11.5594 3.7625 10.8719 3.28125 10.3969C2.625 9.71563 2.1375 9.05938 1.825 8.43438C1.5125 7.80313 1.35625 7.16563 1.35625 6.50313C1.35625 5.61563 1.575 4.80313 2.0125 4.05313C2.45 3.30313 3.04375 2.71563 3.7875 2.27813C4.5375 1.84063 5.35 1.62188 6.2375 1.62188C7.125 1.62188 7.9375 1.84063 8.6875 2.27813C9.4375 2.71563 10.0312 3.30313 10.475 4.04688C10.9187 4.80313 11.1375 5.62188 11.1375 6.50313C11.1375 7.90313 10.3937 9.26563 8.9125 10.5969C8.35 11.1094 7.8125 11.7906 7.3 12.6406C6.88125 13.3344 6.50625 14.0969 6.16875 14.9219V14.9156ZM6.26875 8.36563C6.65625 8.36563 7.01875 8.26563 7.35625 8.07188C7.69375 7.87813 7.95625 7.60938 8.14375 7.28438C8.3375 6.95313 8.43125 6.59063 8.43125 6.19688C8.43125 5.80313 8.33125 5.43438 8.1375 5.10313C7.9375 4.76563 7.675 4.50313 7.3375 4.31563C7 4.12813 6.6375 4.02813 6.24375 4.02813C5.85 4.02813 5.4875 4.12813 5.15625 4.32188C4.825 4.52188 4.56875 4.78438 4.375 5.12188C4.18125 5.45938 4.0875 5.82188 4.0875 6.20938C4.0875 6.59688 4.1875 6.95938 4.38125 7.29688C4.58125 7.63438 4.84375 7.89688 5.18125 8.08438C5.51875 8.27813 5.88125 8.37188 6.26875 8.37188V8.36563ZM6.24375 7.50313C5.8875 7.50313 5.575 7.37188 5.31875 7.11563C5.0625 6.85938 4.93125 6.55313 4.93125 6.19063C4.93125 5.82813 5.0625 5.52188 5.31875 5.26563C5.575 5.00938 5.88125 4.87813 6.24375 4.87813C6.60625 4.87813 6.9125 5.00938 7.16875 5.26563C7.425 5.52188 7.55625 5.82813 7.55625 6.19063C7.55625 6.55313 7.425 6.85938 7.16875 7.11563C6.9125 7.37188 6.60625 7.50313 6.24375 7.50313Z' fill='%2329B5E8'/%3E%3C/svg%3E%0A\")}.partner-details__website::before{background-image:url(\"data:image/svg+xml,%3Csvg width='18' height='16' viewBox='0 0 18 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2.61587 2.96889C2.61587 2.75109 2.79633 2.57062 3.01413 2.57062C3.23192 2.57062 3.41238 2.75109 3.41238 2.96889C3.41238 3.18669 3.23192 3.36716 3.01413 3.36716C2.79633 3.36716 2.61587 3.18669 2.61587 2.96889ZM4.21512 2.96889C4.21512 2.75109 4.39558 2.57062 4.61338 2.57062C4.83117 2.57062 5.01163 2.75109 5.01163 2.96889C5.01163 3.18669 4.83117 3.36716 4.61338 3.36716C4.39558 3.36716 4.21512 3.18669 4.21512 2.96889ZM5.81438 2.96889C5.81438 2.75109 5.99484 2.57062 6.21264 2.57062C6.43043 2.57062 6.61089 2.75109 6.61089 2.96889C6.61089 3.18669 6.43043 3.36716 6.21264 3.36716C5.99484 3.36716 5.81438 3.18669 5.81438 2.96889ZM17.2518 .697559H1.19085C.811258 .697559 .506348 1.0025 .506348 1.38209V14.6179C.506348 14.9975 .811258 15.3024 1.19085 15.3024H17.2518C17.6314 15.3024 17.9363 14.9975 17.9363 14.6179V1.38209C17.9363 1.0025 17.6314 .697559 17.2518 .697559ZM16.5673 2.06035V3.90853H1.86914V2.06035H16.5673ZM1.86914 13.9334V4.78593H16.5673V13.9334H1.86914Z' fill='%2329B5E8'/%3E%3C/svg%3E%0A\")}#partnerSidebar{border-radius:4px;background-color:#fff;padding:24px 24px 32px;border-bottom:6px solid #29b5e8}#partnerSidebar h5,.newsletter-disclaimer p{font-size:14px!important}#partnerSidebar ul{margin-top:0;list-style-type:none;padding:0;display:flex;flex-wrap:wrap;gap:8px}#partnerSidebar li{border:1px solid;border-radius:2px;padding:0 4px!important;font-size:11px!important;letter-spacing:.25px;text-transform:uppercase}div.snowflake-partner-hero-card{width:100%;margin:0}.partner-details__logo{max-width:380px;margin:0 auto}@media screen and (max-width:767px){.left-alignment .hp-hero__subheadline{margin-left:auto;margin-right:auto}.left-alignment .hp-hero__headline .snowflake-title-v2-line,.left-alignment .hp-hero__subheadline .snowflake-title-v2-line{text-align:center}.hero--home__inner .snowflake-flexible-column-container-items-top-padding-large{padding-top:var(--spacing-02)}.section--logo-bar\u003E.snowflake-flexible-column-container-items{display:flex;flex-wrap:wrap;flex-direction:row;justify-content:center;gap:8px}.section--logo-bar\u003E.snowflake-flexible-column-container-items\u003Ediv{width:calc(33.33% - 8px)}.partner-sidebar__mobile-expand{display:inline-block;color:#249edc;border-color:#249edc!important}#partnerSidebar li:nth-child(n+6),.summit-nav__links .snowflake-button-tertiary{display:none}.sc-body__sidebar{background-color:#f6f9fa;padding:24px}.sc-body__content{padding:0 24px 24px}.summit-speaker-card .snowflake-card-v2-advanced-content{padding:24px}}#partnerResources h6,.snowflake-tabs-navigation-item p.body-1{font-size:16px!important}#partnerResources .section--resource-hub{padding:0 16px}#partnerResources .section--resource-hub a,.bwalignl{text-align:left}@media screen and (max-width:1023px){.hero--workload .snowflake-hero-system-media-container{width:100%}}.section--timely-content .snowflake-content-chip,.snowflake-mega-nav-dropdown-footer-wrapper{align-items:center}.section--timely-content .snowflake-content-chip-image{max-width:94px}.section--timely-content .snowflake-content-chip-image__inner{line-height:0}.section--timely-content .snowflake-content-chip-image__image{aspect-ratio:1;height:auto}.section--workload-overview .workload-overview__headline{max-width:280px;margin:0 auto}#industryPartnerSlider .swiper-slide{margin-top:0!important;padding:0 12px}#industryPartnerSlider .snowflake-tabs-navigation-item{margin-left:0!important;margin-right:0!important}#industryPartnerSlider .snowflake-premium-content-banner-background-grad-white .snowflake-premium-content-banner{box-shadow:none}#industryPartnerSlider .logo-slider__slide .aem-container{display:flex;padding:0 8px!important;flex-wrap:wrap;gap:16px!important;justify-content:center}#industryPartnerSlider .logo-slider__slide .aem-container\u003Ediv{width:48%;max-width:200px}#useCaseTabs{padding-top:24px;padding-bottom:24px;padding-right:24px}#useCaseTabs .tab-content.is-active{display:block}#useCaseTabs .vert-tab{border-bottom:1px solid #a0bbcc;padding-bottom:16px}#useCaseTabs .vert-tab p{display:inline-block}#useCaseTabs .vert-tab p:hover{cursor:pointer}#useCaseTabs .vert-tab p,#useCaseTabs .vert-tab.is-active p.not-active{color:#249edc}#useCaseTabs .vert-tab p.is-active,#useCaseTabs .vert-tab.is-active p{color:#000}#industryPlatformSection{background-image:url(/adobe/dynamicmedia/deliver/dm-aid--db074ad5-7122-4c51-87a3-76c3aa466182/double-arrow-bg%403x.png);background-repeat:no-repeat}.snowflake-text p.featured-quote__source{font-weight:900!important;text-transform:uppercase;font-size:16px!important;margin-top:2rem!important}.snowflake-text p.featured-quote__title{margin-top:0!important;font-size:16px!important}.snowflake-case-study-card-logo img{width:auto!important;height:100px!important;transform:translateX(-15%)}.snowflake-quote-item-quote-text{font-weight:600!important}#customerStoryStatsInner\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;flex-direction:row}#customerStoryStat1,#customerStoryStat2{max-width:240px}#storyHighlights{border-radius:4px;padding:1rem}.sc-overview__webinar-promo-banner .snowflake-content-chip-content .snowflake-title-v2-line,.summit-pricing-block__tile .black-blue-text-color .snowflake-title-v2-line{color:#000!important}.snowflake-youtube-embedded-wrapper{border-radius:var(--small-border-radius)}#arcticNavItem::before,#offset::before,#open-source::before{color:var(--text-05);font-family:Texta,sans-serif!important}#offset,.sc-architecture-caption{margin-top:16px}.hero--press .snowflake-title-v2-line{text-transform:none!important}@media screen and (min-width:768px){.subpage-timely-content__inner\u003E.snowflake-flexible-column-container-items{box-shadow:0 10px 20px 0 rgb(152 162 179 / .1),0 2px 6px 0 rgb(152 162 179 / .25);padding:var(--spacing-04);border-radius:4px;overflow:hidden}#partnerLogoSquare{padding:0 0 0 48px}.hero--workload .snowflake-container{max-width:1440px;margin:0 auto!important;align-items:center}#industryPartnerSlider.snowflake-flexible-column-container-2-column-40-60\u003E.snowflake-flexible-column-container-items{grid-template-columns:minmax(40%,4fr) minmax(0,6fr)}#industryPartnerSlider .swiper-slide{padding:0 24px}.sc-body{padding:48px}.sc-body\u003E.snowflake-flexible-column-container-items{grid-template-columns:7fr 3fr;gap:124px}}.snowflake-button-container.has-icon{display:inline-flex;justify-content:center;align-items:center;text-align:left}.snowflake-button-container.has-icon::before{content:\"\";display:inline-block;width:20px;height:20px;margin-right:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.snowflake-button-container.is-video::before{background-image:url(\"data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9 1.28663C13.2523 1.28663 16.7134 4.74768 16.7134 9C16.7134 13.2523 13.2523 16.7134 9 16.7134C4.74768 16.7198 1.28663 13.2588 1.28663 9C1.28663 4.74124 4.74768 1.28663 9 1.28663ZM9 0C4.0336 0 0 4.0336 0 9C0 13.9664 4.0336 18 9 18C13.9728 18 18 13.9664 18 9C18 4.0336 13.9728 0 9 0Z' fill='white'/%3E%3Cpath d='M7.75106 6.18211C7.42941 6.16925 7.16565 6.42658 7.16565 6.74823V11.2772C7.16565 11.7082 7.65457 11.9848 8.02126 11.7597L11.7975 9.4952C12.1578 9.27647 12.1578 8.74252 11.7975 8.52379L8.02126 6.25931C7.93763 6.21428 7.84756 6.18211 7.75106 6.18211Z' fill='white'/%3E%3C/svg%3E%0A\")}.snowflake-button-container.is-github::before{background-image:url(\"data:image/svg+xml,%3Csvg width='20' height='21' viewBox='0 0 20 21' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M10 .651794C4.475 .651794 0 5.12679 0 10.6518C0 15.0768 2.8625 18.8143 6.8375 20.1393C7.3375 20.2268 7.525 19.9268 7.525 19.6643C7.525 19.4268 7.5125 18.6393 7.5125 17.8018C5 18.2643 4.35 17.1893 4.15 16.6268C4.0375 16.3393 3.55 15.4518 3.125 15.2143C2.775 15.0268 2.275 14.5643 3.1125 14.5518C3.9 14.5393 4.4625 15.2768 4.65 15.5768C5.55 17.0893 6.9875 16.6643 7.5625 16.4018C7.65 15.7518 7.9125 15.3143 8.2 15.0643C5.975 14.8143 3.65 13.9518 3.65 10.1268C3.65 9.03929 4.0375 8.13929 4.675 7.43929C4.575 7.18929 4.225 6.16429 4.775 4.78929C4.775 4.78929 5.6125 4.52679 7.525 5.81429C8.325 5.58929 9.175 5.47679 10.025 5.47679C10.875 5.47679 11.725 5.58929 12.525 5.81429C14.4375 4.51429 15.275 4.78929 15.275 4.78929C15.825 6.16429 15.475 7.18929 15.375 7.43929C16.0125 8.13929 16.4 9.02679 16.4 10.1268C16.4 13.9643 14.0625 14.8143 11.8375 15.0643C12.2 15.3768 12.5125 15.9768 12.5125 16.9143C12.5125 18.2518 12.5 19.3268 12.5 19.6643C12.5 19.9268 12.6875 20.2393 13.1875 20.1393C17.1375 18.8143 20 15.0643 20 10.6518C20 5.12679 15.525 .651794 10 .651794Z' fill='%23249EDC'/%3E%3C/svg%3E%0A\")}.snowflake-button-container.is-quickstart::before{background-image:url(\"data:image/svg+xml,%3Csvg width='15' height='21' viewBox='0 0 15 21' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8489 2.79368H11.6439V2.38493C11.6439 1.71368 11.1451 .967427 10.4251 .967427H8.94762C8.80887 .359927 8.37387 .299927 7.89762 .299927H7.23012C6.85512 .299927 6.26637 .299927 6.08637 .967427H4.68387C3.94887 .967427 3.35637 1.74368 3.35637 2.38493V2.79368H1.15137C.738867 2.79368 .401367 3.13118 .401367 3.54368V20.2537C.401367 20.6662 .738867 21.0037 1.15137 21.0037H13.8489C14.2614 21.0037 14.5989 20.6662 14.5989 20.2537V3.54368C14.5989 3.13118 14.2614 2.79368 13.8489 2.79368ZM4.29387 2.38493C4.29387 2.18243 4.54137 1.90493 4.68387 1.90493H6.50262C6.76137 1.90493 6.97137 1.69493 6.97137 1.43618C6.97137 1.33868 6.97887 1.27868 6.98637 1.24118C7.05012 1.23368 7.15512 1.23368 7.23387 1.23368H7.90137C7.95012 1.23368 8.00637 1.23368 8.05137 1.23368C8.05512 1.27868 8.05887 1.34243 8.05887 1.43243C8.05887 1.69118 8.26887 1.90118 8.52762 1.90118H10.4289C10.5301 1.90118 10.7101 2.14493 10.7101 2.38118V2.78993H4.29762V2.38118L4.29387 2.38493ZM13.0989 19.4999H1.90137V4.29368H13.0989V19.5037V19.4999Z' fill='%23249EDC'/%3E%3Cpath d='M3.82512 16.0424H11.1751C11.4339 16.0424 11.6439 15.8324 11.6439 15.5736V6.88486C11.6439 6.62611 11.4339 6.41611 11.1751 6.41611H3.82512C3.56637 6.41611 3.35637 6.62611 3.35637 6.88486V15.5736C3.35637 15.8324 3.56637 16.0424 3.82512 16.0424ZM4.29387 15.1049V13.3686H10.7064V15.1049H4.29387ZM10.7101 7.35361V12.4311H4.29762V7.35361H10.7101Z' fill='%23249EDC'/%3E%3Cpath d='M6.16512 9.35989H8.83887C9.09762 9.35989 9.30762 9.14989 9.30762 8.89114C9.30762 8.63239 9.09762 8.42239 8.83887 8.42239H6.16512C5.90637 8.42239 5.69637 8.63239 5.69637 8.89114C5.69637 9.14989 5.90637 9.35989 6.16512 9.35989Z' fill='%23249EDC'/%3E%3Cpath d='M6.16512 11.3624H8.83887C9.09762 11.3624 9.30762 11.1524 9.30762 10.8937C9.30762 10.6349 9.09762 10.4249 8.83887 10.4249H6.16512C5.90637 10.4249 5.69637 10.6349 5.69637 10.8937C5.69637 11.1524 5.90637 11.3624 6.16512 11.3624Z' fill='%23249EDC'/%3E%3C/svg%3E%0A\")}.snowflake-button-container.is-download::before{background-image:url(\"data:image/svg+xml,%3Csvg width='16' height='18' viewBox='0 0 16 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M15.2017 17.1637H.798265C.364425 17.1637 0 16.7993 0 16.3655V12.3568C0 11.923 .364425 11.5585 .798265 11.5585C1.2321 11.5585 1.59653 11.923 1.59653 12.3568V15.5498H14.4035V12.3568C14.4035 11.923 14.7679 11.5585 15.2017 11.5585C15.6356 11.5585 16 11.923 16 12.3568V16.3655C16 16.7993 15.6529 17.1637 15.2017 17.1637Z' fill='%23249EDC'/%3E%3Cpath d='M7.94793 12.9642C7.84381 12.9642 7.73969 12.9468 7.63557 12.8947C7.34056 12.7733 7.14967 12.4783 7.14967 12.1485L7.18437 .938127C7.18437 .504287 7.5488 .139862 7.98264 .139862C8.41648 .139862 8.7809 .504287 8.7809 .938127L8.7462 10.257L12.8416 6.33509C13.154 6.02273 13.6746 6.04008 13.9696 6.35244C14.282 6.66481 14.2646 7.18542 13.9523 7.48043L8.50325 12.7386C8.36442 12.8774 8.15617 12.9642 7.94793 12.9642Z' fill='%23249EDC'/%3E%3Cpath d='M7.94793 12.9642C7.73969 12.9642 7.54881 12.8947 7.39262 12.7386L2.03037 7.53249C1.718 7.22012 1.70065 6.71687 2.01301 6.40451C2.32538 6.09214 2.82863 6.07479 3.141 6.38715L8.50325 11.5932C8.81562 11.9056 8.83297 12.4088 8.52061 12.7212C8.36442 12.8774 8.15617 12.9642 7.94793 12.9642Z' fill='%23249EDC'/%3E%3C/svg%3E%0A\")}.snowflake-button-container.is-expand::before{background-image:url(\"data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.64375 10.9125C6.9375 11.2062 6.93125 11.6812 6.64375 11.9687L2.57502 16H3.79375C4.20625 16 4.54376 16.3375 4.54376 16.75C4.54376 17.1625 4.20625 17.5 3.79375 17.5H.756264C.556264 17.5 .36876 17.4187 .22501 17.2812C.22501 17.2812 .206248 17.25 .193748 17.2375C.143748 17.1812 .100004 17.1125 .0625038 17.0437C.0375038 16.9687 .0187492 16.8937 .0187492 16.8187C.0187492 16.8 .0062561 16.7813 .0062561 16.7625V13.725C.0187561 13.3125 .356257 12.9875 .768757 12.9937C1.16876 13 1.48752 13.325 1.50002 13.725V14.9688L5.5875 10.9187C5.88125 10.6312 6.35 10.6312 6.64375 10.9187V10.9125ZM17.5063 .743732C17.5063 .543732 17.425 .356235 17.2875 .218735C17.2875 .218735 17.2562 .199998 17.2437 .193748C17.1875 .137498 17.1188 .0937347 17.0438 .0624847C16.9688 .0374847 16.8938 .0187492 16.8188 .0187492C16.8 .0187492 16.7813 .00623703 16.7625 .00623703H13.725C13.3125 .00623703 12.975 .343745 12.975 .756245C12.975 1.16874 13.3125 1.50623 13.725 1.50623H14.9688L11.1312 5.37498C10.8437 5.67498 10.8563 6.14999 11.1563 6.43124C11.45 6.71249 11.9063 6.70624 12.1938 6.43124L16.0125 2.575V3.79375C16.0125 4.20625 16.35 4.54372 16.7625 4.54372C17.175 4.54372 17.5125 4.20625 17.5125 3.79375V.756245L17.5063 .743732ZM16.7562 12.9688C16.3437 12.9688 16.0063 13.3063 16.0063 13.7188V14.8937L12.1938 10.925C11.9063 10.625 11.4375 10.6188 11.1375 10.9063C10.8375 11.1938 10.8313 11.6625 11.1188 11.9625L15 16.0062H13.7188C13.3063 16.0062 12.9688 16.3437 12.9688 16.7562C12.9688 17.1687 13.3063 17.5063 13.7188 17.5063H16.7562C16.85 17.5063 16.95 17.4875 17.0375 17.45C17.0875 17.425 17.1313 17.3937 17.175 17.3625C17.2063 17.3437 17.2438 17.325 17.275 17.3C17.3313 17.2375 17.375 17.1687 17.4125 17.1C17.4188 17.0875 17.4375 17.075 17.4438 17.0562C17.45 17.025 17.4563 16.9938 17.4625 16.9625C17.4813 16.9 17.5 16.8375 17.5 16.7687V13.725C17.5 13.3125 17.1687 12.975 16.7562 12.975V12.9688ZM.750008 4.53125C1.16251 4.53125 1.50002 4.19374 1.50002 3.78124V2.5L5.59376 6.43124C5.89376 6.71874 6.36251 6.70626 6.65001 6.41251C6.93751 6.11876 6.92501 5.64375 6.63126 5.35625L2.61251 1.49998H3.7875C4.2 1.49998 4.53751 1.16249 4.53751 .749989C4.53751 .337489 4.2 0 3.7875 0H.743752C.668752 0 .600004 .0187355 .531254 .0437355C.506254 .0499855 .481263 .0437477 .462513 .0562477C.443763 .0687477 .425015 .0812462 .406265 .0937462C.337515 .124996 .275004 .168741 .218754 .224991H.212498C.212498 .224991 .175 .28125 .15625 .3125C.11875 .3625 .0812477 .4125 .0562477 .46875C.0374977 .525 .0249992 .587499 .0187492 .643749C.0124992 .674999 0 .712482 0 .743732V3.78124C0 4.19374 .337508 4.53125 .750008 4.53125Z' fill='white'/%3E%3C/svg%3E%0A\")}@keyframes slow-scroll{100%{transform:translateY(-50%)}}.sc-hero{overflow:hidden;background-color:#212d35;background-repeat:repeat-y;background-image:url(\"data:image/svg+xml,%3Csvg width='389' height='17' viewBox='0 0 389 17' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M.638672 7.80824L.638672 9.2566C.638672 9.52364 .85538 9.74024 1.12262 9.74024H2.57204C2.83928 9.74024 3.05598 9.52364 3.05598 9.2566V7.80824C3.05598 7.54119 2.83928 7.32472 2.57204 7.32472L1.12262 7.32472C.85538 7.32472 .638672 7.54119 .638672 7.80824Z' fill='url(%23paint0_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.9639 7.80824V9.2566C10.9639 9.52364 11.1806 9.74024 11.4478 9.74024L12.8972 9.74024C13.1645 9.74024 13.3812 9.52364 13.3812 9.2566V7.80824C13.3812 7.54119 13.1645 7.32471 12.8972 7.32471L11.4478 7.32471C11.1806 7.32471 10.9639 7.54119 10.9639 7.80824Z' fill='url(%23paint1_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M21.2891 7.80823V9.2566C21.2891 9.52364 21.5058 9.74024 21.773 9.74024L23.2224 9.74024C23.4897 9.74024 23.7064 9.52364 23.7064 9.2566V7.80823C23.7064 7.54119 23.4897 7.32471 23.2224 7.32471L21.773 7.32471C21.5058 7.32471 21.2891 7.54119 21.2891 7.80823Z' fill='url(%23paint2_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M31.6143 7.80823V9.2566C31.6143 9.52364 31.831 9.74024 32.0982 9.74024H33.5476C33.8149 9.74024 34.0316 9.52364 34.0316 9.2566V7.80823C34.0316 7.54119 33.8149 7.32471 33.5476 7.32471L32.0982 7.32471C31.831 7.32471 31.6143 7.54119 31.6143 7.80823Z' fill='url(%23paint3_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M41.9395 7.80823V9.2566C41.9395 9.52364 42.1562 9.74024 42.4234 9.74024H43.8728C44.1401 9.74024 44.3568 9.52364 44.3568 9.2566V7.80823C44.3568 7.54119 44.1401 7.32471 43.8728 7.32471L42.4234 7.32471C42.1562 7.32471 41.9395 7.54119 41.9395 7.80823Z' fill='url(%23paint4_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M52.5076 7.80823V9.2566C52.5076 9.52364 52.7243 9.74024 52.9916 9.74024H54.441C54.7082 9.74024 54.9249 9.52364 54.9249 9.2566V7.80823C54.9249 7.54119 54.7082 7.32471 54.441 7.32471L52.9916 7.32471C52.7243 7.32471 52.5076 7.54119 52.5076 7.80823Z' fill='url(%23paint5_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M62.8331 7.80823V9.2566C62.8331 9.52364 63.0493 9.74024 63.3165 9.74024H64.7664C65.0332 9.74024 65.2504 9.52364 65.2504 9.2566V7.80823C65.2504 7.54119 65.0332 7.32471 64.7664 7.32471L63.3165 7.32471C63.0493 7.32471 62.8331 7.54119 62.8331 7.80823Z' fill='url(%23paint6_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M73.1583 7.80823V9.2566C73.1583 9.52364 73.3745 9.74024 73.6417 9.74024H75.0916C75.3584 9.74024 75.5756 9.52364 75.5756 9.2566V7.80823C75.5756 7.54119 75.3584 7.32471 75.0916 7.32471L73.6417 7.32471C73.3745 7.32471 73.1583 7.54119 73.1583 7.80823Z' fill='url(%23paint7_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M83.4835 7.80823V9.2566C83.4835 9.52364 83.6997 9.74024 83.9669 9.74024H85.4168C85.6836 9.74024 85.9008 9.52364 85.9008 9.2566V7.80823C85.9008 7.54119 85.6836 7.32471 85.4168 7.32471L83.9669 7.32471C83.6997 7.32471 83.4835 7.54119 83.4835 7.80823Z' fill='url(%23paint8_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M93.8087 7.80823V9.2566C93.8087 9.52364 94.0249 9.74024 94.2921 9.74024H95.742C96.0088 9.74024 96.226 9.52364 96.226 9.2566V7.80823C96.226 7.54119 96.0088 7.32471 95.742 7.32471L94.2921 7.32471C94.0249 7.32471 93.8087 7.54119 93.8087 7.80823Z' fill='url(%23paint9_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M104.134 7.80823V9.2566C104.134 9.52364 104.35 9.74024 104.617 9.74024H106.067C106.334 9.74024 106.551 9.52364 106.551 9.2566V7.80823C106.551 7.54119 106.334 7.32471 106.067 7.32471L104.617 7.32471C104.35 7.32471 104.134 7.54119 104.134 7.80823Z' fill='url(%23paint10_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M114.702 7.80823V9.2566C114.702 9.52364 114.918 9.74024 115.185 9.74024L116.635 9.74024C116.902 9.74024 117.119 9.52364 117.119 9.25659V7.80823C117.119 7.54119 116.902 7.32471 116.635 7.32471L115.185 7.32471C114.918 7.32471 114.702 7.54119 114.702 7.80823Z' fill='url(%23paint11_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M125.027 7.80823V9.25659C125.027 9.52364 125.243 9.74024 125.511 9.74024L126.961 9.74024C127.227 9.74024 127.445 9.52364 127.445 9.25659V7.80823C127.445 7.54119 127.227 7.32471 126.961 7.32471L125.511 7.32471C125.243 7.32471 125.027 7.54119 125.027 7.80823Z' fill='url(%23paint12_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M135.352 7.80823V9.25659C135.352 9.52364 135.569 9.74024 135.836 9.74024H137.286C137.553 9.74024 137.77 9.52364 137.77 9.25659V7.80823C137.77 7.54119 137.553 7.32471 137.286 7.32471L135.836 7.32471C135.569 7.32471 135.352 7.54119 135.352 7.80823Z' fill='url(%23paint13_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M145.678 7.80823V9.25659C145.678 9.52364 145.894 9.74024 146.161 9.74024H147.611C147.878 9.74024 148.095 9.52364 148.095 9.25659V7.80823C148.095 7.54119 147.878 7.32471 147.611 7.32471L146.161 7.32471C145.894 7.32471 145.678 7.54119 145.678 7.80823Z' fill='url(%23paint14_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M156.003 7.80823V9.25659C156.003 9.52364 156.219 9.74024 156.486 9.74024H157.936C158.203 9.74024 158.42 9.52364 158.42 9.25659V7.80823C158.42 7.54119 158.203 7.32471 157.936 7.32471L156.486 7.32471C156.219 7.32471 156.003 7.54119 156.003 7.80823Z' fill='url(%23paint15_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M166.328 7.80823V9.25659C166.328 9.52363 166.544 9.74024 166.811 9.74024H168.261C168.528 9.74024 168.745 9.52363 168.745 9.25659V7.80823C168.745 7.54119 168.528 7.32471 168.261 7.32471L166.811 7.32471C166.544 7.32471 166.328 7.54119 166.328 7.80823Z' fill='url(%23paint16_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M176.896 7.80823V9.25659C176.896 9.52363 177.112 9.74023 177.38 9.74023H178.83C179.096 9.74023 179.313 9.52363 179.313 9.25659V7.80823C179.313 7.54119 179.096 7.32471 178.83 7.32471L177.38 7.32471C177.112 7.32471 176.896 7.54119 176.896 7.80823Z' fill='url(%23paint17_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M187.221 7.80823V9.25659C187.221 9.52363 187.438 9.74023 187.705 9.74023H189.155C189.421 9.74023 189.639 9.52363 189.639 9.25659V7.80823C189.639 7.54119 189.421 7.32471 189.155 7.32471L187.705 7.32471C187.438 7.32471 187.221 7.54119 187.221 7.80823Z' fill='url(%23paint18_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M199.639 7.80824V9.2566C199.639 9.52364 199.855 9.74024 200.123 9.74024H201.572C201.839 9.74024 202.056 9.52364 202.056 9.2566V7.80824C202.056 7.54119 201.839 7.32472 201.572 7.32472L200.123 7.32472C199.855 7.32472 199.639 7.54119 199.639 7.80824Z' fill='url(%23paint19_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M209.964 7.80824V9.2566C209.964 9.52364 210.181 9.74024 210.448 9.74024L211.897 9.74024C212.164 9.74024 212.381 9.52364 212.381 9.2566V7.80824C212.381 7.54119 212.164 7.32471 211.897 7.32471L210.448 7.32471C210.181 7.32471 209.964 7.54119 209.964 7.80824Z' fill='url(%23paint20_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M220.289 7.80823V9.2566C220.289 9.52364 220.506 9.74024 220.773 9.74024L222.222 9.74024C222.49 9.74024 222.706 9.52364 222.706 9.2566V7.80823C222.706 7.54119 222.49 7.32471 222.222 7.32471L220.773 7.32471C220.506 7.32471 220.289 7.54119 220.289 7.80823Z' fill='url(%23paint21_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M230.614 7.80823V9.2566C230.614 9.52364 230.831 9.74024 231.098 9.74024H232.548C232.815 9.74024 233.032 9.52364 233.032 9.2566V7.80823C233.032 7.54119 232.815 7.32471 232.548 7.32471L231.098 7.32471C230.831 7.32471 230.614 7.54119 230.614 7.80823Z' fill='url(%23paint22_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M240.939 7.80823V9.2566C240.939 9.52364 241.156 9.74024 241.423 9.74024H242.873C243.14 9.74024 243.357 9.52364 243.357 9.2566V7.80823C243.357 7.54119 243.14 7.32471 242.873 7.32471L241.423 7.32471C241.156 7.32471 240.939 7.54119 240.939 7.80823Z' fill='url(%23paint23_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M251.508 7.80823V9.2566C251.508 9.52364 251.724 9.74024 251.992 9.74024H253.441C253.708 9.74024 253.925 9.52364 253.925 9.2566V7.80823C253.925 7.54119 253.708 7.32471 253.441 7.32471L251.992 7.32471C251.724 7.32471 251.508 7.54119 251.508 7.80823Z' fill='url(%23paint24_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M261.833 7.80823V9.2566C261.833 9.52364 262.049 9.74024 262.317 9.74024H263.766C264.033 9.74024 264.25 9.52364 264.25 9.2566V7.80823C264.25 7.54119 264.033 7.32471 263.766 7.32471L262.317 7.32471C262.049 7.32471 261.833 7.54119 261.833 7.80823Z' fill='url(%23paint25_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M272.158 7.80823V9.2566C272.158 9.52364 272.374 9.74024 272.642 9.74024H274.092C274.358 9.74024 274.576 9.52364 274.576 9.2566L274.576 7.80823C274.576 7.54119 274.358 7.32471 274.092 7.32471L272.642 7.32471C272.374 7.32471 272.158 7.54119 272.158 7.80823Z' fill='url(%23paint26_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M282.483 7.80823V9.2566C282.483 9.52364 282.7 9.74024 282.967 9.74024H284.417C284.684 9.74024 284.901 9.52364 284.901 9.2566V7.80823C284.901 7.54119 284.684 7.32471 284.417 7.32471L282.967 7.32471C282.7 7.32471 282.483 7.54119 282.483 7.80823Z' fill='url(%23paint27_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M292.809 7.80823L292.809 9.2566C292.809 9.52364 293.025 9.74024 293.292 9.74024H294.742C295.009 9.74024 295.226 9.52364 295.226 9.2566V7.80823C295.226 7.54119 295.009 7.32471 294.742 7.32471L293.292 7.32471C293.025 7.32471 292.809 7.54119 292.809 7.80823Z' fill='url(%23paint28_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M303.134 7.80823L303.134 9.2566C303.134 9.52364 303.35 9.74024 303.617 9.74024H305.067C305.334 9.74024 305.551 9.52364 305.551 9.2566V7.80823C305.551 7.54119 305.334 7.32471 305.067 7.32471L303.617 7.32471C303.35 7.32471 303.134 7.54119 303.134 7.80823Z' fill='url(%23paint29_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M313.702 7.80823L313.702 9.2566C313.702 9.52364 313.918 9.74024 314.185 9.74024L315.635 9.74024C315.902 9.74024 316.119 9.52364 316.119 9.25659V7.80823C316.119 7.54119 315.902 7.32471 315.635 7.32471L314.185 7.32471C313.918 7.32471 313.702 7.54119 313.702 7.80823Z' fill='url(%23paint30_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M324.027 7.80823V9.25659C324.027 9.52364 324.243 9.74024 324.511 9.74024L325.961 9.74024C326.227 9.74024 326.445 9.52364 326.445 9.25659V7.80823C326.445 7.54119 326.227 7.32471 325.961 7.32471L324.511 7.32471C324.243 7.32471 324.027 7.54119 324.027 7.80823Z' fill='url(%23paint31_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M334.352 7.80823V9.25659C334.352 9.52364 334.569 9.74024 334.836 9.74024H336.286C336.553 9.74024 336.77 9.52364 336.77 9.25659L336.77 7.80823C336.77 7.54119 336.553 7.32471 336.286 7.32471L334.836 7.32471C334.569 7.32471 334.352 7.54119 334.352 7.80823Z' fill='url(%23paint32_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M344.678 7.80823V9.25659C344.678 9.52364 344.894 9.74024 345.161 9.74024H346.611C346.878 9.74024 347.095 9.52364 347.095 9.25659L347.095 7.80823C347.095 7.54119 346.878 7.32471 346.611 7.32471L345.161 7.32471C344.894 7.32471 344.678 7.54119 344.678 7.80823Z' fill='url(%23paint33_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M355.003 7.80823V9.25659C355.003 9.52364 355.219 9.74024 355.486 9.74024H356.936C357.203 9.74024 357.42 9.52364 357.42 9.25659L357.42 7.80823C357.42 7.54119 357.203 7.32471 356.936 7.32471L355.486 7.32471C355.219 7.32471 355.003 7.54119 355.003 7.80823Z' fill='url(%23paint34_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M365.328 7.80823V9.25659C365.328 9.52363 365.544 9.74024 365.811 9.74024H367.261C367.528 9.74024 367.745 9.52363 367.745 9.25659V7.80823C367.745 7.54119 367.528 7.32471 367.261 7.32471L365.811 7.32471C365.544 7.32471 365.328 7.54119 365.328 7.80823Z' fill='url(%23paint35_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M375.896 7.80823V9.25659C375.896 9.52363 376.112 9.74023 376.38 9.74023H377.83C378.096 9.74023 378.313 9.52363 378.313 9.25659V7.80823C378.313 7.54119 378.096 7.32471 377.829 7.32471L376.38 7.32471C376.112 7.32471 375.896 7.54119 375.896 7.80823Z' fill='url(%23paint36_linear_8295_70635)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M386.221 7.80823V9.25659C386.221 9.52363 386.438 9.74023 386.705 9.74023H388.155C388.421 9.74023 388.639 9.52363 388.639 9.25659V7.80823C388.639 7.54119 388.421 7.32471 388.155 7.32471L386.705 7.32471C386.438 7.32471 386.221 7.54119 386.221 7.80823Z' fill='url(%23paint37_linear_8295_70635)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint1_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint2_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint3_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint4_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint5_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint6_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint7_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint8_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint9_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint10_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint11_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint12_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint13_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint14_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint15_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint16_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint17_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint18_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint19_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint20_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint21_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint22_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint23_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint24_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint25_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint26_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint27_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint28_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint29_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint30_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint31_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint32_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint33_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint34_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint35_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint36_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint37_linear_8295_70635' x1='-47.5' y1='8.99989' x2='332' y2='8.99989' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%2329B5E8' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%2329B5E8' stop-opacity='0'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E%0A\")}.sc-hero__inner\u003E.snowflake-flexible-column-container-items\u003Ediv:first-child{position:relative;z-index:3}.sc-hero__inner\u003E.snowflake-flexible-column-container-items\u003Ediv:last-child{position:absolute;height:100%;width:100%;top:0;left:-24px}.sc-hero__inner\u003E.snowflake-flexible-column-container-items\u003Ediv:last-child::before{content:\"\";display:block;z-index:1;position:absolute;top:-64px;left:0;width:150%;height:calc(100% + 160px);background-color:rgb(32 44 53 / .9)}.sc-body__content .heading-3-v2,.sc-hero__headline .heading-1-v2{text-transform:none}.sc-body__content span.snowflake-image-caption{display:block!important;font-style:italic}.sc-body__content .snowflake-text p+ul{margin-top:24px!important;padding-left:16px!important}.white-blue-text-color .snowflake-title-v2.solution-center-hero__certification .snowflake-typographyv2\u003Espan.snowflake-title-v2-line{color:#e9eaeb!important;font-size:16px}.white-blue-text-color .snowflake-title-v2.solution-center-hero__certification.is-large .snowflake-typographyv2\u003Espan.snowflake-title-v2-line{color:#fff!important;font-size:18px}.solution-center-hero__certification\u003E.snowflake-title-v2-line\u003Espan:first-child{display:flex;justify-content:flex-start;align-items:center;gap:8px}.solution-center-hero__certification\u003E.snowflake-title-v2-line\u003Espan:first-child::before{content:\"\";display:inline-block;width:16px;height:16px;background-image:url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 0C3.58146 0 0 3.58146 0 8C0 12.4185 3.58146 16 8 16C12.4185 16 16 12.4185 16 8C16 3.58146 12.4185 0 8 0ZM12.7184 5.91984L7.33471 11.3026C7.31293 11.3244 7.31293 11.3454 7.29198 11.3454L7.20653 11.4308C6.94933 11.688 6.54132 11.7525 6.21962 11.6235C6.11238 11.5808 6.00514 11.5163 5.9197 11.4308L5.83425 11.3454C5.83425 11.3454 5.83425 11.3236 5.81246 11.3236L3.28149 8.79347C2.93799 8.44997 2.93799 7.87107 3.28149 7.50664L3.36694 7.42119C3.71044 7.07769 4.28934 7.07769 4.65377 7.42119L6.58401 9.35143L11.3877 4.5477C11.7312 4.2042 12.3101 4.2042 12.6746 4.5477L12.76 4.63315C13.0826 4.99758 13.0828 5.55541 12.7184 5.91984Z' fill='%230E8A16'/%3E%3C/svg%3E%0A\");background-size:contain;background-repeat:no-repeat;background-color:#fff;border-radius:100%}.sc-hero__byline{padding-top:8px}.sc-hero__byline p{color:#e2e2e2;margin-top:0!important}.sc-hero pre[class*=language-]{overflow:visible}.snowflake-code-snippet,.snowflake-code-snippet code,.snowflake-code-snippet pre{font-size:16px}.sc-hero__code-snippet:not(pre)\u003Ecode[class*=language-],.sc-hero__code-snippet pre[class*=language-]{background:0 0}.sc-hero__code-snippet{opacity:.8;background-color:transparent!important;position:absolute;top:0;right:0;width:100%;animation:240s linear 1s forwards slow-scroll}.sc-hero__button-container .snowflake-flexible-column-container-items{padding:0 0 24px;margin-top:-8px;margin-left:24px}.sc-sidebar__partner-logo{width:100%;max-width:140px;margin-top:8px}.sc-sidebar__partner-logo .cmp-image__image{border-radius:0}.sc-tag-cluster.snowflake-text ul{list-style-type:none;padding:0;display:flex;flex-wrap:wrap;gap:8px;margin:0}.sc-tag-cluster.snowflake-text li{color:#373f41;border-radius:4px;display:inline-block;padding:6px;text-transform:uppercase;letter-spacing:1px;font-size:12px!important;line-height:12px!important;margin:0!important;background-color:#f3f3f3}.sc-body .share-icon svg{height:24px;cursor:pointer}.sc-body .share-icon svg:hover path{fill:var(--ui-02)}.sc-overview__webinar-promo-banner{align-items:center;border:1px solid #ccc;padding:var(--spacing-02)}.sc-overview__webinar-promo-banner .snowflake-content-chip-image{max-width:32px;margin-right:var(--spacing-02);line-height:0}.sc-overview__webinar-promo-banner .snowflake-content-chip-image__image,.summit-speaker-card .snowflake-card-v2-advanced-image__image{aspect-ratio:1}.sc-overview__webinar-promo-banner .snowflake-content-chip-content .heading-5-v2{font-size:14px;font-family:Lato,sans-serif}.sc-overview__webinar-promo-banner .snowflake-content-chip-content .snowflake-title-v2-line:not(:first-child){font-weight:400}.sc-overview__webinar-promo-banner .snowflake-content-chip-button .snowflake-button-container{font-size:14px!important}.diagram-group__button{position:absolute;bottom:24px;right:24px;background-color:#212c35!important}.section--mountains-bottom,.summit-hp-hero{position:relative}.sc-cert-banner{background-color:#212d35;border-radius:8px;padding:24px;overflow:hidden}.sc-cert-banner\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;flex-direction:row;align-items:center}:root{--text-secondary:#706f6f;--summit-bg-ltblue:#eaf8fd;--summit-bg-blue:#249edc;--summit-border:#d2d1d4;--summit-border-radius:8px;--summit-card-padding:32px;--summit-card-padding-sm:28px}.section--mountains-bottom::after,.section--mountains-bottom::before{content:\"\";display:block;position:absolute;bottom:-1px;max-width:400px;background-size:100% auto;height:100%;width:30%;line-height:0;background-repeat:no-repeat}.button-group\u003E.container\u003E.cmp-container\u003E.aem-container{justify-content:center;align-items:center}.button-group\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:auto!important;margin:0 8px!important}.button-group .snowflake-button-container{font-family:Texta,sans-serif}.section--summit-bg-ltblue{background-color:var(--summit-bg-ltblue)}.section--summit-bg-blue,.summit-hero-secondary{background-color:var(--summit-bg-blue)}.section--mountains-bottom::before{left:0;background-image:url(\"data:image/svg+xml,%3Csvg width='402' height='309' viewBox='0 0 402 309' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M401.523 308.761H0V0L181.63 182.431L228.479 135.531L401.523 308.761Z' fill='%23249EDC'/%3E%3C/svg%3E%0A\");background-position:bottom left}.section--mountains-bottom::after{right:0;background-image:url(\"data:image/svg+xml,%3Csvg width='402' height='309' viewBox='0 0 402 309' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 308.761H401.523V0L219.893 182.431L173.044 135.531L0 308.761Z' fill='%23249EDC'/%3E%3C/svg%3E%0A\");background-position:bottom right}.summit-hp-hero{overflow:hidden}.summit-hero__bg-video{position:absolute;top:50%;left:50%;width:120%;height:100%;opacity:.3;transform:translate(-50%,-50%)}.summit-hero__bg-svg,.summit-prefooter__bg-image,.summit-secondary-hero__bg-image{position:absolute;bottom:0;left:0;width:100%}.summit-hp-promo-banner__headline .heading-4-v2{font-weight:900}.summit-hero-secondary .hero-lottie__left{position:absolute;bottom:0;left:0;width:30%;line-height:0}.summit-timeline__card::after,.summit-timeline__card::before{bottom:0;left:50%;position:absolute;display:block;background-color:var(--ui-01);content:\"\"}.summit-hero-secondary .snowflake-text p{font-size:24px!important;line-height:32px!important;max-width:720px;margin:0 auto}.summit-stat-container\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;justify-content:center}.summit-stat-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:auto!important;max-width:25%}.summit-stat-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:not(:last-child){border-right:1px solid #fff}.summit-timeline__card{border:1px solid var(--summit-border);border-radius:var(--summit-border-radius);padding:var(--summit-card-padding);position:relative;background-color:#fff}.summit-timeline__card::before{width:20px;height:20px;border-radius:100%;transform:translate(-50%,50%)}.summit-timeline__card::after{width:3px;height:50px;transform:translate(-50%,100%)}.summit-timeline-card__icon{width:48px;height:48px}.summit-timeline-card__headline .heading-3-v2{font-size:32px}.faq-group{border:1px solid var(--ui-12);border-radius:4px;background-color:#fff}.faq-group__question{padding:24px}.faq-group__question:hover{color:var(--ui-01);cursor:pointer}.faq-group__question .heading-4-v2,.faq-group__question .heading-5-v2{position:relative;padding-right:64px}.faq-group__question .heading-4-v2::after,.faq-group__question .heading-5-v2::after{content:\"\";display:block;width:32px;height:32px;background-image:url(\"data:image/svg+xml,%3Csvg width='29' height='16' viewBox='0 0 29 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M14.16 14.6807C14.2537 14.7957 14.3719 14.8884 14.506 14.952C14.64 15.0157 14.7866 15.0487 14.935 15.0487C15.0834 15.0487 15.2299 15.0157 15.3639 14.952C15.498 14.8884 15.6162 14.7957 15.71 14.6807V14.6807L28.51 2.00068C29.07 1.43068 29.07 .92068 28.51 .44068C27.95 -.0393204 27.43 -.11932 26.96 .44068L14.94 12.0007L2.99996 .45068C2.90725 .322624 2.7855 .218374 2.6447 .146483C2.50389 .0745926 2.34805 .0371094 2.18996 .0371094C2.03187 .0371094 1.87603 .0745926 1.73522 .146483C1.59442 .218374 1.47267 .322624 1.37996 .45068C.819961 .93068 .819961 1.45068 1.37996 2.01068L14.16 14.6807Z' fill='black'/%3E%3C/svg%3E%0A\");background-size:80% auto;background-repeat:no-repeat;background-position:center;position:absolute;top:-2px;right:0;transition:.3s 150ms}.faq-group__question .heading-5-v2::after{top:-4px}.faq-group__answer{max-height:0;overflow:hidden;width:95%;padding:0 24px;transition:.5s}.faq-group__answer\u003Espan{display:block;padding-bottom:24px}.is-open .faq-group__answer{max-height:600px;transition:1s}.is-open .faq-group__question .heading-4-v2::after,.is-open .faq-group__question .heading-5-v2::after{transform:rotate(180deg);transition:.3s}.summit-agenda{box-shadow:2px 4px 10px 0 rgb(156 156 156 / .52);border-radius:8px;background-color:#fff;max-width:980px;margin-left:auto;margin-right:auto;padding:40px;width:90%}.agenda-item{border-radius:8px;background-color:#d4f0fa;padding:16px;border-left:4px solid var(--ui-01);position:relative}.summit-pricing-block__tile.is-past,.summit-pricing-block__tile.is-upcoming{pointer-events:none;border-color:#d2d1d4}p.agenda-item__time{width:25%;font-family:Texta!important;font-size:32px!important;font-weight:900!important;text-transform:uppercase!important;max-width:140px}@media screen and (max-width:991px){#partnerResources .section--resource-hub .snowflake-button-link .snowflake-button-container{font-size:14px!important;line-height:20px!important;margin-top:4px}#industryPartnerSlider\u003E.snowflake-flexible-column-container-items{display:flex;flex-direction:column}#industryPartnerSlider\u003E.snowflake-flexible-column-container-items\u003Ediv{width:100%}.sc-cert-banner__left{text-align:center}.sc-cert-banner__left .solution-center-hero__certification .snowflake-title-v2-line{justify-content:center}.summit-hero__bg-video{width:200%}.summit-leadership-grid .snowflake-flexible-column-container-items{grid-template-columns:repeat(2,1fr)}.summit-stat-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:50%!important;max-width:50%!important}.summit-stat-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:not(:last-child){border-right:none!important}.summit-agenda{padding:24px}p.agenda-item__time{font-size:24px!important;width:auto;white-space:nowrap;padding-right:24px}}.agenda-item\u003Espan{display:flex;align-items:center}.summit-add-on-block,.summit-pricing-block{border:1px solid #d2d1d4;border-radius:8px;overflow:hidden;box-shadow:2px 4px 10px 0 rgb(156 156 156 / .52);background-color:#fff}.summit-add-on-block__content,.summit-pricing-block__content{padding:0 20px 20px}.summit-pricing-block__tile{padding:24px 20px;border-radius:4px;background:#fff;border:1px solid var(--ui-01);position:relative;transition:background-color .3s}.summit-pricing-block__tile:hover{background-color:var(--ui-01);transition:background-color .3s}.summit-pricing-block__tile.is-past{background-color:#d4f0fa}.summit-pricing-block__tile:hover .black-blue-text-color .snowflake-title-v2-line{color:#fff!important;transition:color .3s}.partner-card__logo-grid\u003E.container\u003E.cmp-container\u003E.aem-container::after,.partner-card__logo-grid\u003E.container\u003E.cmp-container\u003E.aem-container::before,.summit-add-on-block__content\u003E.container\u003E.cmp-container\u003E.aem-container::after,.summit-add-on-block__content\u003E.container\u003E.cmp-container\u003E.aem-container::before,.summit-pricing-block__tile.is-past .snowflake-content-chip-button,.summit-pricing-block__tile.is-upcoming .snowflake-content-chip-button,.summit-speaker-card .snowflake-card-v2-advanced-tag-indicator{display:none}.summit-pricing-block__tile.is-past .black-blue-text-color .snowflake-title-v2-line{color:#7cc7eb!important}.summit-pricing-block__tile.is-upcoming .black-blue-text-color .snowflake-title-v2-line{color:#8c8c8c!important}.summit-pricing-block__aside{background-color:#d4f0fa;border:1px solid #d2d1d4;border-radius:8px;padding:24px;width:100%}.summit-pricing-block__aside li::marker{color:var(--ui-01)}.summit-pricing-block__aside-headline .heading-5-v2{font-weight:900;margin-bottom:12px}.summit-pricing-block__header{background:#000;padding:24px 40px}.summit-pricing-block__header .heading-4-v2{font-weight:900;letter-spacing:.5px}.bwwidth100,.snowflake-mega-nav-dropdown-footer-content,.summit-pricing-block__tile .black-blue-text-color{width:100%}.summit-pricing-block__tile .heading-5-v2{position:static}.summit-pricing-block__tile .heading-5-v2 span.snowflake-title-v2-line:first-child{text-transform:uppercase;font-weight:900!important;letter-spacing:.25px;font-size:24px!important}.summit-pricing-block__tile .heading-5-v2 span.snowflake-title-v2-line:nth-child(2){margin-top:8px;font-family:Lato,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:16px}.summit-pricing-block__tile .heading-5-v2 span.snowflake-title-v2-line:last-child{font-weight:900!important;font-size:40px!important}.snowflake-mega-nav-nav-item\u003Ea:hover .snowflake-mega-nav-nav-item-title-wrapper\u003E.snowflake-mega-nav-nav-item-title,.summit-pricing-block__tile:not(.is-upcoming):not(.is-past) .heading-5-v2 span.snowflake-title-v2-line:last-child{color:var(--ui-01)!important}.summit-pricing-block__tile:hover:not(.is-upcoming):not(.is-past) .heading-5-v2 span.snowflake-title-v2-line:last-child{color:#fff!important}.summit-pricing-block__tile.is-past .heading-5-v2 span.snowflake-title-v2-line:last-child{text-decoration:line-through}.summit-pricing-block__tile .snowflake-content-chip-button{margin-top:0;white-space:nowrap;display:none}.snowflake-card-v2-advanced.no-link{pointer-events:none!important}.snowpro-card{border:1px solid var(--summit-border);border-radius:var(--summit-border-radius);padding:var(--summit-card-padding-sm);display:flex;height:100%}.snowpro-card__headline{margin:24px 0 12px}.snowpro-card__pricing{margin-top:48px}.snowpro-card .snowflake-text .snowpro-card__price{color:var(--ui-01);font-weight:900;font-size:40px!important;font-family:Texta,sans-serif}.summit-stat-container\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;flex-direction:row;flex-wrap:wrap}.summit-stat-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:not(:last-child){border-right:1px solid var(--summit-border)}.summit-stat-card{padding:0 40px}.summit-stat .heading-2-v2 .snowflake-title-v2-line:first-child{font-size:64px;line-height:52px;margin-bottom:8px}.summit-stat .heading-2-v2 .snowflake-title-v2-line:last-child{font-size:32px;line-height:30px;margin-bottom:16px}.summit-speaker-card .snowflake-card-v2-advanced-title{margin-bottom:var(--spacing-01)}.summit-add-on-card{padding:24px;border:1px solid #d2d1d4;border-radius:8px}.summit-add-on__subhead{padding-left:40px;padding-right:40px}.partner-card__logo-grid,.partner-card__logo-single{padding:40px}.partner-card__logo-grid .snowflake-image-container .cmp-image__image,.partner-card__logo-single .snowflake-image-container .cmp-image__image{border-radius:0;max-width:240px;margin:0 auto}.partner-card\u003E.container,.partner-card\u003E.container\u003E.aem-container,.partner-card\u003E.container\u003E.cmp-container{height:100%}.summit-add-on-block__content\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;flex-direction:row;gap:24px;align-items:stretch}.partner-card__logo-grid\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:40px 24px;justify-content:center;align-items:center}.partner-card__logo-grid\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(33.3333% - 24px);margin:0!important}.partner-card{border-radius:8px;border:1px solid #d2d1d4;overflow:hidden;height:100%;background-color:#fff}.partner-card__header{padding:16px 24px;border-bottom:1px solid #d2d1d4}.partner-card__header.is-purple{background-color:#7d44cf}.partner-card__header h4{display:flex;flex-direction:row!important;align-items:center;gap:12px}.partner-card__header h4::before{vertical-align:middle;content:\"\";display:inline-block;width:20px;height:20px;background-size:contain;background-repeat:no-repeat;background-image:url(\"data:image/svg+xml,%3Csvg width='21' height='23' viewBox='0 0 21 23' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M20.0375 12.8374C20.1644 12.439 20.2172 12.0289 20.2077 11.6237C20.193 11.3305 20.1548 11.0373 20.0712 10.7441C19.8196 9.83306 19.223 9.01989 18.3294 8.50724L5.61817 1.2017C3.82388 .173815 1.53618 .784335 .506483 2.56804C-.533615 4.34915 .0797871 6.62351 1.87408 7.65398L8.97715 11.7427L1.87408 15.8201C.0797871 16.8527 -.531016 19.1271 .506483 20.9156C1.53618 22.6941 3.82388 23.302 5.61817 22.2746L18.3294 14.9643C19.1871 14.4728 19.7693 13.7027 20.0375 12.8374Z' fill='black'/%3E%3C/svg%3E%0A\")}.partner-card__header.is-purple h4::before{background-image:url(\"data:image/svg+xml,%3Csvg width='21' height='23' viewBox='0 0 21 23' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M20.0375 12.8374C20.1644 12.439 20.2172 12.0289 20.2077 11.6237C20.193 11.3305 20.1548 11.0373 20.0712 10.7441C19.8196 9.83306 19.223 9.01989 18.3294 8.50724L5.61817 1.2017C3.82388 .173815 1.53618 .784335 .506483 2.56804C-.533615 4.34915 .0797871 6.62351 1.87408 7.65398L8.97715 11.7427L1.87408 15.8201C.0797871 16.8527 -.531016 19.1271 .506483 20.9156C1.53618 22.6941 3.82388 23.302 5.61817 22.2746L18.3294 14.9643C19.1871 14.4728 19.7693 13.7027 20.0375 12.8374Z' fill='white'/%3E%3C/svg%3E%0A\")}.sf-blue-mountains{background-size:90% auto;background-repeat:no-repeat;background-position:center bottom;background-image:url(\"data:image/svg+xml,%3Csvg width='1361' height='410' viewBox='0 0 1361 410' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1360.25 410L1065.53 114.309L976.256 203.875L773.049 0L364.393 410H1360.25Z' fill='%233AA8DF'/%3E%3Cpath d='M274.778 410L137.467 272.238L.15625 410H274.778Z' fill='%233AA8DF'/%3E%3C/svg%3E%0A\")}.bwalignr,.main-pr-body .bwalignr{text-align:right}.bwblockalignl{margin-left:0;margin-right:auto}.bwcellpmargin{margin-top:0;margin-bottom:0}.bwlistdisc{list-style-type:disc}.bwpadb3{padding-bottom:4px}.bwpadb4{padding-bottom:5px}.bwpadl0{padding-left:0}.bwpadl3{padding-left:15px}.bwpadl6{padding-left:30px}.bwpadl9{padding-left:45px}.bwpadl12{padding-left:60px}.bwpadr0{padding-right:0}.bwtablemarginb{margin-bottom:10px}.bwvertalignb{vertical-align:bottom}.bwvertalignt{vertical-align:top}.bwsinglebottom{border-bottom:1pt solid #000}.bwdoublebottom{border-bottom:2.25pt double #000}.bwwidth1{width:1%}.bwwidth2{width:2%}.bwwidth6{width:6%}.bwwidth7{width:7%}.bwwidth8{width:8%}.bwwidth10{width:10%}.bwwidth12{width:12%}.bwwidth32{width:32%}.bwwidth44{width:44%}.bwwidth72{width:72%}.bwwidth97{width:97%}.main-pr-body{font-size:18px;line-height:26px}.main-pr-body img{display:block;width:100%;height:auto!important;border-radius:var(--small-border-radius)}.main-pr-body table{width:100%;display:block}.main-pr-body tbody{background-color:#f7f7f7}.main-pr-body .bwsinglebottom{border-bottom:1pt solid #000!important}.main-pr-body td.bwwidth44{padding-right:40px}.main-pr-body .bw-release-story{font-family:Lato,sans-serif}.main-pr-body .bw-release-story sup,.snowflake-mega-nav-dropdown-header-content-right a{white-space:nowrap}.main-pr-body .bw-release-story\u003E*,.main-pr-body\u003Espan\u003E*{margin-bottom:2rem!important}.snowflake-text.main-pr-body tbody,.snowflake-text.main-pr-body tbody p{font-size:14px!important;line-height:20px!important;width:100%;display:block}.press-body .snowflake-flexible-column-container-items{gap:var(--spacing-08)}.about-snowflake{border:1px solid #ccc;background-color:var(--ui-background-05);padding:24px;border-radius:8px;margin-top:0}.about-snowflake__logo{max-width:140px;margin-top:16px}.hero--press .snowflake-hero-system-inner{max-width:1408px;margin:0 auto!important}#arcticNavItem{flex-direction:column}#arcticNavItem::before{content:\"Featured Open Source Technologies\";display:block;margin-top:48px;margin-bottom:24px;font-size:16px!important;line-height:16px!important;font-weight:800!important;text-transform:uppercase}@media screen and (min-width:768px){.sc-hero__inner\u003E.snowflake-flexible-column-container-items\u003Ediv:last-child{position:relative;height:100%;top:auto;left:auto;width:auto}.sc-hero__inner\u003E.snowflake-flexible-column-container-items\u003Ediv:last-child::before{background:linear-gradient(180deg,#202c35 -7.5%,#fff0 51.25%,#202c35 107.69%)}.sc-hero__byline\u003Espan{display:flex;flex-wrap:wrap}.sc-hero__byline p:not(:last-child)::after{content:\"|\";margin:0 12px;opacity:.5}.sc-hero__button-container .snowflake-flexible-column-container-items{position:absolute;bottom:0;padding:0;margin:0 24px 0 0}.sc-hero__button-container .hero-watch-the-demo{padding:12px 16px!important;float:right;margin-bottom:48px;background-color:rgb(35 45 54 / .8)}.summit-overview-stat{padding:0 40px}.summit-timeline{border-bottom:3px solid var(--ui-01);margin-bottom:64px}.summit-add-on-block__content,.summit-pricing-block__content{padding:0 40px 40px}#arcticNavItem::before{font-size:12px!important;margin-bottom:8px;margin-top:16px}.snowflake-mega-nav-nav-item-title-wrapper\u003E.snowflake-mega-nav-nav-item-title{line-height:20px!important}.snowflake-card .heading-2.snowflake-title-line{font-size:24px!important;line-height:28px!important}}@media screen and (min-width:992px){.hp-hero__eyebrow a{gap:12px;margin-left:0;margin-right:0}.hp-hero__eyebrow a::after{content:\"\";background-image:url(\"data:image/svg+xml,%3Csvg width='6' height='11' viewBox='0 0 6 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M5.49134 5.79438C5.53447 5.75922 5.56923 5.71489 5.5931 5.66463C5.61697 5.61436 5.62935 5.55941 5.62935 5.50376C5.62935 5.44811 5.61697 5.39316 5.5931 5.34289C5.56923 5.29263 5.53447 5.2483 5.49134 5.21314L.736339 .413136C.522589 .203135 .331339 .203135 .151339 .413136C-.0286612 .623135 -.0586612 .818135 .151339 .994386L4.48634 5.50188L.155089 9.97938C.107068 10.0142 .0679743 10.0598 .0410153 10.1126C.0140562 10.1654 0 10.2238 0 10.2831C0 10.3424 .0140562 10.4009 .0410153 10.4537C.0679743 10.5065 .107068 10.5521 .155089 10.5869C.335089 10.7969 .530089 10.7969 .740089 10.5869L5.49134 5.79438Z' fill='black'/%3E%3C/svg%3E%0A\");display:inline-block;width:12px;height:12px;background-repeat:no-repeat;background-size:auto 100%;background-position:left center}.promo-banner--homepage{padding-top:32px}.homepage-banner-offset-container::after{height:50%}#storyHighlights{padding:2rem}.body-display-v2.snowflake-quote-item-quote-text{line-height:28px!important}.snowflake-hero-system-headline .heading-1-v2{line-height:48px;font-size:54px!important}.sc-overview__webinar-promo-banner .snowflake-content-chip-content{flex-direction:row;justify-content:space-between;align-items:center;width:100%}.sc-overview__webinar-promo-banner .snowflake-content-chip-content .heading-5-v2{flex-direction:row}.sc-overview__webinar-promo-banner .snowflake-content-chip-content .snowflake-title-v2-line:not(:first-child)::before{content:\"|\";margin:0 6px}.sc-cert-banner{padding:40px}.sc-cert-banner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{margin:0!important;width:50%}.sc-cert-banner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:first-child{flex-grow:1;padding-right:24px}.sc-cert-banner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:last-child{max-width:240px}.summit-pricing-block__content\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:last-child{width:70%;padding-left:40px}.summit-pricing-block__content\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:first-child{width:30%}.summit-add-on-block__content\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(33.3333% - 24px);margin:0!important;display:flex}.summit-pricing-block__tile .snowflake-content-chip-content{display:flex;flex-direction:row;align-items:center;width:calc(100% - 200px)}.summit-pricing-block__tile .heading-5-v2 span.snowflake-title-v2-line:last-child{position:absolute;top:50%;transform:translate(0,-50%);right:40px}.press-body\u003E.snowflake-flexible-column-container-items\u003Ediv:last-child{position:sticky;top:120px}.snowflake-mega-nav-navigation-title:hover{color:var(--ui-01)}}@media screen and (min-width:1024px){.about-snowflake{padding:28px}.about-snowflake__logo{max-width:none;padding:0 0 0 48px;margin-bottom:0}.hero--press .snowflake-hero-system-layout-70-30 .snowflake-hero-system-content-container{width:85%}.snowflake-hero-system{padding-bottom:var(--spacing-04);padding-top:var(--spacing-07)}.hero--press .display-2-v2{font-size:64px;line-height:56px}.about-snowflake\u003E.container\u003E.cmp-container\u003E.aem-container{flex-direction:row;flex-wrap:nowrap;align-items:center}.about-snowflake\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:last-child{max-width:280px}.about-snowflake\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:first-child{flex-grow:1;margin-bottom:0!important}#polarisNavItem{margin-top:40px}.snowflake-mega-nav-nav-item-description{line-height:18px!important}.snowflake-mega-nav-column-items{gap:var(--spacing-01);grid-gap:var(--spacing-01)}.snowflake-mega-nav-navigation-title{text-transform:none}}div[id*=blueIcon] .snowflake-mega-nav-nav-item-icon__inner{background:var(--ui-01);padding:8px}div[id*=blueIcon]:hover .snowflake-mega-nav-nav-item-icon__inner{background:var(--ui-01)!important}.snowflake-mega-nav-nav-item-icon__inner{border-radius:4px;background:var(--ui-background-05);padding:6px}.snowflake-mega-nav-nav-item:hover .snowflake-mega-nav-nav-item-icon__inner{background:#fff!important}.snowflake-mega-nav-nav-item-icon.snowflake-image-container{height:40px;width:40px}.snowflake-mega-nav-dropdown-footer-links\u003E.snowflake-button-link\u003E.snowflake-button-container{font-size:16px!important;font-family:Texta!important;font-weight:800!important}.snowflake-mega-nav-dropdown-footer-icon.snowflake-image-container{margin-right:8px;width:40px!important;height:40px!important}#viewAllCapabilities a:hover{background:0 0!important}#platformFooter .snowflake-title-v2 .snowflake-title-v2-line:last-child{font-family:Lato;font-size:14px;font-weight:500}#platformFooter .snowflake-mega-nav-dropdown-footer-links{flex-grow:1;justify-content:flex-end;align-items:center}#platformFooter .snowflake-mega-nav-dropdown-footer-content{flex-direction:row}#offset,#open-source{flex-direction:column;border-top:1px solid #ccc}#offset::before,#open-source::before{content:\" \";display:block;width:100%;font-weight:800!important;font-size:12px!important;line-height:14px;text-transform:uppercase;white-space:nowrap;margin-top:16px;margin-bottom:8px}#open-source::before{content:\"Open Source Technologies\"}.snowflake-mega-nav-dropdown-menu-close-button{margin:var(--spacing-04) 0 var(--spacing-03)}.snowflake-mega-nav-column{gap:var(--spacing-02)!important}.snowflake-mega-nav-nav-item\u003Ea{width:100%;margin-left:-8px;padding:8px;border-radius:4px}.snowflake-mega-nav-nav-item\u003Ea:hover{background-color:var(--ui-background-05)}.snowflake-mega-nav-nav-item-description{margin-top:2px;display:block}#promobanner_overflowBottomDarkBlue::before{content:'';display:block;position:absolute;bottom:0;left:0;width:100%;height:50%;background:#212d35}#promobanner_overflowTopDarkBlue::before{content:'';display:block;position:absolute;top:0;left:0;width:100%;height:50%;background:#212d35}.overview-card\u003Ediv{box-shadow:0 0 14px 0 rgba(0,0,0,.10);background-color:#fff;border-radius:16px;overflow:hidden}.overview-card-text{padding:40px}.overview-card-image img{border-radius:0 !important}.overview-card-text h3,.overview-card-text .heading-3-v2{font-size:18px;line-height:1.1;margin-top:0}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false},"mega_header":{"additionalClasses":"heap-nav-header","layout":"SIMPLE","id":"container-22b01d5fd5",":items":{"nav_mega":{"activeItem":"item_1719963657751_c_663444255","id":"tabs-2a740c3e92",":type":"snowflake-site/components/nav/nav-mega",":items":{"item_1719963657751_c_663444255":{"id":"nav-dropdown-menu-444a832fb2","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-bcea44108b",":items":{"nav_column":{"additionalClasses":"nav-platform-sidebar","numberOfSubColumns":"one-column","minWidth":"230","maxWidth":"350","layout":"SIMPLE","id":"container-2b31829516",":items":{"nav_item_copy_copy_2_793631646":{"id":"nav-item-54aab07dd6","additionalClasses":"nav-item__platform-parent is-platform","linkDescription":"Develop AI products, apps and more on a fully managed platform that securely connects businesses globally — across any type or scale of data.","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/platform/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"The Snowflake Platform"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-43c68381c1","additionalClasses":"nav-item nav-item--si is-si","linkDescription":"All your knowledge. One trusted enterprise agent.","flag":"NOW GA","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/snowflake-cowork/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake CoWork"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2_836345186":{"id":"nav-item-906ae6785d","additionalClasses":"blue-icon is-analytics","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/analytics/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Analytics"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2":{"id":"nav-item-df571522b7","additionalClasses":"blue-icon is-ai","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/ai/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"AI"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2_1314771042":{"id":"nav-item-50282cd8a5","additionalClasses":"blue-icon is-data-eng","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/data-engineering/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Data Engineering"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634":{"id":"nav-item-80bedc7176","additionalClasses":"blue-icon is-apps-collab","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/applications-and-collaboration/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Applications & Collaboration"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634_2013333117":{"id":"nav-item-faa53290f9","additionalClasses":"blue-icon is-transactions","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/transactions/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Transactions"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_copy_2_793631646","nav_item","nav_item_copy_copy_2_836345186","nav_item_copy_copy_2","nav_item_copy_copy_2_1314771042","nav_item_copy_144634","nav_item_copy_144634_2013333117"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy":{"additionalClasses":"meganav-platform-features","navColumnTitle":"Featured Capabilities","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-52999025b6",":items":{"nav_item_copy_212715":{"id":"nav-item-bf684f8076","additionalClasses":"is-cortex-code","linkDescription":"Snowflake-native AI coding agent ","flag":"New","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/snowflake-coco/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake CoCo"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-2433bf1e16","additionalClasses":"is-cortex-ai","linkDescription":"Instant access to industry-leading LLMs","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/cortex/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Cortex AI"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590635":{"id":"nav-item-c2295e88f6","additionalClasses":"is-marketplace","linkDescription":"Third-party data sources connected within minutes","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/marketplace/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Marketplace"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590":{"id":"nav-item-c9221d437e","additionalClasses":"is-snowpark","linkDescription":"Libraries and code execution environments that run Python and more","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/snowpark/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Snowpark"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590_983061516":{"id":"nav-item-0b45817f1d","additionalClasses":"is-streamlit","linkDescription":"Framework for transforming Python scripts into web apps","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/streamlit-in-snowflake/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Streamlit"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_212715","nav_item","nav_item_copy_660590635","nav_item_copy_660590","nav_item_copy_660590_983061516"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_692142673":{"navColumnTitle":" ","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-b3d7f0620e",":items":{"nav_item_copy_660590_1739526127":{"id":"nav-item-3fb1de9e86","additionalClasses":"is-postgres","linkDescription":"Fully compatible open source Postgres running on Snowflake","flag":"Now GA","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/postgres/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Postgres"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565":{"id":"nav-item-78d7f197c9","additionalClasses":"is-dcr","linkDescription":"Streamlined model development and MLOps from a centralized UI","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/end-to-end-ml-workflows/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake ML"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_212715":{"id":"nav-item-051fd7ce36","additionalClasses":"is-openflow","linkDescription":"Effortless data movement for integrations","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/openflow/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Openflow"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590":{"id":"nav-item-8d2ba2586f","additionalClasses":"is-notebooks","linkDescription":"Interactive dev environment for data and AI teams","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/notebooks/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Notebooks"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_258535199":{"id":"nav-item-7691f9fa16","propertiesId":"workload-nav-1","additionalClasses":"is-native-apps","linkDescription":"End-to-end, Snowflake-native app creation and distribution","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/native-apps/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Native Apps"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_660590_1739526127","nav_item_copy_185565","nav_item_copy_212715","nav_item_copy_660590","nav_item_258535199"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_782221091":{"navColumnTitle":" ","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-0a58046e36",":items":{"nav_item_copy":{"id":"nav-item-a1673054f0","additionalClasses":"is-light-gray-icon is-horizon-catalog","linkDescription":"Universal AI catalog","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/horizon/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Horizon Catalog"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590_1293798742":{"id":"nav-item-7b1e324daf","additionalClasses":"is-snowflake-ml","linkDescription":"Governed context layer that keeps AI, BI and data apps working from one truth","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/horizon-context/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Horizon Context"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_511717659_c":{"id":"nav-item-7a241cdee4","additionalClasses":"is-unistore","linkDescription":"Unify transactional and analytical workloads in Snowflake for enhanced simplicity","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/unistore/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Unistore"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_511717659_c_1443811525":{"id":"nav-item-065cb90616","additionalClasses":"is-observe","linkDescription":"AI-powered observability for faster production troubleshooting","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/observe/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Observe"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_511717659_c_1006104884":{"id":"nav-item-2cbb83c86e","additionalClasses":"is-observe","linkDescription":"Use any engine on a single governed data copy","flag":"Now GA","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/use-cases/interoperable-lakehouse/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Interoperable Lakehouse"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy","nav_item_copy_660590_1293798742","nav_item_511717659_c","nav_item_511717659_c_1443811525","nav_item_511717659_c_1006104884"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column","nav_column_copy_copy","nav_column_692142673","nav_column_782221091"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Product"},"nav_dropdown_menu_2":{"id":"nav-dropdown-menu-763fd6564a","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-2f439eb36c",":items":{"nav_column":{"navColumnTitle":"INDUSTRIES","numberOfSubColumns":"one-column","minWidth":"280","layout":"SIMPLE","id":"container-c37e87c374",":items":{"nav_item_copy_361384_2056203141":{"id":"nav-item-9b1225e029","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"All Industries"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-e41d843fe7","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/advertising-media-entertainment/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Advertising, Media & Entertainment"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-262ef3d847","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/financial-services/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Financial Services"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-a382f5080b","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/healthcare-and-life-sciences/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Healthcare & Life Sciences"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1533429516":{"id":"nav-item-f7c2ed2da3","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/manufacturing/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Manufacturing"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1444458226":{"id":"nav-item-adfadb21ad","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/public-sector/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Public Sector"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1149488919":{"id":"nav-item-967cb281c9","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/retail-consumer-goods/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Retail & Consumer Goods"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_57417040":{"id":"nav-item-0d017adddb","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/technology/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Technology"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_361384674":{"id":"nav-item-fd0f140fe7","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/telecom/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Telecom"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_361384":{"id":"nav-item-6afd106d0f","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/travel-hospitality/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Travel & Hospitality"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_361384_2056203141","nav_item","nav_item_copy","nav_item_copy_1970515619","nav_item_copy_1533429516","nav_item_copy_1444458226","nav_item_copy_1149488919","nav_item_copy_57417040","nav_item_copy_361384674","nav_item_copy_361384"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small",":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy":{"navColumnTitle":"DEPARTMENTS","numberOfSubColumns":"one-column","minWidth":"160","layout":"SIMPLE","id":"container-e8b0c76fa3",":items":{"nav_item":{"id":"nav-item-3f65d61f17","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/solutions/departments/finance/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Finance"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-5ad7ba68f1","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/solutions/departments/information-technology/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"IT"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-41f82c096d","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/solutions/departments/marketing/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Marketing"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_1970515619"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_833417450":{"navColumnTitle":"Enablement Solutions","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-ac84a92dab",":items":{"nav_item_copy_107772":{"id":"nav-item-f973ee8e33","linkDescription":"Confident migration to a unified platform","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/migrate-to-the-cloud/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Migrate to the AI Data Cloud"},"icon":{"id":"icon","alt":"Cloud icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_833417450/nav_item_copy_107772/icon.coreimg.svg/1723828484100/nav-icon-cloud.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy":{"id":"nav-item-b01c181403","linkDescription":"Snowflake experts to help you accelerate and achieve business goals","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/services-delivery/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Services Delivery"},"icon":{"id":"icon","alt":"Migrate icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_833417450/nav_item_copy_copy/icon.coreimg.svg/1768354429188/nav-icon--migrate.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_107772","nav_item_copy_copy"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy":{"navColumnTitle":"PARTNER SOLUTIONS","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-fb4508d489",":items":{"nav_item":{"id":"nav-item-036c95beb2","linkDescription":"Programs with product, solutions and cloud partners","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/partners/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake Partner Network"},"icon":{"id":"icon","alt":"Partner Network icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_copy_copy/nav_item/icon.coreimg.svg/1723828498700/nav-icon--partner-network.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-0a5c24c326","linkDescription":"Partners, apps and solutions for enhanced deployment","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/partners/all-partners/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Partner Finder"},"icon":{"id":"icon","alt":"Partner Finder icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_copy_copy/nav_item_copy/icon.coreimg.svg/1726173927645/nav-icon--partner-finder.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-46b8c054ee","linkDescription":"Live and virtual events","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/partners/event-partnership-opportunities/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Event Partnership Opportunities"},"icon":{"id":"icon","alt":"Calendar icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_copy_copy/nav_item_copy_1970515619/icon.coreimg.svg/1726173935655/nav-icon--events.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_1970515619"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column","nav_column_copy","nav_column_833417450","nav_column_copy_copy"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Solutions"},"item_1719963657751_c":{"id":"nav-dropdown-menu-6f6b991913","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-200d361be2",":items":{"nav_column":{"numberOfSubColumns":"one-column","minWidth":"230","maxWidth":"350","layout":"SIMPLE","id":"container-c734196338",":items":{"nav_item_copy_copy_2_793631646":{"id":"nav-item-c29fb9f7ed","additionalClasses":"nav-item__platform-parent-why-sf","linkDescription":"Collaborate locally and globally to reveal new insights, create previously unforeseen business opportunities, and identify your customers with seamless experiences.","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Why Snowflake"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_copy_2_793631646"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy":{"additionalClasses":"meganav-platform-features","numberOfSubColumns":"two-columns","maxWidth":"1200","layout":"SIMPLE","id":"container-9b01ce4455",":items":{"nav_item":{"id":"nav-item-17be9f7137","propertiesId":"testID","linkDescription":"Case studies and videos showcasing how global organizations use Snowflake","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/customers/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Customers"},"icon":{"id":"icon","alt":"Customer icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item/icon.coreimg.svg/1739839279367/nav-icon--partner-network.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_258535199":{"id":"nav-item-bef62d6651","propertiesId":"workload-nav-1","linkDescription":"Learn how to connect, share and integrate the data and apps on the AI Data Cloud","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/what-is-data-cloud/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"The AI Data Cloud Explained"},"icon":{"id":"icon","alt":"Cloud icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item_258535199/icon.coreimg.svg/1739840490955/nav-icon-cloud.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565":{"id":"nav-item-1249ff75a8","linkDescription":"Comprehensive security through built-in features, robust cloud infrastructure protection, and more","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/snowflake-security-hub/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Security Hub"},"icon":{"id":"icon","alt":"User with security lock icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item_copy_185565/icon.coreimg.svg/1758909528089/user-security-admins-ciso-icon.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-b5890ee3b5","additionalClasses":"is-light-gray-icon","linkDescription":"Maximize economic value through minimizing TCO and continuously optimizing price for performance","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/pricing-options/cost-and-performance-optimization/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Cost and Performance Optimization"},"icon":{"id":"icon","alt":"Cost Optimization icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item_copy/icon.coreimg.svg/1758909542267/nav-icon-cost-optimization-performance.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565_903555964":{"id":"nav-item-cc90b1de7e","linkDescription":"Startups building applications in the AI Data Cloud","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/startup-program/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake for Startups"},"icon":{"id":"icon","alt":"Launch","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item_copy_185565_903555964/icon.coreimg.svg/1758732224323/launch.svg","height":"64","width":"65",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_258535199","nav_item_copy_185565","nav_item_copy","nav_item_copy_185565_903555964"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column","nav_column_copy_copy"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Why Snowflake"},"item_1719961362824":{"id":"nav-dropdown-menu-0b6b1d908c","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-285859d68b",":items":{"nav_column_copy":{"navColumnTitle":"Connect","numberOfSubColumns":"one-column","minWidth":"124","layout":"SIMPLE","id":"container-4f12d69d16",":items":{"nav_item":{"id":"nav-item-0f1a1d0810","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Blog"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_180298689":{"id":"nav-item-cba75c807f","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/events/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Events"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_1639361946":{"id":"nav-item-a8a29569af","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/support/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Support"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_680912746":{"id":"nav-item-af61c69fd0","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/contact/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Contact us"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_180298689","nav_item_1639361946","nav_item_680912746"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_44600420__826130542":{"navColumnTitle":"Learn","numberOfSubColumns":"two-columns","layout":"SIMPLE","id":"container-705fec2442",":items":{"nav_item_copy":{"id":"nav-item-1ca55c8038","linkDescription":"Ebooks, videos, white papers and more","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/resources/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Resource Library"},"icon":{"id":"icon","alt":"Notebooks icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy/icon.coreimg.svg/1736877128196/nav-icon--notebooks.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-1b2dd1dc8d","linkDescription":"Overview of Snowflake's educational offerings","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/resources/learn/training/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Training"},"icon":{"id":"icon","alt":"Training icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item/icon.coreimg.svg/1722385094416/nav-icon--training.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634_1984107859":{"id":"nav-item-255fa0db01","linkDescription":"Expert-led discussions and demos across industries and use cases","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/webinars/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Webinars"},"icon":{"id":"icon","alt":"Webinars icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_144634_1984107859/icon.coreimg.svg/1759424691990/nav-icon--webinars.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1438098918":{"id":"nav-item-c999b8d325","linkDescription":"Snowflake's technical industry professional certifications","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/resources/learn/certifications/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Certifications"},"icon":{"id":"icon","alt":"Certification icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_1438098918/icon.coreimg.svg/1722382780833/nav-icon--cert.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_143809":{"id":"nav-item-e7efa267a5","linkDescription":"Weekly product demos showcasing key features and live Q&A ","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/webinars/demo/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Live Demos"},"icon":{"id":"icon","alt":"Live Demo icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_143809/icon.coreimg.svg/1759424359543/nav-icon--live-demo.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890638":{"id":"nav-item-240da1a50e","linkDescription":"Training courses for all levels, on-demand or instructor-led","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://learn.snowflake.com/en/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Snowflake University"},"icon":{"id":"icon","alt":"Education icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_333890638/icon.coreimg.svg/1722382769808/nav-icon--education.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_189945":{"id":"nav-item-21bfa37dca","linkDescription":"Instructor-led virtual workshops for exploring key Snowflake features","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/webinars/virtual-hands-on-lab/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Hands-On Labs"},"icon":{"id":"icon","alt":"Hands-on Labs icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_189945/icon.coreimg.svg/1759388182903/nav-icon--labs.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890":{"id":"nav-item-94509c5fd9","linkDescription":"Academic papers written by Snowflake researchers","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/resources/publications/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake Research Publications"},"icon":{"id":"icon","alt":"Copy","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_333890/icon.coreimg.svg/1756326371387/copy.svg","height":"64","width":"65",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890_930852828":{"id":"nav-item-5f1fe2343d","linkDescription":"Informative articles about AI and data topics","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/fundamentals/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Fundamentals"},"icon":{"id":"icon","alt":"Document with list","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_333890_930852828/icon.coreimg.svg/1756853637155/data-sheet.svg","height":"64","width":"65",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy","nav_item","nav_item_copy_144634_1984107859","nav_item_copy_1438098918","nav_item_copy_143809","nav_item_copy_333890638","nav_item_copy_189945","nav_item_copy_333890","nav_item_copy_333890_930852828"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column_copy","nav_column_44600420__826130542"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},"nav_promo_section":{"id":"nav-promo-section-94543ee333","experience_fragment_1":{"id":"experiencefragment-9e67d9e0a2","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/master1/jcr:content","configured":true,":items":{"root":{"columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-3cfd307119",":items":{"nav_promo_card":{"id":"nav-promo-card-dc7e6735d8","openInNewWindow":true,"layout":"horizontal","headline":"Dev Day Virtual - June 25","description":"Don’t just hear about AI — build it. Luminary talks and hands-on labs","linkTitle":"Learn more","linkUrl":"/en/dev-day/americas-virtual/","image":{"id":"image","alt":"dev day","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--de231e36-6645-4550-abd9-0f8de758ac66/web-dev-day-26-960x540-1x.png?preferwebp=true&quality=85","height":"540","width":"960",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","cq:metadata"],"classNames":"aem-xf",":type":"snowflake-site/components/experiencefragment"},"experience_fragment_2":{"id":"experiencefragment-89e76727f5","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/navigation-promo-card-2/jcr:content","configured":true,":items":{"root":{"columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-9cb53f016c",":items":{"nav_promo_card":{"id":"nav-promo-card-22604f870d","openInNewWindow":true,"layout":"horizontal","headline":"The ROI of Gen AI and Agents 2026","description":"Discover how 92% of early adopters are achieving positive ROI with gen AI.","linkTitle":"Learn More","linkUrl":"/en/lp/radical-roi-generative-ai/","image":{"id":"image","alt":"roi of gen ai and agents","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--0c15edae-1a97-4739-8b16-c7f3941a6d9e/web-roi-of-gen-ai-and-agents-2026-r02-960x540.png?preferwebp=true&quality=85","height":"540","width":"960",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","cq:metadata"],"classNames":"aem-xf",":type":"snowflake-site/components/experiencefragment"},"experience_fragment_3":{"id":"experiencefragment-965d76cb68","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/navigation-promo-card-3/jcr:content","configured":true,":items":{"root":{"columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-fbfb680226",":items":{"nav_promo_card":{"id":"nav-promo-card-3e283e6399","openInNewWindow":true,"layout":"horizontal","headline":"Startup 2026: AI Agents Mean Business","description":"Venture leaders weigh in on agentic AI. ","linkTitle":"Learn more","linkUrl":"/en/lp/building-startup-ai-age/","image":{"id":"image","alt":"alt","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--a320b404-dca1-4477-b033-c79708538657/web-startup-2026-960x540.png?preferwebp=true&quality=85","height":"540","width":"960",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","cq:metadata"],"classNames":"aem-xf",":type":"snowflake-site/components/experiencefragment"},":type":"snowflake-site/components/nav/nav-promo-section"},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Resources"},"item_1719963657751":{"id":"nav-dropdown-menu-f2a9a41915","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-0e31fa7b65",":items":{"nav_column_copy_copy":{"navColumnTitle":"Build","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-8f84538b80",":items":{"nav_item":{"id":"nav-item-fb5bf51ebf","propertiesId":"testID","linkDescription":"Overview of the dev resources you need to build and scale","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake for Developers"},"icon":{"id":"icon","alt":"Developers icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy/nav_item/icon.coreimg.svg/1731362494574/nav-icon--devs.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1855651246":{"id":"nav-item-0f8543b442","linkDescription":"Reference architectures, use cases and best practices","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/guides/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Developer Guides"},"icon":{"id":"icon","alt":"Solution Center icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy/nav_item_copy_1855651246/icon.coreimg.svg/1761677891705/nav-icon--solution-center.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-8656bb72f2","additionalClasses":"is-light-gray-icon","linkDescription":"The latest software versions, drivers, libraries and relevant docs","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/downloads/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Downloads"},"icon":{"id":"icon","alt":"Download icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy/nav_item_copy/icon.coreimg.svg/1731362660050/nav-icon-download.svg","height":"28","width":"28",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy_1855651246","nav_item_copy"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy_1367930678":{"navColumnTitle":"Learn","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-0bcc4a2644",":items":{"nav_item":{"id":"nav-item-08bccb7866","propertiesId":"testID","linkDescription":"Reference docs, guides, tutorials and announcements","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://docs.snowflake.com/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Documentation"},"icon":{"id":"icon","alt":"Docs icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1367930678/nav_item/icon.coreimg.svg/1731361950527/nav-icon--docs.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-0d71699be0","additionalClasses":"is-light-gray-icon","linkDescription":"Key projects Snowflake engineers maintain and support","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/open-source/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Open Source"},"icon":{"id":"icon","alt":"Open Source icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1367930678/nav_item_copy/icon.coreimg.svg/1731365437016/nav-icon-open-source.svg","height":"32","width":"32",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy":{"id":"nav-item-0685a8f0b7","additionalClasses":"is-light-gray-icon","linkDescription":"Online and in-person classes and workshops to upskill on Snowflake","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/northstar/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Builder Education"},"icon":{"id":"icon","alt":"Northstar logo","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1367930678/nav_item_copy_copy/icon.coreimg.svg/1731362475640/nav-icon--northstar.svg","height":"32","width":"32",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_copy"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy_1101894776":{"navColumnTitle":"Connect","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-cf42ce2141",":items":{"nav_item":{"id":"nav-item-e56a81bb13","propertiesId":"testID","linkDescription":"Snowflake’s technical leaders on what, why and how they build features","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/engineering-blog/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Engineering Blog"},"icon":{"id":"icon","alt":"Developers icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1101894776/nav_item/icon.coreimg.svg/1757101368571/nav-icon--developer-center.svg","height":"32","width":"32",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1855651246":{"id":"nav-item-70dbfb7032","linkDescription":"Tips, tricks and discussion with fellow Snowflake developers","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://community.snowflake.com/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Community"},"icon":{"id":"icon","alt":"Partner Network icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1101894776/nav_item_copy_1855651246/icon.coreimg.svg/1731362644348/nav-icon--partner-network.svg","height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy_1855651246"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column_copy_copy","nav_column_copy_copy_1367930678","nav_column_copy_copy_1101894776"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},"nav_promo_section":{"id":"nav-promo-section-40f97d45a3","experience_fragment_1":{"id":"experiencefragment-20b9e5083e","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/nav-promo-5/jcr:content","configured":true,":items":{"root":{"columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-d112253d4e",":items":{"nav_promo_card":{"id":"nav-promo-card-a5de1a77dc","openInNewWindow":false,"layout":"horizontal","headline":"Get started with your first Snowflake Notebook","description":"Write and execute code, visualize results, and tell the story of your analysis all in one place.","linkTitle":"Learn More","linkUrl":"/en/developers/solutions-center/getting-started-with-your-first-snowflake-notebook-project/","image":{"id":"image","alt":"alt","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--dc7e334a-c38b-4283-b1de-fcf829952eef/nav-promo-first-notebook.jpg?preferwebp=true&quality=85","height":"210","width":"415",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:LiveSyncConfig":{"cq:isDeep":true,"cq:rolloutConfigs":[],"cq:master":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/nav-promo-card-4",":type":"cq:LiveCopy"}},":itemsOrder":["root","cq:LiveSyncConfig"],"classNames":"aem-xf",":type":"snowflake-site/components/experiencefragment"},"experience_fragment_2":{"id":"experiencefragment-5e9be9222e","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/nav-promo-card-4/jcr:content","configured":true,":items":{"root":{"columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-6a6c5edf96",":items":{"nav_promo_card":{"id":"nav-promo-card-ecaa93f049","openInNewWindow":true,"layout":"horizontal","headline":"Northstar Builder Workshops","description":"Join other developers as you roll up your sleeves and explore the possibilities of Snowflake.","linkTitle":"Learn More","linkUrl":"/en/nav-promos/northstar-builders-workshop/","image":{"id":"image","alt":"Snowflake Northstar logo","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--14341ced-bc5e-4a29-9762-b7857f6cadfc/nav-promo-northstar.jpg?preferwebp=true&quality=85","height":"700","width":"1440",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:LiveSyncConfig":{"cq:isDeep":true,"cq:rolloutConfigs":[],"cq:master":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/master",":type":"cq:LiveCopy"}},":itemsOrder":["root","cq:LiveSyncConfig"],"classNames":"aem-xf",":type":"snowflake-site/components/experiencefragment"},":type":"snowflake-site/components/nav/nav-promo-section"},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Developers"},"item_1718247180324":{"id":"nav-dropdown-menu-8194b467fb","enableDropdown":false,"link_url":"/en/pricing-options/",":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Pricing"}},":itemsOrder":["item_1719963657751_c_663444255","nav_dropdown_menu_2","item_1719963657751_c","item_1719961362824","item_1719963657751","item_1718247180324"]},"languagenavigation":{"id":"language-navigation-4ded78796d","languageNavItems":[{"title":"English","path":"/en/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/","locale":"en","active":true},{"title":"日本語","path":"/ja/","locale":"ja","active":false},{"title":"한국어","path":"/ko/","locale":"ko","active":false},{"title":"中文（简体）","path":"/zh_cn/","locale":"zh-cn","active":false},{"title":"Português","path":"/pt_br/","locale":"pt-br","active":false},{"title":"Deutsch","path":"/de/","locale":"de","active":false},{"title":"Français","path":"/fr/","locale":"fr","active":false},{"title":"Español","path":"/es/","locale":"es","active":false},{"title":"Italiano","path":"/it/","locale":"it","active":false}],":type":"snowflake-site/components/nav/language-navigation"},"button_1177328691":{"id":"button-74fb1761c9","heapButtonClasses":["mega-nav__sign-in"],"showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://app.snowflake.com/"},"linkTargetContentType":"GENERIC","appliedCssClassNames":"snowflake-button-link snowflake-button-black snowflake-button-compact","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Sign in"},"button":{"id":"button-3138c446c2","heapButtonClasses":["contact_nav","heap-nav-contact"],"showOutboundIcon":true,"buttonLink":{"valid":true,"url":"/en/contact-sales/"},"linkTargetContentType":"GENERIC","appliedCssClassNames":"snowflake-button-secondary snowflake-button-blue snowflake-button-compact","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"CONTACT SALES"},"button_288358396":{"id":"button-dfee527c65","heapButtonClasses":["start_for_free_nav","heap-nav-start-for-free"],"showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://signup.snowflake.com/"},"linkTargetContentType":"GENERIC","appliedCssClassNames":"snowflake-button-primary snowflake-button-blue snowflake-button-compact","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"start for free"}},":itemsOrder":["nav_mega","languagenavigation","button_1177328691","button","button_288358396"],"appliedCssClassNames":"snowflake-header-container white",":type":"snowflake-site/components/mega-header"}},":itemsOrder":["markup_editor","mega_header"],":type":"snowflake-site/components/container"},"image":{":type":"nt:unstructured"},"cq:targetMetadata":{"cq:targetStatus":"OUT_OF_SYNC","cq:exportTime":1781280015540,"cq:targetOfferId":860250,":type":"nt:unstructured"}},":itemsOrder":["root","image","cq:targetMetadata"],"classNames":"aem-xf",":type":"snowflake-site/components/experiencefragment"},"markup_editor_1950346551":{"id":"markup-editor-cfd1421ecb","title":" ","cssContent":".snowflake-markdown-table code[class*=language-],.snowflake-markdown-table code[class*=language-],.snowflake-markdown .snowflake-text code[class*=language-],.snowflake-markdown .snowflake-text pre[class*=language-]{background-color:rgba(var(--ui-12-rgb),.5);color:var(--text-01);text-shadow:none;padding:var(--spacing-00);border-radius:var(--spacing-00);font-size:smaller}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false},"responsivegrid":{"columnClassNames":{"quickstart_hero":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont":"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":{"quickstart_hero":{"id":"quickstart-hero-4060378cd9","isDeveloperGuidesPage":false,"quickstartHeroForkRepoLink":{"id":"button-da45425ba0","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://github.com/Snowflake-Labs/sfquickstarts/tree/master/site/sfguides/src/build-autonomous-sql-pipelines-for-ai-agents"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Fork Repo"},"quickstartHeroBreadcrumbs":[{"title":"Build Autonomous Pipelines for AI Agents","url":"https://www.snowflake.com/content/snowflake-site/global/en/developers/guides/build-autonomous-sql-pipelines-for-ai-agents","currentPage":true},{"title":"Guides","url":"https://www.snowflake.com/content/snowflake-site/global/en/developers/guides","currentPage":false},{"title":"Snowflake for Developers","url":"https://www.snowflake.com/content/snowflake-site/global/en/developers","currentPage":false}],"quickstartHeroTitle":{"lines":["Build Autonomous Pipelines for AI Agents"],"type":"heading2",":type":"snowflake-site/components/title-v2"},"quickstartHeroAuthor":"Ovi Hutuleac, Gilberto Hernandez","quickstartHeroFirstSnowflakeFeatureTag":{"tagText":"Cortex","tagColor":"#29B5E8","tagPath":"/content/cq:tags/snowflake-site/taxonomy/snowflake-feature/cortex","tagIcon":""},":type":"snowflake-site/components/quickstart/quickstart-hero","fragmentPath":"/content/dam/snowflake-site/en/content-fragments/quickstarts/build-autonomous-sql-pipelines-for-ai-agents","quickstartHeroFirstCertifiedTag":{"tagText":"Quickstart","tagColor":"#29B5E8","tagPath":"/content/cq:tags/snowflake-site/taxonomy/solution-center/certification/quickstart","tagIcon":""}},"flexible_column_cont":{"id":"flexible-column-container-ae5893290c","propertiesId":"quickstart-template-main-flexible-container","type":"2-column-75-25","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"none","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-f513a3231f",":items":{"contentfragment":{"id":"contentfragment-a07cc5b8d6","paragraphs":["&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EOverview\u003C/h2\u003E\n","\u003Cp\u003EEuroShip Logistics is a pan-European shipping company that moves thousands of packages a day across 20 hubs in 15 countries. Their data team wants to build a modern analytics platform that streams order events in real time, transforms them through a multi-layer architecture, detects fraudulent payments using AI, and exposes clean, queryable data to Cortex Agents &mdash; all defined as code and deployable across environments.\u003C/p\u003E\n","\u003Cp\u003EIn this guide, you'll build that platform end to end. You'll define your entire infrastructure as code using a Snowflake DCM Project, stream real-time data from Kafka into Snowflake via Openflow, build a two-layer Dynamic Table pipeline for cleansing and analytics, run AI-powered fraud detection with Cortex, and expose everything through an analytics layer ready for agent consumption.\u003C/p\u003E\n","\u003Ch3\u003EWhat You'll Learn\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EHow to define a multi-environment data platform as code using DCM Projects\u003C/li\u003E\u003Cli\u003EHow to provision and configure Openflow to stream data from Kafka into Snowflake\u003C/li\u003E\u003Cli\u003EHow to build a two-layer Dynamic Table pipeline (cleansing + analytics)\u003C/li\u003E\u003Cli\u003EHow to use Cortex AI for real-time fraud detection and enrichment (\u003Ccode\u003EAI_CLASSIFY\u003C/code\u003E, \u003Ccode\u003EAI_COMPLETE\u003C/code\u003E)\u003C/li\u003E\u003Cli\u003EHow to create a Semantic View with Cortex Code for natural language querying\u003C/li\u003E\u003Cli\u003EHow to deploy a Cortex Agent that answers operational questions using the semantic view\u003C/li\u003E\u003Cli\u003EHow to expose transformed data through analytics views for AI agents\u003C/li\u003E\u003Cli\u003EHow to use Cortex Agents and Snowflake Intelligence to explore and get insights from your real-time data\u003C/li\u003E\u003Cli\u003EHow to use Cortex Code to vibe-code a Streamlit in Snowflake operations dashboard from a natural language prompt\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You'll Need\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EA \u003Ca href=\"https://signup.snowflake.com/\"\u003ESnowflake account\u003C/a\u003E with \u003Cstrong\u003EACCOUNTADMIN\u003C/strong\u003E access (Enterprise edition or higher for Openflow)\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/developer-guide/snowflake-cli/installation/installation\"\u003ESnowflake CLI\u003C/a\u003E (\u003Ccode\u003Esnow\u003C/code\u003E) v3.16.0+ installed\u003C/li\u003E\u003Cli\u003EPython 3.13+ with \u003Ccode\u003Epip\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.redpanda.com/current/get-started/rpk-install/\"\u003ERedpanda CLI\u003C/a\u003E (\u003Ccode\u003Erpk\u003C/code\u003E) for Kafka topic management\u003C/li\u003E\u003Cli\u003EA Kafka/Redpanda cluster (we provide one for this lab, or bring your own)\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You'll Build\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EA fully deployed TMS (Transportation Management System) data platform with:\n\u003Cul\u003E\u003Cli\u003E9 raw ingestion tables fed by Openflow from Kafka\u003C/li\u003E\u003Cli\u003E9 cleansing Dynamic Tables (dedup, trim, standardize)\u003C/li\u003E\u003Cli\u003E5 analytic Dynamic Tables (order summary, package tracking, hop-by-hop journey, location activity, fraud detection)\u003C/li\u003E\u003Cli\u003E5 analytics views ready for Cortex Agent consumption\u003C/li\u003E\u003Cli\u003EAI-powered fraud detection on streaming payment data\u003C/li\u003E\u003Cli\u003ECortex Code assisted semantic view for Cortex Agent consumption\u003C/li\u003E\u003Cli\u003ECortex Agent for &quot;Talk-to-your-data&quot; insights\u003C/li\u003E\u003Cli\u003EStreamlit in Snowflake operations dashboard built with Cortex Code\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ul\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EArchitecture Overview\u003C/h2\u003E\n","\u003Cp\u003EThe diagram below shows the end-to-end architecture you'll build in this lab:\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/lab_architecture.png?v=e261180a\" alt=\"Lab Architecture\"\u003E\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EClone the Companion Git Repo\u003C/h2\u003E\n","\u003Cp\u003EThis guide has a companion repository that contains all the code, configuration files, and scripts you'll need. Clone it to your local machine and use it as your working directory throughout the lab.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Egit clone https://github.com/Snowflake-Labs/sfguide-build-autonomous-pipelines-for-ai-agents.git\ncd sfguide-build-autonomous-pipelines-for-ai-agents\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThe repository includes the DCM project definitions, Kafka producer/consumer scripts, fraud detection notebook, Cortex Agent SQL, Streamlit app, and helper scripts referenced in each step.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EBootstrap the Account\u003C/h2\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote:\u003C/strong\u003E This step has been already completed in your account as part of the Summit provisioning. Run this only if you intend to run the hands-on lab in your own Snowflake account.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003ELet's create the foundational roles, resources, and network access that the rest of the hands on lab depends on.\u003C/p\u003E\n","\u003Cp\u003ERun \u003Cstrong\u003E1_bootstrap/setup.sql\u003C/strong\u003E as \u003Cstrong\u003EACCOUNTADMIN\u003C/strong\u003E in Snowsight UI.\u003C/p\u003E\n","\u003Cp\u003EIf you already have Snowflake CLI configured with a connection that uses the ACCOUNTADMIN role for this account:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esource .env\nsnow sql -f 1_bootstrap/setup.sql -c &lt;connection-name&gt;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EHere's what the script does:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003ECreates a \u003Cstrong\u003ESUMMIT_ADMIN\u003C/strong\u003E role with privileges to create databases, warehouses, roles, integrations, and Openflow deployments\u003C/li\u003E\u003Cli\u003EGrants \u003Cstrong\u003ESUMMIT_ADMIN\u003C/strong\u003E to your current user\u003C/li\u003E\u003Cli\u003ECreates the \u003Cstrong\u003EDCM_DB\u003C/strong\u003E database, \u003Cstrong\u003EDCM_DB.PROJECTS\u003C/strong\u003E schema, and \u003Cstrong\u003ESUMMIT_WH\u003C/strong\u003E warehouse\u003C/li\u003E\u003Cli\u003ECreates a DCM Project object (\u003Cstrong\u003EDCM_DB.PROJECTS.DCM_PROJECT_DEV\u003C/strong\u003E)\u003C/li\u003E\u003Cli\u003EProvisions an Openflow deployment named \u003Cstrong\u003ESUMMIT_DEPLOYMENT\u003C/strong\u003E (this takes 8&ndash;10 minutes &mdash; start it early)\u003C/li\u003E\u003Cli\u003ECreates a network rule and external access integration for the Kafka broker\u003C/li\u003E\u003C/ul\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote:\u003C/strong\u003E The Openflow deployment provisioning runs asynchronously. You can continue with the next steps while it completes. The deployment must be ready before you configure the Openflow connector in Step 4.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003ESanity check the run of bootstrap, following objects should be available in the snowflake account:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003Eshow dcm projects in schema dcm_db.projects;\n-- DCM_PROJECT_DEV\nshow openflow deployments like 'summit_deployment';\n-- SUMMIT_DEPLOYMENT\nshow network rules in schema dcm_db.network;\n-- REDPANDA_NETWORK_RULE\nshow integrations like 'summit_eai';\n-- SUMMIT_EAI\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThe final query in the script outputs your account identifier and username. You'll need these values for the DCM manifest in the next step:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME() AS account_identifier,\n       CURRENT_USER() AS user_name;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ECopy this value &mdash; you'll use them shortly.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ESet Up Your Environment\u003C/h2\u003E\n","\u003Cp\u003EBefore we start building, let's get your local workspace and Snowflake account configured.\u003C/p\u003E\n","\u003Ch3\u003EPython Environment\u003C/h3\u003E\n","\u003Cp\u003ECreate a virtual environment and install the required packages:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# Verify Python 3.13+ is available\npython3 --version  # Must show 3.13 or higher\n\n# If below 3.13, install it first:\n#   macOS:  brew install python@3.13\n#   Ubuntu: sudo apt install python3.13 python3.13-venv\n# Then use the explicit path: /opt/homebrew/bin/python3.13 -m venv .venv\n\npython3 -m venv .venv\nsource .venv/bin/activate\npip install --upgrade pip\npip install kafka-python-ng python-dotenv snowflake-cli snowflake-connector-python ipykernel\npip install &quot;snowflake-connector-python[pandas]&quot;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003ECreate a Programmatic Access Token (PAT)\u003C/h3\u003E\n","\u003Cp\u003EGenerate a PAT restricted to the \u003Ccode\u003ESUMMIT_ADMIN\u003C/code\u003E role. Run this in Snowsight or any authenticated session:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER USER ADD PAT summit_admin_pat\n  DAYS_TO_EXPIRY = 7\n  COMMENT = 'PAT for summit quickstart';\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ECopy the \u003Ccode\u003Etoken_secret\u003C/code\u003E from the output &mdash; it is only shown once. You will use it as \u003Ccode\u003ESNOWFLAKE_PAT\u003C/code\u003E in the next step.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote:\u003C/strong\u003E The \u003Ccode\u003ESUMMIT_ADMIN\u003C/code\u003E role must already be granted to your user (the bootstrap section does this). If you haven't bootstrapped yet, go to bootstrap section and configure the foundational roles and access for your account.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003EEnvironment Variables\u003C/h3\u003E\n","\u003Cp\u003EAll scripts in this guide read configuration from a \u003Ccode\u003E.env\u003C/code\u003E file. Copy the template and fill in your values:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecp .env.template .env\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EOpen \u003Ccode\u003E.env\u003C/code\u003E and update the following variables:\u003C/p\u003E\n\u003Ctable\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EVariable\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EDescription\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003ESNOWFLAKE_ACCOUNT\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EYour account identifier in \u003Ccode\u003EORG-ACCOUNT\u003C/code\u003E format\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003ESNOWFLAKE_USER\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EYour Snowflake username\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003ESNOWFLAKE_PAT\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EA Programmatic Access Token for authentication\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003EKAFKA_BOOTSTRAP_SERVERS\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka broker address (provided for this lab)\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003EKAFKA_USERNAME\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ESASL username for Kafka\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003EKAFKA_PASSWORD\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ESASL password for Kafka\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\n","\u003Ch3\u003EConfigure Snowflake CLI\u003C/h3\u003E\n","\u003Cp\u003ERun the helper script to set up a named \u003Ccode\u003Esummit\u003C/code\u003E snow-cli connection using your \u003Ccode\u003E.env\u003C/code\u003E values. If asked about password or other parameters, just hit Enter:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esource .env\nbash helpers/setup_snow_cli_connection.sh\n# if prompted for password or other parameters just hit Enter multiple times\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThe connection was set as default, let's verify it works as expected:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow connection list\nsnow sql -q &quot;SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME() AS account_identifier, CURRENT_USER() AS user_name&quot;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see a successful connection message with your account and role information. If the connection fails, you will need to run the \u003Ccode\u003Ebootstrap\u003C/code\u003E and \u003Ccode\u003Eenv setup\u003C/code\u003E sections again.\u003C/p\u003E\n","\u003Ch3\u003EConfigure Redpanda CLI (rpk)\u003C/h3\u003E\n","\u003Cp\u003ELet's setup the \u003Ca href=\"https://docs.redpanda.com/current/get-started/rpk-install/\"\u003ERedpanda CLI\u003C/a\u003E (\u003Ccode\u003Erpk\u003C/code\u003E) for topic management.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003E# Verify rpk cli is available\nrpk --version\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EIf you didn't install rpk-cli yet, follow the instruction to set it up:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ebrew install redpanda-data/tap/redpanda  # macOS\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EOr for Linux:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecurl -1sLf 'https://dl.redpanda.com/nzc4ZYQK3WRGd9sy/redpanda/cfg/setup/bash.deb.sh' | sudo -E bash &amp;&amp; sudo apt install redpanda\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ESet up an \u003Ccode\u003Erpk\u003C/code\u003E profile so you can manage Kafka topics directly:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esource .env\nbash helpers/setup_rpk_profile.sh\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EVerify connectivity to the Kafka cluster:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Erpk cluster info\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see broker metadata and cluster information printed to the console.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EDeploy the DCM Project\u003C/h2\u003E\n","\u003Cp\u003ENow let's deploy the entire data platform as code. The DCM Project in \u003Ccode\u003E2_dcm_project/\u003C/code\u003E defines every object declaratively &mdash; databases, schemas, tables, dynamic tables, views, roles, and grants.\u003C/p\u003E\n","\u003Ch3\u003EExplore the Project Structure\u003C/h3\u003E\n","\u003Cp\u003EThe project follows this layout:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-console\"\u003E2_dcm_project/\n├── manifest.yml                        # Targets and templating config\n├── sources/definitions/\n│   ├── database.sql                    # Database, schemas, warehouse\n│   ├── roles.sql                       # SUMMIT_DEVELOPER_ROLE, SUMMIT_INGEST_ROLE\n│   ├── raw_tables.sql                  # 9 raw tables (change-tracking enabled)\n│   ├── transform.sql                   # 14 dynamic tables (2 layers)\n│   └── analytics.sql                   # 5 analytics views\n└── scripts/\n    ├── seed_data.sql                   # Reference + sample data\n    ├── post_deploy.sql                 # Openflow runtime creation\n    └── tear_down.sql                   # Drop all resources\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EUpdate the Manifest\u003C/h3\u003E\n","\u003Cp\u003EOpen \u003Cstrong\u003Emanifest.yml\u003C/strong\u003E and update the \u003Ccode\u003Eaccount_identifier\u003C/code\u003E field under the \u003Ccode\u003EDCM_DEV\u003C/code\u003E target with the value from the bootstrap step:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-yaml\"\u003Etargets:\n  DCM_DEV:\n    account_identifier: MYORG-MY_STAGE_ACCOUNT   # &lt;-- replace with your value\n    project_name: DCM_DB.PROJECTS.DCM_PROJECT_DEV\n    project_owner: SUMMIT_ADMIN\n    templating_config: DEV\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThe manifest uses Jinja templating with an \u003Ccode\u003Eenv_suffix\u003C/code\u003E variable (\u003Ccode\u003E_DEV\u003C/code\u003E, \u003Ccode\u003E_STAGE\u003C/code\u003E, \u003Ccode\u003E_PROD\u003C/code\u003E) so the same definitions work across environments. For this lab we'll deploy to the \u003Ccode\u003EDCM_DEV\u003C/code\u003E target.\u003C/p\u003E\n","\u003Ch3\u003EPlan the Deployment\u003C/h3\u003E\n","\u003Cp\u003EAlways run a Plan before deploying. A Plan is a dry-run that shows exactly what DCM will create without executing anything:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow dcm plan --target DCM_DEV --from 2_dcm_project\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see planned CREATE operations for a database, 4 schemas, 9 raw tables, 14 dynamic tables, 5 views, a warehouse, 3 roles, and their associated grants. Review the output to confirm everything looks correct.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote\u003C/strong\u003E: you can save the output generated after dcm plan using the &quot;--save-output&quot; parameter.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003EDeploy\u003C/h3\u003E\n","\u003Cp\u003EOnce the plan looks good, deploy:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow dcm deploy --target DCM_DEV --from 2_dcm_project\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EDCM creates all objects using the \u003Cstrong\u003ESUMMIT_ADMIN\u003C/strong\u003E role. The deployment should complete in under a minute.\u003C/p\u003E\n","\u003Ch3\u003EPost-Deploy: Create the Openflow Runtime\u003C/h3\u003E\n","\u003Cp\u003EThe Openflow runtime runs inside the deployed database but requires the deployment to be ready first. Create it with the post-deploy script:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow sql -f 2_dcm_project/scripts/post_deploy.sql \\\n  --variable &quot;env_suffix=_DEV&quot; --enable-templating JINJA\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EHere's what this does:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EGrants usage on the Openflow deployment to \u003Cstrong\u003ESUMMIT_ROLE_DEV\u003C/strong\u003E\u003C/li\u003E\u003Cli\u003ECreates an Openflow runtime named \u003Cstrong\u003ESUMMIT_RUNTIME\u003C/strong\u003E in \u003Ccode\u003ESUMMIT_DB_DEV.OPENFLOW\u003C/code\u003E\u003C/li\u003E\u003Cli\u003EAttaches the external access integration for Kafka network access\u003C/li\u003E\u003Cli\u003EGrants USAGE and OPERATE on the runtime to \u003Cstrong\u003ESUMMIT_ROLE_DEV\u003C/strong\u003E\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EPost-Deploy: Seed initial data\u003C/h3\u003E\n","\u003Cp\u003EWith the infrastructure deployed, let's populate the initial reference data.\u003C/p\u003E\n","\u003Cp\u003EThe seed script inserts reference data (locations, customers, shipping products) and one complete end-to-end order example:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow sql -f 2_dcm_project/scripts/seed_data.sql \\\n  --variable &quot;env_suffix=_DEV&quot; --enable-templating JINJA\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EHere's what gets loaded:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003E20 European logistics locations\u003C/strong\u003E &mdash; hubs, warehouses, offices, and pickup points across 15 countries\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003E50 customers\u003C/strong\u003E &mdash; a mix of companies and individuals\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003E8 shipping products\u003C/strong\u003E &mdash; standard, express, economy, and envelope services\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003E1 sample order\u003C/strong\u003E &mdash; a complete lifecycle from Schneider Electronics (Berlin) to Marie Dupont (Paris), including order items, payment, package, 7 tracking events, and delivery\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EExplore the Data model\u003C/h3\u003E\n","\u003Cp\u003EYou can now open a workspace sql file and explore the created objects. There is only 1 Order at the moment, but we will start streaming soon.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE SUMMIT_ADMIN;\nUSE WAREHOUSE SUMMIT_WH;\nUSE DATABASE SUMMIT_DB_DEV;\nUSE SCHEMA RAW;\n\nSHOW TABLES;\n\nSELECT * FROM CUSTOMERS ORDER BY 1;\nSELECT * FROM ORDERS ORDER BY 1;\nSELECT * FROM PAYMENTS ORDER BY 1;\nSELECT * FROM PACKAGES ORDER BY 1;\nSELECT * FROM TRACKING_EVENTS ORDER BY 1;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EIn the RAW schema you will see the following data model:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003E┌─────────────────┐       ┌──────────────────────┐\n│   CUSTOMERS     │       │  SHIPPING_PRODUCTS   │\n│─────────────────│       │──────────────────────│\n│ customer_id PK  │       │ product_id PK        │\n│ customer_type   │       │ name                 │\n│ first_name      │       │ service_type         │\n│ last_name       │       │ zone                 │\n│ company_name    │       │ base_price           │\n│ email           │       │ max_weight/dims      │\n│ city, country   │       │ estimated_days       │\n└────────┬────────┘       └──────────┬───────────┘\n         │ 1:N                       │ 1:N\n         ▼                           ▼\n┌──────────────────────────────────────────────┐\n│                  ORDERS                      │\n│──────────────────────────────────────────────│\n│ order_id PK                                  │\n│ customer_id FK ──► CUSTOMERS                 │\n│ origin_location_id FK ──► LOCATIONS          │\n│ pickup_address/city/country                  │\n│ destination_address/city/country             │\n│ total_amount, currency                       │\n└───────┬──────────────────────────┬───────────┘\n        │ 1:N                      │ 1:1\n        ▼                          ▼\n┌─────────────────────────┐       ┌─────────────────────────┐\n│  ORDER_ITEMS            │       │       PAYMENTS          │\n│─────────────────────────│       │─────────────────────────│\n│ order_item_id PK        │       │ payment_id PK           │\n│ order_id FK ─► ORDERS   │       │ order_id FK ──► ORDERS  │\n│ product_id FK ─►        │       │ payment_method          │\n│   SHIPPING_PRODUCTS     │       │ card_last_four/brand    │\n│ quantity                │       │ card_country            │\n│ declared_contents       │       │ billing_addr/city/ctry  │\n│ declared_value          │       │ ip_address              │\n│ insurance_opted         │       │ device_fingerprint      │\n└────────┬────────────────┘       └─────────────────────────┘\n         │ 1:1                        ▲ fraud detection\n         ▼\n┌─────────────────────────┐     ┌────────────────────┐\n│     PACKAGES            │     │   LOCATIONS        │\n│─────────────────────────│     │────────────────────│\n│ package_id PK           │     │ location_id PK     │\n│ order_item_id FK ──►    │     │ name               │\n│   ORDER_ITEMS           │     │ type (HUB/WH/      │\n│ order_id FK ──► ORDERS  │     │   OFFICE/PICKUP)   │\n│ tracking_number         │     │ city, country      │\n│ actual_weight_kg        │     │ lat, lng           │\n│ status                  │     │ capacity           │\n└───────┬─────────────────┘     └─────┬──────────────┘\n        │ 1:N                         │ 1:N\n        ▼                             │\n┌──────────────────────┐              │\n│  TRACKING_EVENTS     │              │\n│──────────────────────│              │\n│ event_id PK          │              │\n│ package_id FK ─► PKG │              │\n│ location_id FK ──────┼──────────────┘\n│ event_timestamp      │\n│ event_type           │\n│ carrier              │\n└───────┬──────────────┘\n        │ 1:1\n        ▼\n┌──────────────────────┐\n│    DELIVERIES        │\n│──────────────────────│\n│ delivery_id PK       │\n│ package_id FK ─► PKG │\n│ driver_name          │\n│ actual_delivery_date │\n│ signature_collected  │\n│ status               │\n└──────────────────────┘\n\nFlow: CUSTOMER ─► ORDER ─► ORDER_ITEMS ─► PACKAGES ─► TRACKING_EVENTS ─► DELIVERIES\n                    │                                        │\n                    └──► PAYMENT                             └──► LOCATIONS\n\u003C/code\u003E\u003C/pre\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EStart streaming from Kafka\u003C/h2\u003E\n","\u003Cp\u003ENow that we have the RAW zone deployed, and all tables are in place, let's configure and start streaming data from Kafka topics.\u003C/p\u003E\n","\u003Ch3\u003ECreate Kafka Topics\u003C/h3\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote:\u003C/strong\u003E If you're using the provided Kafka cluster for this lab, topics are already created and data is streaming. You can skip topic creation and the producer setup step below. Jump directly to the consumer testing.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003EIf you're using your own Kafka cluster, you can create the topics the producer needs like this:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esource .env\nfor suffix in orders order-items payments packages tracking-events deliveries; do\n  rpk topic create &quot;${KAFKA_TOPIC_PREFIX}-${suffix}&quot;\ndone\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ELet's list the topics we have access to:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Erpk topic list\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see 6 topics listed: \u003Ccode\u003Etms-orders\u003C/code\u003E, \u003Ccode\u003Etms-order-items\u003C/code\u003E, \u003Ccode\u003Etms-payments\u003C/code\u003E, \u003Ccode\u003Etms-packages\u003C/code\u003E, \u003Ccode\u003Etms-tracking-events\u003C/code\u003E, and \u003Ccode\u003Etms-deliveries\u003C/code\u003E.\u003C/p\u003E\n","\u003Ch3\u003ETest the Producer (Dry Run)\u003C/h3\u003E\n","\u003Cp\u003EBefore pushing data to Kafka, verify the producer generates valid data by running it in dry-run mode:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epython3 3_generate/tms_producer.py --dry-run --count 1\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see a single order printed to stdout with all its associated events (order items, payment, packages, tracking events, deliveries) as JSON messages.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote:\u003C/strong\u003E The Kafka cluster provided for this lab is already producing events &mdash; you do not need to run the producer yourself. If you are using your own cluster, run the producer script to generate events and publish them to the Kafka topics.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003ERun the Producer\u003C/h3\u003E\n","\u003Cp\u003ENow push some orders to Kafka:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epython3 3_generate/tms_producer.py --count 5 --delay 1\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EOn startup, the producer reads the last order ID from \u003Ccode\u003E.tms_producer_state.json\u003C/code\u003E and resumes from that point, preventing duplicate messages from being sent to Kafka.\u003C/p\u003E\n","\u003Cp\u003EEach order generates approximately 15-17 messages across the 6 topics. The producer prints a summary for each order:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003E[1/5] order=ORD-00002 | items=2 | events=12 | msgs=17\n[2/5] order=ORD-00003 | items=1 | events=8 | msgs=15\n...\n\nDone. Produced 5 orders (82 total messages).\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EVerify with the Consumer\u003C/h3\u003E\n","\u003Cp\u003EOptionally, verify that messages are flowing into Kafka by running the consumer. By default it runs in dry-run mode and does not commit offsets, so you can safely inspect messages without affecting your consumer group state. Pass \u003Ccode\u003E--commit\u003C/code\u003E to persist offsets.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Epython3 3_generate/tms_consumer.py --from-beginning\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see formatted JSON messages from all 6 topics. Press \u003Ccode\u003ECtrl+C\u003C/code\u003E to stop.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EConfigure the Openflow Connector\u003C/h2\u003E\n","\u003Cp\u003ENow let's configure Openflow to continuously stream data from Kafka into the \u003Cstrong\u003ERAW\u003C/strong\u003E schema. Openflow runs inside Snowflake and provides a visual flow-based interface for data ingestion.\u003C/p\u003E\n","\u003Ch3\u003ECreate a new Flow\u003C/h3\u003E\n","\u003Cp\u003EUsing the \u003Ccode\u003ESUMMIT_ADMIN\u003C/code\u003E Role, Open the Openflow runtime in Snowsight, by Nagivating to \u003Cstrong\u003EIngestion &gt; OPENFLOW &gt; Launch Openflow &gt; Login to Control Plane\u003C/strong\u003E). You should see the Runtime that was created by the DCM project post-deploy script:\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_runtimes.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Cp\u003EClick on the \u003Ccode\u003ESummit Runtime\u003C/code\u003E to open the canvas.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote\u003C/strong\u003E An error will occur if you try to open the canvas using the ACCOUNTADMIN Role. Make sure that you log out from Openflow, Set your Default Role to SUMMIT_ADMIN in Snowsight and Launch Openflow again.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003EIn the canvas drag-and-drop \u003Cstrong\u003EImport from Registry\u003C/strong\u003E &rarr; and choose the flow \u003Cstrong\u003Ekafka-json-sasl-topic2table-schemaev\u003C/strong\u003E, and Click Import.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_import_from_registry.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EConfigure Flow Parameters\u003C/h3\u003E\n","\u003Cp\u003ERight-click on the \u003Ccode\u003EProcess Group\u003C/code\u003E and update the 3 parameter contexts:\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_processor.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESource Parameters:\u003C/strong\u003E\u003C/p\u003E\n\u003Ctable\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EParameter\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EValue\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka Bootstrap Servers\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003E&lt;KAFKA_BOOTSTRAP_SERVERS&gt;\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka SASL Username\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003E&lt;KAFKA_USERNAME&gt;\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka SASL Password\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003E&lt;KAFKA_PASSWORD&gt;\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka Security Protocol\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003ESASL_SSL\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka SASL Mechanism\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003ESCRAM-SHA-256\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\n","\u003Cp\u003E\u003Cstrong\u003EThe Source parameters\u003C/strong\u003E: add your Kafka broker, SASL username/password, use SASL_SSL as security protocol - these are all inside your \u003Ccode\u003E.env\u003C/code\u003E file\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_source_params.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EDestination Parameters:\u003C/strong\u003E\u003C/p\u003E\n\u003Ctable\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EParameter\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EValue\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EDestination Database\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003ESUMMIT_DB_DEV\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EDestination Schema\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003ERAW\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ESnowflake Role\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003ESUMMIT_INGEST_ROLE_DEV\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ESnowflake Authentication Strategy\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003ESNOWFLAKE_MANAGED\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\n","\u003Cp\u003E\u003Cstrong\u003EThe Destination parameters\u003C/strong\u003E: Database \u003Ccode\u003ESUMMIT_DB_DEV\u003C/code\u003E, schema \u003Ccode\u003ERAW\u003C/code\u003E, role \u003Ccode\u003ESUMMIT_INGEST_ROLE_DEV\u003C/code\u003E, use \u003Ccode\u003ESNOWFLAKE_MANAGED\u003C/code\u003E authentication\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_destination_params.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EIngestion Parameters:\u003C/strong\u003E\u003C/p\u003E\n\u003Ctable\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EParameter\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EValue\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka Topics\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Etms-.*\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka Topic Format\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Epattern\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka Group Id\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003E&lt;KAFKA_USERNAME&gt;-group\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EKafka Auto Offset Reset\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Eealiest\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\n","\u003Cp\u003E\u003Cstrong\u003EIngestion parameters\u003C/strong\u003E: update topic format to \u003Ccode\u003Epattern\u003C/code\u003E, use pattern \u003Ccode\u003Etms-.*\u003C/code\u003E for reading all topics starting with tms-, the consumer group is your \u003Ccode\u003EKAFKA_USERNAME\u003C/code\u003E with \u003Ccode\u003E-group\u003C/code\u003E suffix (e.g. tms-user-1-group)\u003C/p\u003E\n","\u003Cp\u003EDeselect \u003Cstrong\u003EShow Inherited Parameters\u003C/strong\u003E to show only the Ingestion parameters.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_ingestion_params.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EMap Topic to Table names:\u003C/strong\u003E Update the Topic to Table mapping processor, by double chicking on the \u003Cstrong\u003Emain processor group\u003C/strong\u003E, and navigate to \u003Ccode\u003EMap Topic to Table\u003C/code\u003E processor, the regex will remove the topic prefix and transform topic names to snowflake table names. For example the data from topic \u003Ccode\u003Eorder-items\u003C/code\u003E will be mapped to snowflake table \u003Ccode\u003EORDER_ITEMS\u003C/code\u003E.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003E${kafka.topic:substringAfter('tms-'):replace('-', '_'):toUpper()}\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_map_topic_1.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_map_topic_2.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Ch3\u003ECheck flow parameters fits the Kafka cluster endpoint\u003C/h3\u003E\n","\u003Cp\u003EBefore starting the flow, verify that the Kafka broker address in your flow parameters matches the endpoint allowed by the Snowflake network rule. If these don't match, Openflow won't be able to reach Kafka.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003E1. Check the actual broker endpoints from your Kafka cluster:\u003C/strong\u003E\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Erpk cluster info\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ENote the broker addresses in the output (e.g., \u003Ccode\u003E***.any.us-west-2.mpx.prd.cloud.redpanda.com:9092\u003C/code\u003E).\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003E2. Check what the Snowflake network rule allows:\u003C/strong\u003E\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE SUMMIT_ADMIN;\nDESCRIBE INTEGRATION SUMMIT_EAI;\nDESCRIBE NETWORK RULE DCM_DB.NETWORK.REDPANDA_NETWORK_RULE;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThe \u003Ccode\u003EVALUE_LIST\u003C/code\u003E column shows the allowed host:port entries. The broker addresses from \u003Ccode\u003Erpk cluster info\u003C/code\u003E must be covered by this list.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003E3. Verify they match:\u003C/strong\u003E\u003C/p\u003E\n","\u003Cp\u003EThe bootstrap URL in your Openflow Source Parameters (e.g., \u003Ccode\u003E***.any.us-west-2.mpx.prd.cloud.redpanda.com:9092\u003C/code\u003E) should resolve to brokers listed in the network rule. If your cluster has different broker IDs or the network rule is outdated, update the network rule:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER NETWORK RULE DCM_DB.NETWORK.REDPANDA_NETWORK_RULE\n  SET VALUE_LIST = (\n    '&lt;bootstrap-server&gt;:9092',\n    '&lt;broker-1&gt;:9092',\n    '&lt;broker-2&gt;:9092',\n    '&lt;broker-3&gt;:9092'\n  );\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ETip:\u003C/strong\u003E The bootstrap server uses the \u003Ccode\u003E.any.\u003C/code\u003E subdomain which load-balances across brokers. The network rule must include both the bootstrap address and all individual broker addresses returned by \u003Ccode\u003Erpk cluster info\u003C/code\u003E.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003EStart the Flow\u003C/h3\u003E\n","\u003Cp\u003ENow that we have the flow configured, let's start streaming.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EEnable all controller services by right-click on the main process group\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_enable_controller_services.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n\u003Col start=\"2\"\u003E\u003Cli\u003ERight-click again on the main processor group and click \u003Cstrong\u003EStart\u003C/strong\u003E\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_start_flow.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Cp\u003EYou should see data flowing through the connector. The flow counters in the Openflow UI will show bytes and records being processed.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_streaming.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Ch3\u003E(Optionally) Import an existing Flow\u003C/h3\u003E\n","\u003Cp\u003EIn the \u003Ca href=\"4_openflow/Openflow_Kafka_SUMMIT_DE238.json\"\u003E\u003Ccode\u003E4_openflow/Openflow_Kafka_SUMMIT_DE238.json\u003C/code\u003E\u003C/a\u003E you can find an example flow, that can be imported in case you get into configuration problems.\u003C/p\u003E\n","\u003Cp\u003EYou drag-and-drop a new \u003Ccode\u003EProcessor Group\u003C/code\u003E in the main canvas, and import the file as in the screen bellow.\u003C/p\u003E\n","\u003Cp\u003EThis flow already has all parameters pre-configured. You only need to set the Kafka related parameters in the source parameter group (\u003Ccode\u003EKAFKA_USERNAME\u003C/code\u003E, \u003Ccode\u003EKAFKA_PASSWORD\u003C/code\u003E, \u003Ccode\u003EKAFKA_BROKERS\u003C/code\u003E) and the ingestion parameter group (\u003Ccode\u003EKAFKA_USERNAME-GROUP\u003C/code\u003E).\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_import_flow.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Cp\u003ENow you can \u003Cstrong\u003EEnable Controller Services\u003C/strong\u003E and \u003Cstrong\u003EStart\u003C/strong\u003E the Flow.\u003C/p\u003E\n","\u003Ch3\u003EVerify Data in Snowflake\u003C/h3\u003E\n","\u003Cp\u003EAfter a few moments, check that data is landing in the RAW schema:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE SUMMIT_DEVELOPER_ROLE_DEV;\nUSE WAREHOUSE SUMMIT_WH_DEV;\nUSE SCHEMA SUMMIT_DB_DEV.RAW;\n\nSELECT 'ORDERS' AS table_name, COUNT(*) AS row_count FROM ORDERS\nUNION ALL SELECT 'ORDER_ITEMS', COUNT(*) FROM ORDER_ITEMS\nUNION ALL SELECT 'PAYMENTS', COUNT(*) FROM PAYMENTS\nUNION ALL SELECT 'PACKAGES', COUNT(*) FROM PACKAGES\nUNION ALL SELECT 'TRACKING_EVENTS', COUNT(*) FROM TRACKING_EVENTS\nUNION ALL SELECT 'DELIVERIES', COUNT(*) FROM DELIVERIES;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see row counts increasing as data streams in from Kafka.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EExplore the Dynamic Tables\u003C/h2\u003E\n","\u003Cp\u003EWith data flowing into RAW, the Dynamic Tables in the \u003Cstrong\u003ETRANSFORM\u003C/strong\u003E schema automatically refresh on a 1-minute target lag. The pipeline uses a two-layer architecture: Layer 1 cleans and deduplicates raw data, and Layer 2 builds analytic aggregations on top.\u003C/p\u003E\n","\u003Ch3\u003ELayer 1: Clean Tables\u003C/h3\u003E\n","\u003Cp\u003EThe first layer applies deduplication, TRIM on strings, and UPPER on status/type fields. For example, here's the clean customers table:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- DT_CLEAN_CUSTOMERS: deduplicates by CUSTOMER_ID, trims strings, normalizes types\nSELECT\n    CUSTOMER_ID,\n    UPPER(TRIM(CUSTOMER_TYPE)) AS CUSTOMER_TYPE,\n    TRIM(FIRST_NAME) AS FIRST_NAME,\n    TRIM(LAST_NAME) AS LAST_NAME,\n    TRIM(COMPANY_NAME) AS COMPANY_NAME,\n    TRIM(EMAIL) AS EMAIL,\n    TRIM(CITY) AS CITY,\n    TRIM(COUNTRY) AS COUNTRY,\n    COALESCE(UPPER(TRIM(ACCOUNT_STATUS)), 'ACTIVE') AS ACCOUNT_STATUS,\n    CREATED_AT\nFROM SUMMIT_DB_DEV.RAW.CUSTOMERS\nQUALIFY ROW_NUMBER() OVER (PARTITION BY CUSTOMER_ID ORDER BY CUSTOMER_ID) = 1;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThere are 9 clean dynamic tables total &mdash; one for each RAW table. They all use the same pattern: deduplicate on the primary key, trim strings, and standardize categorical values with UPPER.\u003C/p\u003E\n","\u003Ch3\u003ELayer 2: Analytic Tables\u003C/h3\u003E\n","\u003Cp\u003EThe second layer builds business-ready aggregations by joining across the clean tables. Let's examine each one.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EDT_ORDER_SUMMARY\u003C/strong\u003E &mdash; A denormalized view of every order with customer info, item counts, package counts, and delivery status:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE SCHEMA SUMMIT_DB_DEV.TRANSFORM;\n\nSELECT * \nFROM DT_ORDER_SUMMARY \nORDER BY ORDER_DATE DESC LIMIT 10;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see columns like \u003Ccode\u003ECUSTOMER_NAME\u003C/code\u003E, \u003Ccode\u003EORDER_STATUS\u003C/code\u003E, \u003Ccode\u003ETOTAL_ITEMS\u003C/code\u003E, \u003Ccode\u003ETOTAL_PACKAGES\u003C/code\u003E, \u003Ccode\u003EORDER_VALUE\u003C/code\u003E, and \u003Ccode\u003EDAYS_SINCE_ORDER\u003C/code\u003E.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EDT_PACKAGE_TRACKING\u003C/strong\u003E &mdash; Package-level tracking showing transit progress, hubs visited, and transit hours:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT PACKAGE_ID, TRACKING_NUMBER, PACKAGE_STATUS, HUBS_VISITED, TRANSIT_HOURS, CARRIER\nFROM DT_PACKAGE_TRACKING\nORDER BY FIRST_SCAN DESC LIMIT 10;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cstrong\u003EDT_PACKAGE_HOPS\u003C/strong\u003E &mdash; The hop-by-hop journey of every package through the logistics network:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT TRACKING_NUMBER, HOP_NUMBER, LOCATION_NAME, LOCATION_CITY, EVENT_TYPE, \n       MINUTES_SINCE_PREV_HOP, CUMULATIVE_MINUTES\nFROM DT_PACKAGE_HOPS\nWHERE TRACKING_NUMBER = 'TMS-2025-000001'\nORDER BY HOP_NUMBER;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see the sample order's journey: Berlin Central Hub &rarr; Frankfurt Airport Hub &rarr; Paris North Hub &rarr; delivered.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EDT_LOCATION_ACTIVITY\u003C/strong\u003E &mdash; Daily throughput and dwell-time percentiles for each logistics location:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT LOCATION_NAME, LOCATION_TYPE, CITY, ACTIVITY_DATE,\n       NUM_PACKAGES, PACKAGES_ARRIVED, PACKAGES_DEPARTED,\n       PROCESSING_P75_MINUTES, PROCESSING_P90_MINUTES\nFROM DT_LOCATION_ACTIVITY\nORDER BY ACTIVITY_DATE DESC, NUM_PACKAGES DESC\nLIMIT 10;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cstrong\u003EDT_FRAUD_DETECTION\u003C/strong\u003E &mdash; Payment fraud scoring (we'll populate this in the next step):\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT COUNT(*) AS fraud_results FROM DT_FRAUD_DETECTION;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThis table will be empty until we run the fraud detection pipeline in the next step.\u003C/p\u003E\n","\u003Ch3\u003ECheck Dynamic Table Health\u003C/h3\u003E\n","\u003Cp\u003EVerify all dynamic tables are refreshing properly:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESHOW DYNAMIC TABLES IN SCHEMA SUMMIT_DB_DEV.TRANSFORM;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ELook at the \u003Ccode\u003Escheduling_state\u003C/code\u003E column &mdash; all tables should show \u003Ccode\u003EACTIVE\u003C/code\u003E. The \u003Ccode\u003Elast_completed_time\u003C/code\u003E column shows when each table last refreshed.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ERun AI-Powered Fraud Detection\u003C/h2\u003E\n","\u003Cp\u003EThe fraud detection pipeline uses heuristic scoring to identify suspicious payments. In production, this would run continuously as a Cortex AI function; for this lab, we'll run it as a batch process that scores payments and writes results to the \u003Cstrong\u003EFRAUD_DETECTION_RESULTS\u003C/strong\u003E table.\u003C/p\u003E\n","\u003Ch3\u003EUnderstanding the Fraud Signals\u003C/h3\u003E\n","\u003Cp\u003EThe fraud detector evaluates 6 independent signals for each payment:\u003C/p\u003E\n\u003Ctable\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ESignal\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EWeight\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ETrigger\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Ebilling_country_mismatch\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E+0.35\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EBilling country &ne; customer country\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Ecard_country_mismatch\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E+0.30\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ECard issuing country &ne; customer country\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Eip_geolocation_mismatch\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E+0.25\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EIP prefix doesn't match customer country\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Eknown_fraud_device\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E+0.40\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EDevice fingerprint in known-fraud pool\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Evelocity_abuse\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E+0.30\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E5+ payments from same customer in 5 minutes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Ehigh_declared_value\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E+0.20\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ETotal declared value &gt; EUR 20,000\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\n","\u003Cp\u003EA payment is flagged as fraudulent when its combined score reaches 0.30 or higher.\u003C/p\u003E\n","\u003Ch3\u003ERun the Fraud Producer\u003C/h3\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote:\u003C/strong\u003E We are generating fraud payments already in the provided Kafka Cluster. Run this only if you are using your own Kafka Cluster.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003ELet's produce some orders with a higher fraud rate to see the detector in action:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esource .env\npython3 3_generate/tms_producer.py --count 50 --delay 0.5 --fraud-rate 0.10\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThis generates 50 orders with a 10% fraud rate, meaning roughly 5 orders will have deliberately fraudulent payment patterns injected by the producer.\u003C/p\u003E\n","\u003Ch3\u003EScore Payments Using the Notebook\u003C/h3\u003E\n","\u003Cp\u003EOpen the \u003Ca href=\"5_fraud_detection/fraud_detection_notebook.ipynb\"\u003E\u003Ccode\u003E5_fraud_detection/fraud_detection_notebook.ipynb\u003C/code\u003E\u003C/a\u003E notebook in Snowflake Notebooks or your local Jupyter environment.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESnowflake Notebooks setup:\u003C/strong\u003E When you create or import the notebook in Snowsight (Projects &rarr; Workspaces &rarr; Upload Files), you'll need to configure your default compute service:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EService Name\u003C/strong\u003E: \u003Ccode\u003EUSER_SERVICE\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EService Settings\u003C/strong\u003E: \u003Ccode\u003ESYSTEM_COMPUTE_POOL_CPU (CPU_X64_S)\u003C/code\u003E\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003EClick \u003Cstrong\u003ECreate and Connect\u003C/strong\u003E. Wait for Connection to be established, it should not take more than 1 minute.\u003C/p\u003E\n","\u003Cp\u003EOn the top right choose your running Role and Warehouse:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ERole\u003C/strong\u003E: \u003Ccode\u003ESUMMIT_DEVELOPER_ROLE_DEV\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EWarehouse\u003C/strong\u003E: Select \u003Ccode\u003ESUMMIT_WH_DEV\u003C/code\u003E\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003EEnable the current session credentials by updating the first Cell, comment lines 8-10 with Local setup, uncomment the lines 13-14 with snowsight setup.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003E# If running in Snowsight Workspace, use the block below\nsession = get_active_session()\nconn = session.connection\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cstrong\u003ELocal Jupyter setup:\u003C/strong\u003E If you prefer to run the notebook locally:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esource .venv/bin/activate\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EUpdate first Cell, and enable the line 8-10 with Local setup, comment the lines 13-14 with snowsight setup.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003E# If running locally, use the block below\nconn = snowflake.connector.connect(\n    connection_name=&quot;summit&quot;\n)\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThen open the notebook in VS Code or Jupyter Lab, select the \u003Cstrong\u003E.venv/bin/python\u003C/strong\u003E kernel, and run all cells. The notebook connects to Snowflake using the \u003Ccode\u003Esummit\u003C/code\u003E named connection from your Snowflake CLI config:\u003C/p\u003E\n","\u003Cp\u003EMake sure you've already run \u003Ccode\u003Ebash helpers/setup_snow_cli_connection.sh\u003C/code\u003E (from the environment setup step) so the \u003Ccode\u003Esummit\u003C/code\u003E connection exists and is configured with your PAT.\u003C/p\u003E\n","\u003Ch4\u003EWhat the notebook does\u003C/h4\u003E\n\u003Col\u003E\u003Cli\u003EReads unscored payments from \u003Ccode\u003ESUMMIT_DB_DEV.TRANSFORM.DT_CLEAN_PAYMENTS\u003C/code\u003E\u003C/li\u003E\u003Cli\u003EJoins with order and customer data for context\u003C/li\u003E\u003Cli\u003ERuns each payment through the 6-signal heuristic fraud scorer\u003C/li\u003E\u003Cli\u003EWrites scored results to \u003Ccode\u003ESUMMIT_DB_DEV.TRANSFORM.FRAUD_DETECTION_RESULTS\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EAI Enrichment\u003C/strong\u003E &mdash; uses Cortex AI to classify and explain each flagged payment:\n\u003Cul\u003E\u003Cli\u003E\u003Ccode\u003EAI_CLASSIFY\u003C/code\u003E assigns a fraud type (\u003Ccode\u003Eidentity_theft\u003C/code\u003E, \u003Ccode\u003Ecard_testing\u003C/code\u003E, \u003Ccode\u003Eaccount_takeover\u003C/code\u003E, \u003Ccode\u003Esynthetic_identity\u003C/code\u003E, or \u003Ccode\u003Efriendly_fraud\u003C/code\u003E)\u003C/li\u003E\u003Cli\u003E\u003Ccode\u003EAI_COMPLETE\u003C/code\u003E (mistral-large2) generates a 2&ndash;3 sentence natural language explanation of why the payment is fraudulent\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EUpdates the results table with \u003Ccode\u003EFRAUD_TYPE\u003C/code\u003E and \u003Ccode\u003EEXPLANATION\u003C/code\u003E columns\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003EAfter running the notebook, verify fraud detections:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE SUMMIT_DEVELOPER_ROLE_DEV;\nUSE SCHEMA SUMMIT_DB_DEV.TRANSFORM;\n\nSELECT COUNT(*) AS total_scored,\n       SUM(CASE WHEN IS_FRAUD THEN 1 ELSE 0 END) AS flagged_fraud,\n       ROUND(AVG(FRAUD_SCORE), 3) AS avg_score\nFROM FRAUD_DETECTION_RESULTS;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EExplore the AI-Enriched Fraud Results\u003C/h3\u003E\n","\u003Cp\u003ECheck the AI-classified fraud types and explanations:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT PAYMENT_ID, FRAUD_SCORE, FRAUD_TYPE, EXPLANATION\nFROM FRAUD_DETECTION_RESULTS\nWHERE IS_FRAUD = TRUE\nORDER BY FRAUD_SCORE DESC LIMIT 5;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see each flagged payment classified into a fraud type (e.g., \u003Ccode\u003Eidentity_theft\u003C/code\u003E for geographic mismatches, \u003Ccode\u003Ecard_testing\u003C/code\u003E for known fraud devices) with a natural language explanation.\u003C/p\u003E\n","\u003Ch3\u003EExplore the Fraud Detection Dynamic Table\u003C/h3\u003E\n","\u003Cp\u003EThe \u003Cstrong\u003EDT_FRAUD_DETECTION\u003C/strong\u003E dynamic table automatically enriches the raw fraud results with payment details, customer information, and order context:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT CUSTOMER_NAME, CUSTOMER_COUNTRY, PAYMENT_METHOD, CARD_BRAND,\n       CARD_COUNTRY, BILLING_COUNTRY, PAYMENT_AMOUNT,\n       FRAUD_SCORE, IS_FRAUD, FRAUD_SIGNALS, FRAUD_TYPE, EXPLANATION\nFROM SUMMIT_DB_DEV.TRANSFORM.DT_FRAUD_DETECTION\nWHERE IS_FRAUD = TRUE\nORDER BY FRAUD_SCORE DESC\nLIMIT 10;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see flagged payments with their triggered signals (e.g., \u003Ccode\u003Ebilling_country_mismatch\u003C/code\u003E, \u003Ccode\u003Eknown_fraud_device\u003C/code\u003E), AI-classified fraud type, and a human-readable explanation of why the payment was flagged.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EQuery the Analytics Layer\u003C/h2\u003E\n","\u003Cp\u003EThe \u003Cstrong\u003EANALYTICS\u003C/strong\u003E schema provides clean views on top of the transform layer. These are the consumer-facing objects designed for dashboards, analysts, and Cortex Agents.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE SUMMIT_DEVELOPER_ROLE_DEV;\nUSE SCHEMA SUMMIT_DB_DEV.ANALYTICS;\n\nSHOW VIEWS;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EOrder Summary\u003C/h3\u003E\n","\u003Cp\u003EGet a high-level view of all orders:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT ORDER_ID, CUSTOMER_NAME, ORDER_DATE, ORDER_STATUS,\n       DESTINATION_CITY, TOTAL_ITEMS, ORDER_VALUE, DAYS_SINCE_ORDER\nFROM ORDER_SUMMARY\nWHERE ORDER_STATUS = 'DELIVERED'\nORDER BY ORDER_DATE DESC\nLIMIT 20;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EPackage Tracking\u003C/h3\u003E\n","\u003Cp\u003ETrack packages in transit:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT TRACKING_NUMBER, CUSTOMER_NAME, DESTINATION_CITY,\n       PACKAGE_STATUS, HUBS_VISITED, TRANSIT_HOURS, CARRIER\nFROM PACKAGE_TRACKING\nWHERE PACKAGE_STATUS != 'DELIVERED'\nORDER BY FIRST_SCAN DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EFraud Alerts\u003C/h3\u003E\n","\u003Cp\u003ESurface high-risk payments for review:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT CUSTOMER_NAME, PAYMENT_AMOUNT, FRAUD_SCORE, FRAUD_SIGNALS,\n       CARD_COUNTRY, BILLING_COUNTRY, CUSTOMER_COUNTRY\nFROM FRAUD_DETECTION\nWHERE IS_FRAUD = TRUE\nORDER BY PAYMENT_TIMESTAMP DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003ELocation Performance\u003C/h3\u003E\n","\u003Cp\u003EIdentify bottleneck locations by processing time:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT LOCATION_NAME, LOCATION_TYPE, CITY, COUNTRY,\n       NUM_PACKAGES, PROCESSING_P90_MINUTES\nFROM LOCATION_ACTIVITY\nWHERE ACTIVITY_DATE = CURRENT_DATE()\nORDER BY PROCESSING_P90_MINUTES DESC\nLIMIT 10;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThese views are ready to be consumed by a Cortex Agent &mdash; the agent can query them using natural language to answer questions like &quot;Which packages are delayed?&quot;, &quot;Show me today's fraud alerts&quot;, or &quot;What's the busiest hub right now?&quot;\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ECreate Semantic View using Cortex Code\u003C/h2\u003E\n","\u003Cp\u003EA semantic view defines the business meaning of your data &mdash; dimensions, metrics, relationships, and verified queries &mdash; so that Cortex Analyst and Cortex Agents can answer natural language questions accurately.\u003C/p\u003E\n","\u003Cp\u003EWe'll use \u003Cstrong\u003ECortex Code\u003C/strong\u003E to generate the semantic view SQL from a natural language prompt, then deploy it.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EImportant:\u003C/strong\u003E The semantic view must be created using the \u003Ccode\u003ESUMMIT_ADMIN\u003C/code\u003E role (which owns the \u003Ccode\u003EANALYTICS\u003C/code\u003E schema). If you're running in a Snowsight worksheet, run \u003Ccode\u003EUSE ROLE SUMMIT_ADMIN;\u003C/code\u003E first. The \u003Ccode\u003Esnow sql\u003C/code\u003E CLI command already uses this role via your \u003Ccode\u003Esummit\u003C/code\u003E connection.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003EThe Prompt\u003C/h3\u003E\n","\u003Cp\u003EOpen Cortex Code (in Snowsight or the Cortex Code CLI) and paste the following prompt from \u003Ca href=\"6_cortex-agent/create_semantic_view_prompt.txt\"\u003E\u003Ccode\u003E6_cortex-agent/create_semantic_view_prompt.txt\u003C/code\u003E\u003C/a\u003E:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003ECreate a semantic view named SUMMIT_DB_DEV.ANALYTICS.TMS_SEMANTIC_VIEW over the following views\nin the ANALYTICS schema of SUMMIT_DB_DEV:\n\n- ORDER_SUMMARY\n- PACKAGE_TRACKING\n- PACKAGE_HOPS\n- LOCATION_ACTIVITY\n- FRAUD_DETECTION\n\nRequirements:\n1. Add meaningful descriptions to the semantic view itself and to every table, column, dimension,\n   and metric so that Cortex Analyst understands the business context of a Transportation\n   Management System (TMS) for a pan-European shipping company.\n2. Define appropriate relationships (joins) between the tables based on shared keys (ORDER_ID,\n   PACKAGE_ID, CUSTOMER_NAME, etc.).\n3. Add at least 3 verified queries (examples) that demonstrate how to use the semantic view.\n\nRules:\nStart the SQL file with `USE ROLE SUMMIT_ADMIN;` and `USE WAREHOUSE SUMMIT_WH_DEV;`.\nCreate only a SQL file and save it locally.\nUse the local repository to get information about schema objects.\nDo not try to run snowflake statements. Do not run the SQL yet.\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ECortex Code will generate a \u003Ccode\u003ECREATE SEMANTIC VIEW\u003C/code\u003E statement with tables, relationships, dimensions, metrics, facts, verified queries, and AI generation/categorization hints.\u003C/p\u003E\n","\u003Ch3\u003EThe Generated SQL\u003C/h3\u003E\n","\u003Cp\u003EExplore the generated SQL. There is one for backup here as well \u003Ca href=\"6_cortex-agent/create_semantic_view.sql\"\u003E\u003Ccode\u003E6_cortex-agent/create_semantic_view.sql\u003C/code\u003E\u003C/a\u003E. Here are the key elements:\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003ETables\u003C/strong\u003E &mdash; Maps 5 analytics views with primary keys, synonyms, and business descriptions:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ETABLES (\n    order_summary AS SUMMIT_DB_DEV.ANALYTICS.ORDER_SUMMARY\n      PRIMARY KEY (ORDER_ID)\n      WITH SYNONYMS ('orders', 'shipments', 'order details')\n      COMMENT = 'Denormalized order view with customer info, item counts, ...',\n    package_tracking AS SUMMIT_DB_DEV.ANALYTICS.PACKAGE_TRACKING\n      PRIMARY KEY (PACKAGE_ID) ...,\n    package_hops AS SUMMIT_DB_DEV.ANALYTICS.PACKAGE_HOPS ...,\n    location_activity AS SUMMIT_DB_DEV.ANALYTICS.LOCATION_ACTIVITY ...,\n    fraud_detection AS SUMMIT_DB_DEV.ANALYTICS.FRAUD_DETECTION ...\n)\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cstrong\u003ERelationships\u003C/strong\u003E &mdash; Defines joins between tables:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ERELATIONSHIPS (\n    package_tracking_to_orders AS\n      package_tracking (ORDER_ID) REFERENCES order_summary,\n    package_hops_to_tracking AS\n      package_hops (PACKAGE_ID) REFERENCES package_tracking,\n    fraud_to_orders AS\n      fraud_detection (ORDER_ID) REFERENCES order_summary\n)\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cstrong\u003EDimensions\u003C/strong\u003E &mdash; Business attributes like \u003Ccode\u003ECUSTOMER_NAME\u003C/code\u003E, \u003Ccode\u003EORDER_STATUS\u003C/code\u003E, \u003Ccode\u003ECARRIER\u003C/code\u003E, \u003Ccode\u003EIS_FRAUD\u003C/code\u003E, \u003Ccode\u003EFRAUD_SIGNALS\u003C/code\u003E, each with synonyms and descriptions.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EMetrics\u003C/strong\u003E &mdash; Aggregations like \u003Ccode\u003Etotal_orders\u003C/code\u003E, \u003Ccode\u003Eavg_transit_hours\u003C/code\u003E, \u003Ccode\u003Etotal_fraud_flagged\u003C/code\u003E, \u003Ccode\u003Etotal_fraud_amount\u003C/code\u003E, each with formulas and descriptions.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EVerified Queries\u003C/strong\u003E &mdash; 3 pre-verified queries that serve as examples for Cortex Analyst:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E&quot;Which packages are currently in transit and how many hubs have they visited?&quot;\u003C/li\u003E\u003Cli\u003E&quot;Show me the top 5 locations with the highest P90 processing time today&quot;\u003C/li\u003E\u003Cli\u003E&quot;List all fraudulent payments detected in the last 7 days&quot;\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cstrong\u003EAI Hints\u003C/strong\u003E &mdash; \u003Ccode\u003EAI_SQL_GENERATION\u003C/code\u003E and \u003Ccode\u003EAI_QUESTION_CATEGORIZATION\u003C/code\u003E clauses that guide the LLM on date handling, status filtering, and topic boundaries.\u003C/p\u003E\n","\u003Ch3\u003EValidate semantic view before execution\u003C/h3\u003E\n","\u003Cp\u003EYou can ask Cortex Code to validate the semantic view before execution and fix errors if possible:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003EValidate the semantic view SQL syntax by compiling it against Snowflake before execution\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EDeploy the Semantic View\u003C/h3\u003E\n","\u003Cp\u003ERun the SQL file:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow sql -f 6_cortex-agent/create_semantic_view.sql\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EVerify it was created:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE SUMMIT_ADMIN;\nSHOW SEMANTIC VIEWS IN SCHEMA SUMMIT_DB_DEV.ANALYTICS;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003ETest the Semantic View\u003C/h3\u003E\n","\u003Cp\u003EVerify the semantic view was created and inspect its structure:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EDESCRIBE SEMANTIC VIEW SUMMIT_DB_DEV.ANALYTICS.TMS_SEMANTIC_VIEW;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou can test it as well using Cortex Code:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003ETest the 3 onboarding queries in TMS_SEMANTIC_VIEW to verify Cortex can resolve dimensions and metrics correctly\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ETo test it interactively, open \u003Cstrong\u003ESnowflake Intelligence\u003C/strong\u003E in Snowsight (AI &amp; ML &rarr; Cortex Agents) and create a new conversation using the \u003Ccode\u003ETMS_SEMANTIC_VIEW\u003C/code\u003E as the data source. Try asking: &quot;Which packages are currently in transit?&quot;\u003C/p\u003E\n","\u003Cp\u003EAlternatively, you can test it in the next step by deploying the Cortex Agent, which uses this semantic view under the hood.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ECreate a Cortex Agent\u003C/h2\u003E\n","\u003Cp\u003ENow let's create a conversational agent that uses the semantic view to answer questions in natural language. The agent will serve as the &quot;Talk-to-your-data&quot; interface for EuroShip Logistics operations teams.\u003C/p\u003E\n","\u003Ch3\u003EThe Prompt\u003C/h3\u003E\n","\u003Cp\u003EOpen Cortex Code and use the prompt from \u003Ca href=\"6_cortex-agent/create_agent_prompt.txt\"\u003E\u003Ccode\u003E6_cortex-agent/create_agent_prompt.txt\u003C/code\u003E\u003C/a\u003E:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003ECreate a Cortex Agent named SUMMIT_DB_DEV.ANALYTICS.TMS_AGENT that uses the semantic view SUMMIT_DB_DEV.ANALYTICS.TMS_SEMANTIC_VIEW as its data source.\n\nRequirements:\n1. The agent should be able to answer natural language questions about the TMS (Transportation Management System) data: orders, package tracking, logistics hub performance, and fraud detection.\n2. Give the agent a clear description and instructions so it understands it serves a pan-European shipping company called EuroShip Logistics.\n3. The agent should respond concisely and include relevant data in its answers.\n\nAfter creating the agent, provide 3 example prompts to demonstrate how to use it:\n- &quot;Which packages are currently delayed and where are they stuck?&quot;\n- &quot;What is our fraud detection rate this week compared to last week?&quot;\n- &quot;Show me the busiest hubs today and their average processing times&quot;\n\nRules:\nCreate only a SQL file and save it locally. Do not run the SQL yet.\nUse the local repository to get information about schema objects.\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EAgent Configuration\u003C/h3\u003E\n","\u003Cp\u003EExplore the generated SQL, there is one. backup here as well at \u003Ca href=\"6_cortex-agent/create_agent.sql\"\u003E\u003Ccode\u003E6_cortex-agent/create_agent.sql\u003C/code\u003E\u003C/a\u003E:\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003ETools\u003C/strong\u003E &mdash; The agent uses two tools:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Ccode\u003Ecortex_analyst_text_to_sql\u003C/code\u003E &mdash; translates natural language to SQL using the semantic view\u003C/li\u003E\u003Cli\u003E\u003Ccode\u003Edata_to_chart\u003C/code\u003E &mdash; generates visualizations from query results\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cstrong\u003EInstructions\u003C/strong\u003E &mdash; The agent knows it serves EuroShip Logistics and:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EDefaults to the last 7 days when time range is ambiguous\u003C/li\u003E\u003Cli\u003EUses EUR as the default currency\u003C/li\u003E\u003Cli\u003ERounds percentages to 1 decimal place\u003C/li\u003E\u003Cli\u003EAlways mentions fraud scores and signals when discussing fraud\u003C/li\u003E\u003Cli\u003EProactively highlights concerning metrics\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESample Questions\u003C/strong\u003E &mdash; Pre-configured onboarding questions:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E&quot;Which packages are currently delayed and where are they stuck?&quot;\u003C/li\u003E\u003Cli\u003E&quot;What is our fraud detection rate this week compared to last week?&quot;\u003C/li\u003E\u003Cli\u003E&quot;Show me the busiest hubs today and their average processing times&quot;\u003C/li\u003E\u003Cli\u003E&quot;How many orders were delivered in the last 7 days?&quot;\u003C/li\u003E\u003Cli\u003E&quot;What are the top fraud signals this month?&quot;\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EDeploy the Agent\u003C/h3\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow sql -f 6_cortex-agent/create_agent.sql\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EVerify it was created:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE SUMMIT_ADMIN;\nSHOW AGENTS IN SCHEMA SUMMIT_DB_DEV.ANALYTICS;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EChat with the Agent\u003C/h3\u003E\n","\u003Cp\u003EOpen the agent in \u003Cstrong\u003ESnowflake Intelligence\u003C/strong\u003E (Snowsight &rarr; AI &amp; ML &rarr; Cortex Agents &rarr; \u003Ccode\u003ETMS_AGENT\u003C/code\u003E) for a full chat interface with visualization support.\u003C/p\u003E\n","\u003Cp\u003EYou can also interact with the agent programmatically using the Cortex Agents REST API or via \u003Cstrong\u003ECortex Code\u003C/strong\u003E by typing a question and selecting the agent as the data source.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EWork with Snowflake Intelligence\u003C/h2\u003E\n","\u003Cp\u003EOnce the Cortex Agent is deployed, it appears automatically in \u003Cstrong\u003ESnowflake Intelligence\u003C/strong\u003E. Navigate to \u003Cstrong\u003EAI &amp; ML &rarr; Cortex Agents\u003C/strong\u003E in Snowsight to find \u003Ccode\u003ETMS_AGENT\u003C/code\u003E.\u003C/p\u003E\n","\u003Cp\u003EFrom Snowflake Intelligence you can:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EChat with the agent using natural language\u003C/li\u003E\u003Cli\u003ESee the generated SQL for transparency\u003C/li\u003E\u003Cli\u003EView chart visualizations inline\u003C/li\u003E\u003Cli\u003EShare conversations with team members\u003C/li\u003E\u003Cli\u003EPin useful queries as bookmarks\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EExample Conversations\u003C/h3\u003E\n","\u003Cp\u003ETry these prompts to see the agent in action:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003E&quot;How many orders were placed today and what's the total revenue?&quot;\n&quot;Show me all fraud alerts from the last 7 days with their explanations&quot;\n&quot;What are the top 3 busiest hubs right now by package volume?&quot;\n&quot;Which carriers have the longest average transit times?&quot;\n&quot;Compare this week's fraud rate to last week&quot;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThe agent will use the semantic view to generate SQL, execute it, and return formatted results with context.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/cortex_agent.png?v=e261180a\" alt=\"Openflow Runtimes\"\u003E\u003C/p\u003E\n","\u003Cp\u003EIf you Click on \u003Cstrong\u003EShow Traces\u003C/strong\u003E you can see detailed execution tracking, with performance metrics and tokens consumed.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EBuild a Streamlit Dashboard with Cortex Code\u003C/h2\u003E\n","\u003Cp\u003ENow let's use \u003Cstrong\u003ECortex Code\u003C/strong\u003E to vibe-code a Streamlit in Snowflake (SiS) operations dashboard for EuroShip Logistics. Instead of writing the app manually, you'll give Cortex Code a detailed prompt and let it generate the full application.\u003C/p\u003E\n","\u003Ch3\u003EPrepare the Prompt\u003C/h3\u003E\n","\u003Cp\u003EThe prompt file is already provided at \u003Ca href=\"7_streamlit/create_streamlit_app_prompt.txt\"\u003E\u003Ccode\u003E7_streamlit/create_streamlit_app_prompt.txt\u003C/code\u003E\u003C/a\u003E. It instructs Cortex Code to build a multi-page Streamlit app with:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EDashboard\u003C/strong\u003E &mdash; KPIs (total orders, packages in transit, fraud alerts, avg transit hours) and trend charts\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EPackage Tracking\u003C/strong\u003E &mdash; Searchable, filterable table of all packages\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EFraud Alerts\u003C/strong\u003E &mdash; Flagged payments with AI-generated explanations and a fraud score slider\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ELocation Performance\u003C/strong\u003E &mdash; Hub/warehouse metrics with P90 processing times\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003EThe Prompt:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003EBuild a Streamlit in Snowflake (SiS) app for the EuroShip Logistics TMS system.\n\nThe app should connect to SUMMIT_DB_DEV.ANALYTICS and provide:\n\n1. **Dashboard page** &mdash; Key KPIs at the top (total orders, packages in transit, fraud alerts, avg transit hours), followed by charts showing:\n   - Orders over time (line chart)\n   - Package status distribution (bar chart)\n   - Top 10 busiest hubs by package volume (horizontal bar chart)\n\n2. **Package Tracking page** &mdash; A searchable table of all packages with filters for status (IN_TRANSIT, DELIVERED, etc.) and carrier. Show tracking number, customer, destination, status, hubs visited, and transit hours.\n\n3. **Fraud Alerts page** &mdash; A table of flagged fraudulent payments with fraud score, fraud type, triggered signals, and the AI-generated explanation. Add a filter for minimum fraud score threshold (slider from 0.3 to 1.0).\n\n4. **Location Performance page** &mdash; A table and bar chart of hub/warehouse performance metrics: location name, type, city, country, number of packages processed, and P90 processing time in minutes. Add date filter.\n\nRequirements:\n- Use the role SUMMIT_ADMIN and warehouse SUMMIT_WH_DEV.\n- Query these views: ORDER_SUMMARY, PACKAGE_TRACKING, FRAUD_DETECTION, LOCATION_ACTIVITY.\n- Use st.connection(&quot;snowflake&quot;) for the Snowflake connection.\n- Use Streamlit's built-in charting (st.bar_chart, st.line_chart) or st.altair_chart for more control.\n- Add a sidebar with page navigation using st.navigation and st.Page.\n- Apply clean formatting with st.metric for KPIs.\n- The app title should be &quot;EuroShip Logistics &mdash; TMS Operations&quot;.\n\nRules:\n- Create only the Python app file and save it locally as `7_streamlit/tms_app.py`.\n- Do not deploy the app yet.\n- Use the local repository to get information about schema objects and column names.\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EGenerate the App with Cortex Code\u003C/h3\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EOpen \u003Cstrong\u003ECortex Code\u003C/strong\u003E &mdash; either in the desktop IDE or through the Snowsight integration.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EMake sure you have the project repository open as your workspace so Cortex Code can reference the schema objects.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EPaste the contents of \u003Ccode\u003E7_streamlit/create_streamlit_app_prompt.txt\u003C/code\u003E into the Cortex Code chat panel.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ECortex Code will generate a complete \u003Ccode\u003Etms_app.py\u003C/code\u003E file. Review the generated code &mdash; it should:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EUse \u003Ccode\u003Est.connection(&quot;snowflake&quot;)\u003C/code\u003E for the database connection\u003C/li\u003E\u003Cli\u003EQuery the \u003Ccode\u003EANALYTICS\u003C/code\u003E schema views (\u003Ccode\u003EORDER_SUMMARY\u003C/code\u003E, \u003Ccode\u003EPACKAGE_TRACKING\u003C/code\u003E, \u003Ccode\u003EFRAUD_DETECTION\u003C/code\u003E, \u003Ccode\u003ELOCATION_ACTIVITY\u003C/code\u003E)\u003C/li\u003E\u003Cli\u003EUse \u003Ccode\u003Est.navigation\u003C/code\u003E and \u003Ccode\u003Est.Page\u003C/code\u003E for multi-page layout\u003C/li\u003E\u003Cli\u003EDisplay KPIs with \u003Ccode\u003Est.metric\u003C/code\u003E and charts with \u003Ccode\u003Est.bar_chart\u003C/code\u003E / \u003Ccode\u003Est.line_chart\u003C/code\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ESave the generated file to \u003Ccode\u003E7_streamlit/tms_app.py\u003C/code\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch3\u003ERun Locally\u003C/h3\u003E\n","\u003Cp\u003ETo test the app locally before deploying:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esource .venv/bin/activate\nstreamlit run 7_streamlit/tms_app.py\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThis uses your local \u003Ccode\u003Esummit\u003C/code\u003E Snowflake CLI connection via \u003Ccode\u003Est.connection(&quot;snowflake&quot;)\u003C/code\u003E.\u003C/p\u003E\n","\u003Ch3\u003EDeploy to Snowflake (Optional)\u003C/h3\u003E\n","\u003Cp\u003EOnce you're happy with the generated app, let's update the connection and deploy it as a Streamlit in Snowflake app:\u003C/p\u003E\n","\u003Cp\u003ECortex Code:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-text\"\u003EUpdate the streamlit app to use streamlit snowflake connection\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EDeploy using snow cli:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow streamlit deploy tms_operations_app \\\n  --replace \\\n  --database SUMMIT_DB_DEV \\\n  --role SUMMIT_ADMIN \\\n  --project 7_streamlit\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ENow Open the Link printed after deploy:\u003C/p\u003E\n","\u003Cp\u003E\u003Ccode\u003EStreamlit successfully deployed and available under https://app.snowflake.com/...\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003EStill get errors? Cortex Code is your friend. Just paste the error in the prompt and ask to fix.\u003C/p\u003E\n","\u003Ch3\u003EIterate with Cortex Code\u003C/h3\u003E\n","\u003Cp\u003EThe power of this approach is iteration. If you want to add features or change the layout, simply ask Cortex Code:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E&quot;Provide a date selector for the Dashboard, with default to last 7 days&quot;\u003C/li\u003E\u003Cli\u003E&quot;Add a map visualization showing package locations across Europe&quot;\u003C/li\u003E\u003Cli\u003E&quot;Add a real-time refresh button that re-queries the data&quot;\u003C/li\u003E\u003Cli\u003E&quot;Change the fraud alerts page to highlight critical scores in red&quot;\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003ECortex Code will modify the existing file in place, preserving what works and adding the requested changes.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EBonus: Configure github actions for your DCM project\u003C/h2\u003E\n","\u003Cp\u003EAutomate DCM deployments using GitHub Actions so that pushes to specific branches trigger \u003Ccode\u003Esnow dcm plan\u003C/code\u003E and \u003Ccode\u003Esnow dcm deploy\u003C/code\u003E against the correct environment.\u003C/p\u003E\n","\u003Ch3\u003EMulti-Environment Strategy\u003C/h3\u003E\n","\u003Cp\u003EThe \u003Ccode\u003Emanifest.yml\u003C/code\u003E already defines three targets with Jinja-templated suffixes:\u003C/p\u003E\n\u003Ctable\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EBranch\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ETarget\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003ESuffix\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EAccount\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Emain\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003EDCM_DEV\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003E_DEV\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EDev account\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Estaging\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003EDCM_STAGE\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003E_STAGE\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EStage account\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003Eproduction\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003EDCM_PROD\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003E\u003Ccode\u003E_PROD\u003C/code\u003E\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\" style=\"text-align: left\"\u003EProd account\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\n","\u003Cp\u003EEach target creates isolated objects (e.g., \u003Ccode\u003ESUMMIT_DB_DEV\u003C/code\u003E, \u003Ccode\u003ESUMMIT_DB_STAGE\u003C/code\u003E, \u003Ccode\u003ESUMMIT_DB_PROD\u003C/code\u003E) using the same definitions.\u003C/p\u003E\n","\u003Cp\u003EYou will need a Github account for this, where you will upload the dcm project.\u003C/p\u003E\n","\u003Cp\u003ESee these 2 Quickstarts for reference:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003Ehttps://www.snowflake.com/en/developers/guides/get-started-snowflake-dcm-projects/\u003C/li\u003E\u003Cli\u003Ehttps://www.snowflake.com/en/developers/guides/build-data-pipelines-with-snowflake-dcm-projects/\u003C/li\u003E\u003C/ul\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ECleanup\u003C/h2\u003E\n","\u003Cp\u003EWhen you're done exploring, tear down all resources created by this guide.\u003C/p\u003E\n","\u003Ch3\u003EStop the Openflow Connector\u003C/h3\u003E\n","\u003Cp\u003EIn the Openflow UI, right-click on the process group and click \u003Cstrong\u003EStop\u003C/strong\u003E. Wait for all processors to stop before proceeding. Then disable controllers.\u003C/p\u003E\n","\u003Ch3\u003EDrop All Resources\u003C/h3\u003E\n","\u003Cp\u003ERun the tear-down script to remove the database, warehouse, roles, and Openflow runtime:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow sql -f 2_dcm_project/scripts/tear_down.sql \\\n  --variable &quot;env_suffix=_DEV&quot; --enable-templating JINJA\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EHere's what gets dropped in order:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003ESuspends and drops the Openflow runtime\u003C/li\u003E\u003Cli\u003EDrops the \u003Cstrong\u003ESUMMIT_DB_DEV\u003C/strong\u003E database (removes all schemas, tables, dynamic tables, views, and data)\u003C/li\u003E\u003Cli\u003EDrops the \u003Cstrong\u003ESUMMIT_WH_DEV\u003C/strong\u003E warehouse\u003C/li\u003E\u003Cli\u003EDrops roles: \u003Cstrong\u003ESUMMIT_INGEST_ROLE_DEV\u003C/strong\u003E, \u003Cstrong\u003ESUMMIT_DEVELOPER_ROLE_DEV\u003C/strong\u003E\u003C/li\u003E\u003Cli\u003EDrops the DCM project object\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch3\u003EDrop Bootstrap Resources (Optional)\u003C/h3\u003E\n","\u003Cp\u003EIf you also want to remove the DCM infrastructure and Openflow deployment:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE ACCOUNTADMIN;\n\nALTER OPENFLOW DEPLOYMENT SUMMIT_DEPLOYMENT TERMINATE;\nDROP DATABASE IF EXISTS DCM_DB;\nDROP WAREHOUSE IF EXISTS SUMMIT_WH;\nDROP ROLE IF EXISTS SUMMIT_ADMIN;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote:\u003C/strong\u003E Terminating the Openflow deployment takes a few minutes to complete.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003EDelete Kafka Topics (Optional)\u003C/h3\u003E\n","\u003Cp\u003EIf you created topics on your own cluster:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esource .env\nfor suffix in orders order-items payments packages tracking-events deliveries; do\n  rpk topic delete &quot;${KAFKA_TOPIC_PREFIX}-${suffix}&quot;\ndone\n\u003C/code\u003E\u003C/pre\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EConclusion and Resources\u003C/h2\u003E\n","\u003Cp\u003ECongratulations! You've built a complete real-time data platform that streams logistics events from Kafka, transforms them through a multi-layer Dynamic Table pipeline, scores payments for fraud using AI, and exposes clean analytics views ready for agent consumption &mdash; all defined as code using DCM Projects.\u003C/p\u003E\n","\u003Ch3\u003EWhat You Learned\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EHow to define an entire data platform as code using \u003Cstrong\u003EDCM Projects\u003C/strong\u003E with Jinja templating for multi-environment support\u003C/li\u003E\u003Cli\u003EHow to provision and configure \u003Cstrong\u003EOpenflow\u003C/strong\u003E to stream data from Kafka into Snowflake using SASL authentication and regex-based topic-to-table mapping\u003C/li\u003E\u003Cli\u003EHow to build a \u003Cstrong\u003Etwo-layer Dynamic Table architecture\u003C/strong\u003E &mdash; a clean layer for deduplication and standardization, and an analytic layer for business aggregations\u003C/li\u003E\u003Cli\u003EHow the entire pipeline refreshes automatically with 1-minute target lag, providing near real-time analytics on streaming data\u003C/li\u003E\u003Cli\u003EHow to structure an \u003Cstrong\u003Eanalytics layer\u003C/strong\u003E with views that serve as the interface for Cortex Agents and dashboards\u003C/li\u003E\u003Cli\u003EHow to implement \u003Cstrong\u003EAI-powered fraud detection\u003C/strong\u003E using heuristic scoring enriched with Cortex AI (\u003Ccode\u003EAI_CLASSIFY\u003C/code\u003E + \u003Ccode\u003EAI_COMPLETE\u003C/code\u003E) for fraud classification and explanation\u003C/li\u003E\u003Cli\u003EHow to create a \u003Cstrong\u003ESemantic View\u003C/strong\u003E with Cortex Code that defines dimensions, metrics, relationships, and verified queries for natural language querying\u003C/li\u003E\u003Cli\u003EHow to deploy a \u003Cstrong\u003ECortex Agent\u003C/strong\u003E that uses the semantic view to answer operational questions in plain English\u003C/li\u003E\u003Cli\u003EHow to use \u003Cstrong\u003ECortex Code\u003C/strong\u003E to vibe-code a \u003Cstrong\u003EStreamlit in Snowflake\u003C/strong\u003E operations dashboard from a natural language prompt\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003ERelated Resources\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/dcm-projects/dcm-projects-overview\"\u003EDCM Projects Documentation\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/data-load/openflow/openflow-overview\"\u003EOpenflow Documentation\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/dynamic-tables-about\"\u003EDynamic Tables Documentation\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/overview\"\u003ECortex AI Documentation\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/developer-guide/streamlit/about-streamlit\"\u003EStreamlit in Snowflake\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/developer-guide/snowflake-cli/data-pipelines/dcm-projects\"\u003ESnowflake CLI &mdash; DCM Projects\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/developers/guides/get-started-snowflake-dcm-projects/\"\u003EGet Started with Snowflake DCM Projects\u003C/a\u003E\u003C/li\u003E\u003C/ul\u003E"],"description":"","title":"Build Autonomous Pipelines for AI Agents",":items":{},":itemsOrder":[],"elements":{"quickstartArticleBody":{"title":"Quickstart Article Body","dataType":"string","value":"\u003C!-- ------------------------ --\u003E\n## Overview\n\nEuroShip Logistics is a pan-European shipping company that moves thousands of packages a day across 20 hubs in 15 countries. Their data team wants to build a modern analytics platform that streams order events in real time, transforms them through a multi-layer architecture, detects fraudulent payments using AI, and exposes clean, queryable data to Cortex Agents — all defined as code and deployable across environments.\n\nIn this guide, you'll build that platform end to end. You'll define your entire infrastructure as code using a Snowflake DCM Project, stream real-time data from Kafka into Snowflake via Openflow, build a two-layer Dynamic Table pipeline for cleansing and analytics, run AI-powered fraud detection with Cortex, and expose everything through an analytics layer ready for agent consumption.\n\n### What You'll Learn\n\n- How to define a multi-environment data platform as code using DCM Projects\n- How to provision and configure Openflow to stream data from Kafka into Snowflake\n- How to build a two-layer Dynamic Table pipeline (cleansing + analytics)\n- How to use Cortex AI for real-time fraud detection and enrichment (`AI_CLASSIFY`, `AI_COMPLETE`)\n- How to create a Semantic View with Cortex Code for natural language querying\n- How to deploy a Cortex Agent that answers operational questions using the semantic view\n- How to expose transformed data through analytics views for AI agents\n- How to use Cortex Agents and Snowflake Intelligence to explore and get insights from your real-time data\n- How to use Cortex Code to vibe-code a Streamlit in Snowflake operations dashboard from a natural language prompt\n\n### What You'll Need\n\n- A [Snowflake account](https://signup.snowflake.com/) with **ACCOUNTADMIN** access (Enterprise edition or higher for Openflow)\n- [Snowflake CLI](https://docs.snowflake.com/en/developer-guide/snowflake-cli/installation/installation) (`snow`) v3.16.0+ installed\n- Python 3.13+ with `pip`\n- [Redpanda CLI](https://docs.redpanda.com/current/get-started/rpk-install/) (`rpk`) for Kafka topic management\n- A Kafka/Redpanda cluster (we provide one for this lab, or bring your own)\n\n### What You'll Build\n\n- A fully deployed TMS (Transportation Management System) data platform with:\n  - 9 raw ingestion tables fed by Openflow from Kafka\n  - 9 cleansing Dynamic Tables (dedup, trim, standardize)\n  - 5 analytic Dynamic Tables (order summary, package tracking, hop-by-hop journey, location activity, fraud detection)\n  - 5 analytics views ready for Cortex Agent consumption\n  - AI-powered fraud detection on streaming payment data\n  - Cortex Code assisted semantic view for Cortex Agent consumption\n  - Cortex Agent for \"Talk-to-your-data\" insights\n  - Streamlit in Snowflake operations dashboard built with Cortex Code\n\n\u003C!-- ------------------------ --\u003E\n## Architecture Overview\n\nThe diagram below shows the end-to-end architecture you'll build in this lab:\n\n![Lab Architecture](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/lab_architecture.png?v=e261180a)\n\n\u003C!-- ------------------------ --\u003E\n## Clone the Companion Git Repo\n\nThis guide has a companion repository that contains all the code, configuration files, and scripts you'll need. Clone it to your local machine and use it as your working directory throughout the lab.\n\n```bash\ngit clone https://github.com/Snowflake-Labs/sfguide-build-autonomous-pipelines-for-ai-agents.git\ncd sfguide-build-autonomous-pipelines-for-ai-agents\n```\n\nThe repository includes the DCM project definitions, Kafka producer/consumer scripts, fraud detection notebook, Cortex Agent SQL, Streamlit app, and helper scripts referenced in each step.\n\n\u003C!-- ------------------------ --\u003E\n## Bootstrap the Account\n\n\u003E **Note:** This step has been already completed in your account as part of the Summit provisioning. Run this only if you intend to run the hands-on lab in your own Snowflake account.\n\nLet's create the foundational roles, resources, and network access that the rest of the hands on lab depends on.\n\nRun **1_bootstrap/setup.sql** as **ACCOUNTADMIN** in Snowsight UI.\n\nIf you already have Snowflake CLI configured with a connection that uses the ACCOUNTADMIN role for this account:\n\n```bash\nsource .env\nsnow sql -f 1_bootstrap/setup.sql -c \u003Cconnection-name\u003E\n```\n\nHere's what the script does:\n\n- Creates a **SUMMIT_ADMIN** role with privileges to create databases, warehouses, roles, integrations, and Openflow deployments\n- Grants **SUMMIT_ADMIN** to your current user\n- Creates the **DCM_DB** database, **DCM_DB.PROJECTS** schema, and **SUMMIT_WH** warehouse\n- Creates a DCM Project object (**DCM_DB.PROJECTS.DCM_PROJECT_DEV**)\n- Provisions an Openflow deployment named **SUMMIT_DEPLOYMENT** (this takes 8–10 minutes — start it early)\n- Creates a network rule and external access integration for the Kafka broker\n\n\u003E **Note:** The Openflow deployment provisioning runs asynchronously. You can continue with the next steps while it completes. The deployment must be ready before you configure the Openflow connector in Step 4.\n\nSanity check the run of bootstrap, following objects should be available in the snowflake account:\n\n```sql\nshow dcm projects in schema dcm_db.projects;\n-- DCM_PROJECT_DEV\nshow openflow deployments like 'summit_deployment';\n-- SUMMIT_DEPLOYMENT\nshow network rules in schema dcm_db.network;\n-- REDPANDA_NETWORK_RULE\nshow integrations like 'summit_eai';\n-- SUMMIT_EAI\n```\n\nThe final query in the script outputs your account identifier and username. You'll need these values for the DCM manifest in the next step:\n\n```sql\nSELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME() AS account_identifier,\n       CURRENT_USER() AS user_name;\n```\n\nCopy this value — you'll use them shortly.\n\n\u003C!-- ------------------------ --\u003E\n## Set Up Your Environment\n\nBefore we start building, let's get your local workspace and Snowflake account configured.\n\n### Python Environment\n\nCreate a virtual environment and install the required packages:\n\n```bash\n# Verify Python 3.13+ is available\npython3 --version  # Must show 3.13 or higher\n\n# If below 3.13, install it first:\n#   macOS:  brew install python@3.13\n#   Ubuntu: sudo apt install python3.13 python3.13-venv\n# Then use the explicit path: /opt/homebrew/bin/python3.13 -m venv .venv\n\npython3 -m venv .venv\nsource .venv/bin/activate\npip install --upgrade pip\npip install kafka-python-ng python-dotenv snowflake-cli snowflake-connector-python ipykernel\npip install \"snowflake-connector-python[pandas]\"\n```\n\n### Create a Programmatic Access Token (PAT)\n\nGenerate a PAT restricted to the `SUMMIT_ADMIN` role. Run this in Snowsight or any authenticated session:\n\n```sql\nALTER USER ADD PAT summit_admin_pat\n  DAYS_TO_EXPIRY = 7\n  COMMENT = 'PAT for summit quickstart';\n```\n\nCopy the `token_secret` from the output — it is only shown once. You will use it as `SNOWFLAKE_PAT` in the next step.\n\n\u003E **Note:** The `SUMMIT_ADMIN` role must already be granted to your user (the bootstrap section does this). If you haven't bootstrapped yet, go to bootstrap section and configure the foundational roles and access for your account.\n\n### Environment Variables\n\nAll scripts in this guide read configuration from a `.env` file. Copy the template and fill in your values:\n\n```bash\ncp .env.template .env\n```\n\nOpen `.env` and update the following variables:\n\n| Variable | Description |\n|:---------|:------------|\n| `SNOWFLAKE_ACCOUNT` | Your account identifier in `ORG-ACCOUNT` format |\n| `SNOWFLAKE_USER` | Your Snowflake username |\n| `SNOWFLAKE_PAT` | A Programmatic Access Token for authentication |\n| `KAFKA_BOOTSTRAP_SERVERS` | Kafka broker address (provided for this lab) |\n| `KAFKA_USERNAME` | SASL username for Kafka |\n| `KAFKA_PASSWORD` | SASL password for Kafka |\n\n### Configure Snowflake CLI\n\nRun the helper script to set up a named `summit` snow-cli connection using your `.env` values. If asked about password or other parameters, just hit Enter:\n\n```bash\nsource .env\nbash helpers/setup_snow_cli_connection.sh\n# if prompted for password or other parameters just hit Enter multiple times\n```\n\nThe connection was set as default, let's verify it works as expected:\n\n```bash\nsnow connection list\nsnow sql -q \"SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME() AS account_identifier, CURRENT_USER() AS user_name\"\n```\n\nYou should see a successful connection message with your account and role information. If the connection fails, you will need to run the `bootstrap` and `env setup` sections again.\n\n### Configure Redpanda CLI (rpk)\n\nLet's setup the [Redpanda CLI](https://docs.redpanda.com/current/get-started/rpk-install/) (`rpk`) for topic management.\n\n```bash\n# Verify rpk cli is available\nrpk --version\n```\n\nIf you didn't install rpk-cli yet, follow the instruction to set it up:\n\n```bash\nbrew install redpanda-data/tap/redpanda  # macOS\n```\n\nOr for Linux: \n\n```bash\ncurl -1sLf 'https://dl.redpanda.com/nzc4ZYQK3WRGd9sy/redpanda/cfg/setup/bash.deb.sh' | sudo -E bash && sudo apt install redpanda\n```\n\nSet up an `rpk` profile so you can manage Kafka topics directly:\n\n```bash\nsource .env\nbash helpers/setup_rpk_profile.sh\n```\n\nVerify connectivity to the Kafka cluster:\n\n```bash\nrpk cluster info\n```\n\nYou should see broker metadata and cluster information printed to the console.\n\n\u003C!-- ------------------------ --\u003E\n## Deploy the DCM Project\n\nNow let's deploy the entire data platform as code. The DCM Project in `2_dcm_project/` defines every object declaratively — databases, schemas, tables, dynamic tables, views, roles, and grants.\n\n### Explore the Project Structure\n\nThe project follows this layout:\n\n```console\n2_dcm_project/\n├── manifest.yml                        # Targets and templating config\n├── sources/definitions/\n│   ├── database.sql                    # Database, schemas, warehouse\n│   ├── roles.sql                       # SUMMIT_DEVELOPER_ROLE, SUMMIT_INGEST_ROLE\n│   ├── raw_tables.sql                  # 9 raw tables (change-tracking enabled)\n│   ├── transform.sql                   # 14 dynamic tables (2 layers)\n│   └── analytics.sql                   # 5 analytics views\n└── scripts/\n    ├── seed_data.sql                   # Reference + sample data\n    ├── post_deploy.sql                 # Openflow runtime creation\n    └── tear_down.sql                   # Drop all resources\n```\n\n### Update the Manifest\n\nOpen **manifest.yml** and update the `account_identifier` field under the `DCM_DEV` target with the value from the bootstrap step:\n\n```yaml\ntargets:\n  DCM_DEV:\n    account_identifier: MYORG-MY_STAGE_ACCOUNT   # \u003C-- replace with your value\n    project_name: DCM_DB.PROJECTS.DCM_PROJECT_DEV\n    project_owner: SUMMIT_ADMIN\n    templating_config: DEV\n```\n\nThe manifest uses Jinja templating with an `env_suffix` variable (`_DEV`, `_STAGE`, `_PROD`) so the same definitions work across environments. For this lab we'll deploy to the `DCM_DEV` target.\n\n### Plan the Deployment\n\nAlways run a Plan before deploying. A Plan is a dry-run that shows exactly what DCM will create without executing anything:\n\n```bash\nsnow dcm plan --target DCM_DEV --from 2_dcm_project\n```\n\nYou should see planned CREATE operations for a database, 4 schemas, 9 raw tables, 14 dynamic tables, 5 views, a warehouse, 3 roles, and their associated grants. Review the output to confirm everything looks correct.\n\n\u003E**Note**: you can save the output generated after dcm plan using the \"--save-output\" parameter.\n\n### Deploy\n\nOnce the plan looks good, deploy:\n\n```bash\nsnow dcm deploy --target DCM_DEV --from 2_dcm_project\n```\n\nDCM creates all objects using the **SUMMIT_ADMIN** role. The deployment should complete in under a minute.\n\n### Post-Deploy: Create the Openflow Runtime\n\nThe Openflow runtime runs inside the deployed database but requires the deployment to be ready first. Create it with the post-deploy script:\n\n```bash\nsnow sql -f 2_dcm_project/scripts/post_deploy.sql \\\n  --variable \"env_suffix=_DEV\" --enable-templating JINJA\n```\n\nHere's what this does:\n\n- Grants usage on the Openflow deployment to **SUMMIT_ROLE_DEV**\n- Creates an Openflow runtime named **SUMMIT_RUNTIME** in `SUMMIT_DB_DEV.OPENFLOW`\n- Attaches the external access integration for Kafka network access\n- Grants USAGE and OPERATE on the runtime to **SUMMIT_ROLE_DEV**\n\n\n### Post-Deploy: Seed initial data\n\nWith the infrastructure deployed, let's populate the initial reference data.\n\nThe seed script inserts reference data (locations, customers, shipping products) and one complete end-to-end order example:\n\n```bash\nsnow sql -f 2_dcm_project/scripts/seed_data.sql \\\n  --variable \"env_suffix=_DEV\" --enable-templating JINJA\n```\n\nHere's what gets loaded:\n\n- **20 European logistics locations** — hubs, warehouses, offices, and pickup points across 15 countries\n- **50 customers** — a mix of companies and individuals\n- **8 shipping products** — standard, express, economy, and envelope services\n- **1 sample order** — a complete lifecycle from Schneider Electronics (Berlin) to Marie Dupont (Paris), including order items, payment, package, 7 tracking events, and delivery\n\n### Explore the Data model\n\nYou can now open a workspace sql file and explore the created objects. There is only 1 Order at the moment, but we will start streaming soon.\n\n```sql\nUSE ROLE SUMMIT_ADMIN;\nUSE WAREHOUSE SUMMIT_WH;\nUSE DATABASE SUMMIT_DB_DEV;\nUSE SCHEMA RAW;\n\nSHOW TABLES;\n\nSELECT * FROM CUSTOMERS ORDER BY 1;\nSELECT * FROM ORDERS ORDER BY 1;\nSELECT * FROM PAYMENTS ORDER BY 1;\nSELECT * FROM PACKAGES ORDER BY 1;\nSELECT * FROM TRACKING_EVENTS ORDER BY 1;\n```\n\nIn the RAW schema you will see the following data model:\n\n```\n┌─────────────────┐       ┌──────────────────────┐\n│   CUSTOMERS     │       │  SHIPPING_PRODUCTS   │\n│─────────────────│       │──────────────────────│\n│ customer_id PK  │       │ product_id PK        │\n│ customer_type   │       │ name                 │\n│ first_name      │       │ service_type         │\n│ last_name       │       │ zone                 │\n│ company_name    │       │ base_price           │\n│ email           │       │ max_weight/dims      │\n│ city, country   │       │ estimated_days       │\n└────────┬────────┘       └──────────┬───────────┘\n         │ 1:N                       │ 1:N\n         ▼                           ▼\n┌──────────────────────────────────────────────┐\n│                  ORDERS                      │\n│──────────────────────────────────────────────│\n│ order_id PK                                  │\n│ customer_id FK ──► CUSTOMERS                 │\n│ origin_location_id FK ──► LOCATIONS          │\n│ pickup_address/city/country                  │\n│ destination_address/city/country             │\n│ total_amount, currency                       │\n└───────┬──────────────────────────┬───────────┘\n        │ 1:N                      │ 1:1\n        ▼                          ▼\n┌─────────────────────────┐       ┌─────────────────────────┐\n│  ORDER_ITEMS            │       │       PAYMENTS          │\n│─────────────────────────│       │─────────────────────────│\n│ order_item_id PK        │       │ payment_id PK           │\n│ order_id FK ─► ORDERS   │       │ order_id FK ──► ORDERS  │\n│ product_id FK ─►        │       │ payment_method          │\n│   SHIPPING_PRODUCTS     │       │ card_last_four/brand    │\n│ quantity                │       │ card_country            │\n│ declared_contents       │       │ billing_addr/city/ctry  │\n│ declared_value          │       │ ip_address              │\n│ insurance_opted         │       │ device_fingerprint      │\n└────────┬────────────────┘       └─────────────────────────┘\n         │ 1:1                        ▲ fraud detection\n         ▼\n┌─────────────────────────┐     ┌────────────────────┐\n│     PACKAGES            │     │   LOCATIONS        │\n│─────────────────────────│     │────────────────────│\n│ package_id PK           │     │ location_id PK     │\n│ order_item_id FK ──►    │     │ name               │\n│   ORDER_ITEMS           │     │ type (HUB/WH/      │\n│ order_id FK ──► ORDERS  │     │   OFFICE/PICKUP)   │\n│ tracking_number         │     │ city, country      │\n│ actual_weight_kg        │     │ lat, lng           │\n│ status                  │     │ capacity           │\n└───────┬─────────────────┘     └─────┬──────────────┘\n        │ 1:N                         │ 1:N\n        ▼                             │\n┌──────────────────────┐              │\n│  TRACKING_EVENTS     │              │\n│──────────────────────│              │\n│ event_id PK          │              │\n│ package_id FK ─► PKG │              │\n│ location_id FK ──────┼──────────────┘\n│ event_timestamp      │\n│ event_type           │\n│ carrier              │\n└───────┬──────────────┘\n        │ 1:1\n        ▼\n┌──────────────────────┐\n│    DELIVERIES        │\n│──────────────────────│\n│ delivery_id PK       │\n│ package_id FK ─► PKG │\n│ driver_name          │\n│ actual_delivery_date │\n│ signature_collected  │\n│ status               │\n└──────────────────────┘\n\nFlow: CUSTOMER ─► ORDER ─► ORDER_ITEMS ─► PACKAGES ─► TRACKING_EVENTS ─► DELIVERIES\n                    │                                        │\n                    └──► PAYMENT                             └──► LOCATIONS\n```\n\n\u003C!-- ------------------------ --\u003E\n## Start streaming from Kafka\n\nNow that we have the RAW zone deployed, and all tables are in place, let's configure and start streaming data from Kafka topics.\n\n### Create Kafka Topics\n\n\u003E **Note:** If you're using the provided Kafka cluster for this lab, topics are already created and data is streaming. You can skip topic creation and the producer setup step below. Jump directly to the consumer testing.\n\nIf you're using your own Kafka cluster, you can create the topics the producer needs like this:\n\n```bash\nsource .env\nfor suffix in orders order-items payments packages tracking-events deliveries; do\n  rpk topic create \"${KAFKA_TOPIC_PREFIX}-${suffix}\"\ndone\n```\n\nLet's list the topics we have access to:\n\n```bash\nrpk topic list\n```\n\nYou should see 6 topics listed: `tms-orders`, `tms-order-items`, `tms-payments`, `tms-packages`, `tms-tracking-events`, and `tms-deliveries`.\n\n### Test the Producer (Dry Run)\n\nBefore pushing data to Kafka, verify the producer generates valid data by running it in dry-run mode:\n\n```bash\npython3 3_generate/tms_producer.py --dry-run --count 1\n```\n\nYou should see a single order printed to stdout with all its associated events (order items, payment, packages, tracking events, deliveries) as JSON messages.\n\n\u003E **Note:** The Kafka cluster provided for this lab is already producing events — you do not need to run the producer yourself. If you are using your own cluster, run the producer script to generate events and publish them to the Kafka topics.\n\n### Run the Producer\n\nNow push some orders to Kafka:\n\n```bash\npython3 3_generate/tms_producer.py --count 5 --delay 1\n```\n\nOn startup, the producer reads the last order ID from `.tms_producer_state.json` and resumes from that point, preventing duplicate messages from being sent to Kafka.\n\nEach order generates approximately 15-17 messages across the 6 topics. The producer prints a summary for each order:\n\n```text\n[1/5] order=ORD-00002 | items=2 | events=12 | msgs=17\n[2/5] order=ORD-00003 | items=1 | events=8 | msgs=15\n...\n\nDone. Produced 5 orders (82 total messages).\n```\n\n### Verify with the Consumer\n\nOptionally, verify that messages are flowing into Kafka by running the consumer. By default it runs in dry-run mode and does not commit offsets, so you can safely inspect messages without affecting your consumer group state. Pass `--commit` to persist offsets.\n\n```bash\npython3 3_generate/tms_consumer.py --from-beginning\n```\n\nYou should see formatted JSON messages from all 6 topics. Press `Ctrl+C` to stop.\n\n\u003C!-- ------------------------ --\u003E\n## Configure the Openflow Connector\n\nNow let's configure Openflow to continuously stream data from Kafka into the **RAW** schema. Openflow runs inside Snowflake and provides a visual flow-based interface for data ingestion.\n\n\n### Create a new Flow\n\nUsing the `SUMMIT_ADMIN` Role, Open the Openflow runtime in Snowsight, by Nagivating to **Ingestion \u003E OPENFLOW \u003E Launch Openflow \u003E Login to Control Plane**). You should see the Runtime that was created by the DCM project post-deploy script:\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_runtimes.png?v=e261180a)\n\nClick on the `Summit Runtime` to open the canvas.\n\n\u003E**Note** An error will occur if you try to open the canvas using the ACCOUNTADMIN Role. Make sure that you log out from Openflow, Set your Default Role to SUMMIT_ADMIN in Snowsight and Launch Openflow again.\n\nIn the canvas drag-and-drop **Import from Registry** → and choose the flow **kafka-json-sasl-topic2table-schemaev**, and Click Import.\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_import_from_registry.png?v=e261180a)\n\n### Configure Flow Parameters\n\nRight-click on the `Process Group` and update the 3 parameter contexts:\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_processor.png?v=e261180a)\n\n**Source Parameters:**\n\n| Parameter | Value |\n|:----------|:------|\n| Kafka Bootstrap Servers | `\u003CKAFKA_BOOTSTRAP_SERVERS\u003E` |\n| Kafka SASL Username | `\u003CKAFKA_USERNAME\u003E` |\n| Kafka SASL Password | `\u003CKAFKA_PASSWORD\u003E` |\n| Kafka Security Protocol | `SASL_SSL` |\n| Kafka SASL Mechanism | `SCRAM-SHA-256` |\n\n**The Source parameters**: add your Kafka broker, SASL username/password, use SASL_SSL as security protocol - these are all inside your `.env` file\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_source_params.png?v=e261180a)\n\n**Destination Parameters:**\n\n| Parameter | Value |\n|:----------|:------|\n| Destination Database | `SUMMIT_DB_DEV` |\n| Destination Schema | `RAW` |\n| Snowflake Role | `SUMMIT_INGEST_ROLE_DEV` |\n| Snowflake Authentication Strategy | `SNOWFLAKE_MANAGED` |\n\n**The Destination parameters**: Database `SUMMIT_DB_DEV`, schema `RAW`, role `SUMMIT_INGEST_ROLE_DEV`, use `SNOWFLAKE_MANAGED` authentication\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_destination_params.png?v=e261180a)\n\n**Ingestion Parameters:**\n\n| Parameter | Value |\n|:----------|:------|\n| Kafka Topics | `tms-.*` |\n| Kafka Topic Format | `pattern` |\n| Kafka Group Id | `\u003CKAFKA_USERNAME\u003E-group` |\n| Kafka Auto Offset Reset | `ealiest` |\n\n**Ingestion parameters**: update topic format to `pattern`, use pattern `tms-.*` for reading all topics starting with tms-, the consumer group is your `KAFKA_USERNAME` with `-group` suffix (e.g. tms-user-1-group)\n\nDeselect **Show Inherited Parameters** to show only the Ingestion parameters.\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_ingestion_params.png?v=e261180a)\n\n\n**Map Topic to Table names:** Update the Topic to Table mapping processor, by double chicking on the **main processor group**, and navigate to `Map Topic to Table` processor, the regex will remove the topic prefix and transform topic names to snowflake table names. For example the data from topic `order-items` will be mapped to snowflake table `ORDER_ITEMS`.\n\n```\n${kafka.topic:substringAfter('tms-'):replace('-', '_'):toUpper()}\n```\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_map_topic_1.png?v=e261180a)\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_map_topic_2.png?v=e261180a)\n\n### Check flow parameters fits the Kafka cluster endpoint\n\nBefore starting the flow, verify that the Kafka broker address in your flow parameters matches the endpoint allowed by the Snowflake network rule. If these don't match, Openflow won't be able to reach Kafka.\n\n**1. Check the actual broker endpoints from your Kafka cluster:**\n\n```bash\nrpk cluster info\n```\n\nNote the broker addresses in the output (e.g., `***.any.us-west-2.mpx.prd.cloud.redpanda.com:9092`).\n\n**2. Check what the Snowflake network rule allows:**\n\n```sql\nUSE ROLE SUMMIT_ADMIN;\nDESCRIBE INTEGRATION SUMMIT_EAI;\nDESCRIBE NETWORK RULE DCM_DB.NETWORK.REDPANDA_NETWORK_RULE;\n```\n\nThe `VALUE_LIST` column shows the allowed host:port entries. The broker addresses from `rpk cluster info` must be covered by this list.\n\n**3. Verify they match:**\n\nThe bootstrap URL in your Openflow Source Parameters (e.g., `***.any.us-west-2.mpx.prd.cloud.redpanda.com:9092`) should resolve to brokers listed in the network rule. If your cluster has different broker IDs or the network rule is outdated, update the network rule:\n\n```sql\nALTER NETWORK RULE DCM_DB.NETWORK.REDPANDA_NETWORK_RULE\n  SET VALUE_LIST = (\n    '\u003Cbootstrap-server\u003E:9092',\n    '\u003Cbroker-1\u003E:9092',\n    '\u003Cbroker-2\u003E:9092',\n    '\u003Cbroker-3\u003E:9092'\n  );\n```\n\n\u003E **Tip:** The bootstrap server uses the `.any.` subdomain which load-balances across brokers. The network rule must include both the bootstrap address and all individual broker addresses returned by `rpk cluster info`.\n\n\n### Start the Flow\n\nNow that we have the flow configured, let's start streaming.\n\n1. Enable all controller services by right-click on the main process group\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_enable_controller_services.png?v=e261180a)\n\n2. Right-click again on the main processor group and click **Start**\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_start_flow.png?v=e261180a)\n\nYou should see data flowing through the connector. The flow counters in the Openflow UI will show bytes and records being processed.\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_streaming.png?v=e261180a)\n\n### (Optionally) Import an existing Flow\n\n In the [`4_openflow/Openflow_Kafka_SUMMIT_DE238.json`](4_openflow/Openflow_Kafka_SUMMIT_DE238.json) you can find an example flow, that can be imported in case you get into configuration problems. \n\nYou drag-and-drop a new `Processor Group` in the main canvas, and import the file as in the screen bellow.\n\nThis flow already has all parameters pre-configured. You only need to set the Kafka related parameters in the source parameter group (`KAFKA_USERNAME`, `KAFKA_PASSWORD`, `KAFKA_BROKERS`) and the ingestion parameter group (`KAFKA_USERNAME-GROUP`).\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/openflow_import_flow.png?v=e261180a)\n\nNow you can **Enable Controller Services** and **Start** the Flow.\n\n\n### Verify Data in Snowflake\n\nAfter a few moments, check that data is landing in the RAW schema:\n\n```sql\nUSE ROLE SUMMIT_DEVELOPER_ROLE_DEV;\nUSE WAREHOUSE SUMMIT_WH_DEV;\nUSE SCHEMA SUMMIT_DB_DEV.RAW;\n\nSELECT 'ORDERS' AS table_name, COUNT(*) AS row_count FROM ORDERS\nUNION ALL SELECT 'ORDER_ITEMS', COUNT(*) FROM ORDER_ITEMS\nUNION ALL SELECT 'PAYMENTS', COUNT(*) FROM PAYMENTS\nUNION ALL SELECT 'PACKAGES', COUNT(*) FROM PACKAGES\nUNION ALL SELECT 'TRACKING_EVENTS', COUNT(*) FROM TRACKING_EVENTS\nUNION ALL SELECT 'DELIVERIES', COUNT(*) FROM DELIVERIES;\n```\n\nYou should see row counts increasing as data streams in from Kafka.\n\n\u003C!-- ------------------------ --\u003E\n## Explore the Dynamic Tables\n\nWith data flowing into RAW, the Dynamic Tables in the **TRANSFORM** schema automatically refresh on a 1-minute target lag. The pipeline uses a two-layer architecture: Layer 1 cleans and deduplicates raw data, and Layer 2 builds analytic aggregations on top.\n\n### Layer 1: Clean Tables\n\nThe first layer applies deduplication, TRIM on strings, and UPPER on status/type fields. For example, here's the clean customers table:\n\n```sql\n-- DT_CLEAN_CUSTOMERS: deduplicates by CUSTOMER_ID, trims strings, normalizes types\nSELECT\n    CUSTOMER_ID,\n    UPPER(TRIM(CUSTOMER_TYPE)) AS CUSTOMER_TYPE,\n    TRIM(FIRST_NAME) AS FIRST_NAME,\n    TRIM(LAST_NAME) AS LAST_NAME,\n    TRIM(COMPANY_NAME) AS COMPANY_NAME,\n    TRIM(EMAIL) AS EMAIL,\n    TRIM(CITY) AS CITY,\n    TRIM(COUNTRY) AS COUNTRY,\n    COALESCE(UPPER(TRIM(ACCOUNT_STATUS)), 'ACTIVE') AS ACCOUNT_STATUS,\n    CREATED_AT\nFROM SUMMIT_DB_DEV.RAW.CUSTOMERS\nQUALIFY ROW_NUMBER() OVER (PARTITION BY CUSTOMER_ID ORDER BY CUSTOMER_ID) = 1;\n```\n\nThere are 9 clean dynamic tables total — one for each RAW table. They all use the same pattern: deduplicate on the primary key, trim strings, and standardize categorical values with UPPER.\n\n### Layer 2: Analytic Tables\n\nThe second layer builds business-ready aggregations by joining across the clean tables. Let's examine each one.\n\n**DT_ORDER_SUMMARY** — A denormalized view of every order with customer info, item counts, package counts, and delivery status:\n\n```sql\nUSE SCHEMA SUMMIT_DB_DEV.TRANSFORM;\n\nSELECT * \nFROM DT_ORDER_SUMMARY \nORDER BY ORDER_DATE DESC LIMIT 10;\n```\n\nYou should see columns like `CUSTOMER_NAME`, `ORDER_STATUS`, `TOTAL_ITEMS`, `TOTAL_PACKAGES`, `ORDER_VALUE`, and `DAYS_SINCE_ORDER`.\n\n**DT_PACKAGE_TRACKING** — Package-level tracking showing transit progress, hubs visited, and transit hours:\n\n```sql\nSELECT PACKAGE_ID, TRACKING_NUMBER, PACKAGE_STATUS, HUBS_VISITED, TRANSIT_HOURS, CARRIER\nFROM DT_PACKAGE_TRACKING\nORDER BY FIRST_SCAN DESC LIMIT 10;\n```\n\n**DT_PACKAGE_HOPS** — The hop-by-hop journey of every package through the logistics network:\n\n```sql\nSELECT TRACKING_NUMBER, HOP_NUMBER, LOCATION_NAME, LOCATION_CITY, EVENT_TYPE, \n       MINUTES_SINCE_PREV_HOP, CUMULATIVE_MINUTES\nFROM DT_PACKAGE_HOPS\nWHERE TRACKING_NUMBER = 'TMS-2025-000001'\nORDER BY HOP_NUMBER;\n```\n\nYou should see the sample order's journey: Berlin Central Hub → Frankfurt Airport Hub → Paris North Hub → delivered.\n\n**DT_LOCATION_ACTIVITY** — Daily throughput and dwell-time percentiles for each logistics location:\n\n```sql\nSELECT LOCATION_NAME, LOCATION_TYPE, CITY, ACTIVITY_DATE,\n       NUM_PACKAGES, PACKAGES_ARRIVED, PACKAGES_DEPARTED,\n       PROCESSING_P75_MINUTES, PROCESSING_P90_MINUTES\nFROM DT_LOCATION_ACTIVITY\nORDER BY ACTIVITY_DATE DESC, NUM_PACKAGES DESC\nLIMIT 10;\n```\n\n**DT_FRAUD_DETECTION** — Payment fraud scoring (we'll populate this in the next step):\n\n```sql\nSELECT COUNT(*) AS fraud_results FROM DT_FRAUD_DETECTION;\n```\n\nThis table will be empty until we run the fraud detection pipeline in the next step.\n\n### Check Dynamic Table Health\n\nVerify all dynamic tables are refreshing properly:\n\n```sql\nSHOW DYNAMIC TABLES IN SCHEMA SUMMIT_DB_DEV.TRANSFORM;\n```\n\nLook at the `scheduling_state` column — all tables should show `ACTIVE`. The `last_completed_time` column shows when each table last refreshed.\n\n\u003C!-- ------------------------ --\u003E\n## Run AI-Powered Fraud Detection\n\nThe fraud detection pipeline uses heuristic scoring to identify suspicious payments. In production, this would run continuously as a Cortex AI function; for this lab, we'll run it as a batch process that scores payments and writes results to the **FRAUD_DETECTION_RESULTS** table.\n\n### Understanding the Fraud Signals\n\nThe fraud detector evaluates 6 independent signals for each payment:\n\n| Signal | Weight | Trigger |\n|:-------|:-------|:--------|\n| `billing_country_mismatch` | +0.35 | Billing country ≠ customer country |\n| `card_country_mismatch` | +0.30 | Card issuing country ≠ customer country |\n| `ip_geolocation_mismatch` | +0.25 | IP prefix doesn't match customer country |\n| `known_fraud_device` | +0.40 | Device fingerprint in known-fraud pool |\n| `velocity_abuse` | +0.30 | 5+ payments from same customer in 5 minutes |\n| `high_declared_value` | +0.20 | Total declared value \u003E EUR 20,000 |\n\nA payment is flagged as fraudulent when its combined score reaches 0.30 or higher.\n\n### Run the Fraud Producer\n\n\u003E**Note:** We are generating fraud payments already in the provided Kafka Cluster. Run this only if you are using your own Kafka Cluster.\n\nLet's produce some orders with a higher fraud rate to see the detector in action:\n\n```bash\nsource .env\npython3 3_generate/tms_producer.py --count 50 --delay 0.5 --fraud-rate 0.10\n```\n\nThis generates 50 orders with a 10% fraud rate, meaning roughly 5 orders will have deliberately fraudulent payment patterns injected by the producer.\n\n### Score Payments Using the Notebook\n\nOpen the [`5_fraud_detection/fraud_detection_notebook.ipynb`](5_fraud_detection/fraud_detection_notebook.ipynb) notebook in Snowflake Notebooks or your local Jupyter environment.\n\n**Snowflake Notebooks setup:** When you create or import the notebook in Snowsight (Projects → Workspaces → Upload Files), you'll need to configure your default compute service:\n\n- **Service Name**: `USER_SERVICE`\n- **Service Settings**: `SYSTEM_COMPUTE_POOL_CPU (CPU_X64_S)`\n\nClick **Create and Connect**. Wait for Connection to be established, it should not take more than 1 minute.\n\nOn the top right choose your running Role and Warehouse:\n\n- **Role**: `SUMMIT_DEVELOPER_ROLE_DEV`\n- **Warehouse**: Select `SUMMIT_WH_DEV`\n\nEnable the current session credentials by updating the first Cell, comment lines 8-10 with Local setup, uncomment the lines 13-14 with snowsight setup.\n\n```python\n# If running in Snowsight Workspace, use the block below\nsession = get_active_session()\nconn = session.connection\n```\n\n\n**Local Jupyter setup:** If you prefer to run the notebook locally:\n\n```bash\nsource .venv/bin/activate\n```\n\nUpdate first Cell, and enable the line 8-10 with Local setup, comment the lines 13-14 with snowsight setup.\n\n```python\n# If running locally, use the block below\nconn = snowflake.connector.connect(\n    connection_name=\"summit\"\n)\n```\n\n\nThen open the notebook in VS Code or Jupyter Lab, select the **.venv/bin/python** kernel, and run all cells. The notebook connects to Snowflake using the `summit` named connection from your Snowflake CLI config:\n\n\nMake sure you've already run `bash helpers/setup_snow_cli_connection.sh` (from the environment setup step) so the `summit` connection exists and is configured with your PAT.\n\n#### What the notebook does\n\n1. Reads unscored payments from `SUMMIT_DB_DEV.TRANSFORM.DT_CLEAN_PAYMENTS`\n2. Joins with order and customer data for context\n3. Runs each payment through the 6-signal heuristic fraud scorer\n4. Writes scored results to `SUMMIT_DB_DEV.TRANSFORM.FRAUD_DETECTION_RESULTS`\n5. **AI Enrichment** — uses Cortex AI to classify and explain each flagged payment:\n   - `AI_CLASSIFY` assigns a fraud type (`identity_theft`, `card_testing`, `account_takeover`, `synthetic_identity`, or `friendly_fraud`)\n   - `AI_COMPLETE` (mistral-large2) generates a 2–3 sentence natural language explanation of why the payment is fraudulent\n6. Updates the results table with `FRAUD_TYPE` and `EXPLANATION` columns\n\nAfter running the notebook, verify fraud detections:\n\n```sql\nUSE ROLE SUMMIT_DEVELOPER_ROLE_DEV;\nUSE SCHEMA SUMMIT_DB_DEV.TRANSFORM;\n\nSELECT COUNT(*) AS total_scored,\n       SUM(CASE WHEN IS_FRAUD THEN 1 ELSE 0 END) AS flagged_fraud,\n       ROUND(AVG(FRAUD_SCORE), 3) AS avg_score\nFROM FRAUD_DETECTION_RESULTS;\n```\n\n### Explore the AI-Enriched Fraud Results\n\nCheck the AI-classified fraud types and explanations:\n\n```sql\nSELECT PAYMENT_ID, FRAUD_SCORE, FRAUD_TYPE, EXPLANATION\nFROM FRAUD_DETECTION_RESULTS\nWHERE IS_FRAUD = TRUE\nORDER BY FRAUD_SCORE DESC LIMIT 5;\n```\n\nYou should see each flagged payment classified into a fraud type (e.g., `identity_theft` for geographic mismatches, `card_testing` for known fraud devices) with a natural language explanation.\n\n### Explore the Fraud Detection Dynamic Table\n\nThe **DT_FRAUD_DETECTION** dynamic table automatically enriches the raw fraud results with payment details, customer information, and order context:\n\n```sql\nSELECT CUSTOMER_NAME, CUSTOMER_COUNTRY, PAYMENT_METHOD, CARD_BRAND,\n       CARD_COUNTRY, BILLING_COUNTRY, PAYMENT_AMOUNT,\n       FRAUD_SCORE, IS_FRAUD, FRAUD_SIGNALS, FRAUD_TYPE, EXPLANATION\nFROM SUMMIT_DB_DEV.TRANSFORM.DT_FRAUD_DETECTION\nWHERE IS_FRAUD = TRUE\nORDER BY FRAUD_SCORE DESC\nLIMIT 10;\n```\n\nYou should see flagged payments with their triggered signals (e.g., `billing_country_mismatch`, `known_fraud_device`), AI-classified fraud type, and a human-readable explanation of why the payment was flagged.\n\n\u003C!-- ------------------------ --\u003E\n## Query the Analytics Layer\n\nThe **ANALYTICS** schema provides clean views on top of the transform layer. These are the consumer-facing objects designed for dashboards, analysts, and Cortex Agents.\n\n```sql\nUSE ROLE SUMMIT_DEVELOPER_ROLE_DEV;\nUSE SCHEMA SUMMIT_DB_DEV.ANALYTICS;\n\nSHOW VIEWS;\n```\n\n### Order Summary\n\nGet a high-level view of all orders:\n\n```sql\nSELECT ORDER_ID, CUSTOMER_NAME, ORDER_DATE, ORDER_STATUS,\n       DESTINATION_CITY, TOTAL_ITEMS, ORDER_VALUE, DAYS_SINCE_ORDER\nFROM ORDER_SUMMARY\nWHERE ORDER_STATUS = 'DELIVERED'\nORDER BY ORDER_DATE DESC\nLIMIT 20;\n```\n\n### Package Tracking\n\nTrack packages in transit:\n\n```sql\nSELECT TRACKING_NUMBER, CUSTOMER_NAME, DESTINATION_CITY,\n       PACKAGE_STATUS, HUBS_VISITED, TRANSIT_HOURS, CARRIER\nFROM PACKAGE_TRACKING\nWHERE PACKAGE_STATUS != 'DELIVERED'\nORDER BY FIRST_SCAN DESC;\n```\n\n### Fraud Alerts\n\nSurface high-risk payments for review:\n\n```sql\nSELECT CUSTOMER_NAME, PAYMENT_AMOUNT, FRAUD_SCORE, FRAUD_SIGNALS,\n       CARD_COUNTRY, BILLING_COUNTRY, CUSTOMER_COUNTRY\nFROM FRAUD_DETECTION\nWHERE IS_FRAUD = TRUE\nORDER BY PAYMENT_TIMESTAMP DESC;\n```\n\n### Location Performance\n\nIdentify bottleneck locations by processing time:\n\n```sql\nSELECT LOCATION_NAME, LOCATION_TYPE, CITY, COUNTRY,\n       NUM_PACKAGES, PROCESSING_P90_MINUTES\nFROM LOCATION_ACTIVITY\nWHERE ACTIVITY_DATE = CURRENT_DATE()\nORDER BY PROCESSING_P90_MINUTES DESC\nLIMIT 10;\n```\n\nThese views are ready to be consumed by a Cortex Agent — the agent can query them using natural language to answer questions like \"Which packages are delayed?\", \"Show me today's fraud alerts\", or \"What's the busiest hub right now?\"\n\n\n\u003C!-- ------------------------ --\u003E\n## Create Semantic View using Cortex Code\n\nA semantic view defines the business meaning of your data — dimensions, metrics, relationships, and verified queries — so that Cortex Analyst and Cortex Agents can answer natural language questions accurately.\n\nWe'll use **Cortex Code** to generate the semantic view SQL from a natural language prompt, then deploy it.\n\n\u003E **Important:** The semantic view must be created using the `SUMMIT_ADMIN` role (which owns the `ANALYTICS` schema). If you're running in a Snowsight worksheet, run `USE ROLE SUMMIT_ADMIN;` first. The `snow sql` CLI command already uses this role via your `summit` connection.\n\n### The Prompt\n\nOpen Cortex Code (in Snowsight or the Cortex Code CLI) and paste the following prompt from [`6_cortex-agent/create_semantic_view_prompt.txt`](6_cortex-agent/create_semantic_view_prompt.txt):\n\n```text\nCreate a semantic view named SUMMIT_DB_DEV.ANALYTICS.TMS_SEMANTIC_VIEW over the following views\nin the ANALYTICS schema of SUMMIT_DB_DEV:\n\n- ORDER_SUMMARY\n- PACKAGE_TRACKING\n- PACKAGE_HOPS\n- LOCATION_ACTIVITY\n- FRAUD_DETECTION\n\nRequirements:\n1. Add meaningful descriptions to the semantic view itself and to every table, column, dimension,\n   and metric so that Cortex Analyst understands the business context of a Transportation\n   Management System (TMS) for a pan-European shipping company.\n2. Define appropriate relationships (joins) between the tables based on shared keys (ORDER_ID,\n   PACKAGE_ID, CUSTOMER_NAME, etc.).\n3. Add at least 3 verified queries (examples) that demonstrate how to use the semantic view.\n\nRules:\nStart the SQL file with `USE ROLE SUMMIT_ADMIN;` and `USE WAREHOUSE SUMMIT_WH_DEV;`.\nCreate only a SQL file and save it locally.\nUse the local repository to get information about schema objects.\nDo not try to run snowflake statements. Do not run the SQL yet.\n```\n\nCortex Code will generate a `CREATE SEMANTIC VIEW` statement with tables, relationships, dimensions, metrics, facts, verified queries, and AI generation/categorization hints.\n\n### The Generated SQL\n\nExplore the generated SQL. There is one for backup here as well [`6_cortex-agent/create_semantic_view.sql`](6_cortex-agent/create_semantic_view.sql). Here are the key elements:\n\n**Tables** — Maps 5 analytics views with primary keys, synonyms, and business descriptions:\n\n```sql\nTABLES (\n    order_summary AS SUMMIT_DB_DEV.ANALYTICS.ORDER_SUMMARY\n      PRIMARY KEY (ORDER_ID)\n      WITH SYNONYMS ('orders', 'shipments', 'order details')\n      COMMENT = 'Denormalized order view with customer info, item counts, ...',\n    package_tracking AS SUMMIT_DB_DEV.ANALYTICS.PACKAGE_TRACKING\n      PRIMARY KEY (PACKAGE_ID) ...,\n    package_hops AS SUMMIT_DB_DEV.ANALYTICS.PACKAGE_HOPS ...,\n    location_activity AS SUMMIT_DB_DEV.ANALYTICS.LOCATION_ACTIVITY ...,\n    fraud_detection AS SUMMIT_DB_DEV.ANALYTICS.FRAUD_DETECTION ...\n)\n```\n\n**Relationships** — Defines joins between tables:\n\n```sql\nRELATIONSHIPS (\n    package_tracking_to_orders AS\n      package_tracking (ORDER_ID) REFERENCES order_summary,\n    package_hops_to_tracking AS\n      package_hops (PACKAGE_ID) REFERENCES package_tracking,\n    fraud_to_orders AS\n      fraud_detection (ORDER_ID) REFERENCES order_summary\n)\n```\n\n**Dimensions** — Business attributes like `CUSTOMER_NAME`, `ORDER_STATUS`, `CARRIER`, `IS_FRAUD`, `FRAUD_SIGNALS`, each with synonyms and descriptions.\n\n**Metrics** — Aggregations like `total_orders`, `avg_transit_hours`, `total_fraud_flagged`, `total_fraud_amount`, each with formulas and descriptions.\n\n**Verified Queries** — 3 pre-verified queries that serve as examples for Cortex Analyst:\n- \"Which packages are currently in transit and how many hubs have they visited?\"\n- \"Show me the top 5 locations with the highest P90 processing time today\"\n- \"List all fraudulent payments detected in the last 7 days\"\n\n**AI Hints** — `AI_SQL_GENERATION` and `AI_QUESTION_CATEGORIZATION` clauses that guide the LLM on date handling, status filtering, and topic boundaries.\n\n### Validate semantic view before execution\n\nYou can ask Cortex Code to validate the semantic view before execution and fix errors if possible:\n\n```text\nValidate the semantic view SQL syntax by compiling it against Snowflake before execution\n```\n\n### Deploy the Semantic View\n\nRun the SQL file:\n\n```bash\nsnow sql -f 6_cortex-agent/create_semantic_view.sql\n```\n\nVerify it was created:\n\n```sql\nUSE ROLE SUMMIT_ADMIN;\nSHOW SEMANTIC VIEWS IN SCHEMA SUMMIT_DB_DEV.ANALYTICS;\n```\n\n### Test the Semantic View\n\nVerify the semantic view was created and inspect its structure:\n\n```sql\nDESCRIBE SEMANTIC VIEW SUMMIT_DB_DEV.ANALYTICS.TMS_SEMANTIC_VIEW;\n```\n\nYou can test it as well using Cortex Code:\n\n```text\nTest the 3 onboarding queries in TMS_SEMANTIC_VIEW to verify Cortex can resolve dimensions and metrics correctly\n```\n\nTo test it interactively, open **Snowflake Intelligence** in Snowsight (AI & ML → Cortex Agents) and create a new conversation using the `TMS_SEMANTIC_VIEW` as the data source. Try asking: \"Which packages are currently in transit?\"\n\nAlternatively, you can test it in the next step by deploying the Cortex Agent, which uses this semantic view under the hood.\n\n\u003C!-- ------------------------ --\u003E\n## Create a Cortex Agent\n\nNow let's create a conversational agent that uses the semantic view to answer questions in natural language. The agent will serve as the \"Talk-to-your-data\" interface for EuroShip Logistics operations teams.\n\n### The Prompt\n\nOpen Cortex Code and use the prompt from [`6_cortex-agent/create_agent_prompt.txt`](6_cortex-agent/create_agent_prompt.txt):\n\n```text\nCreate a Cortex Agent named SUMMIT_DB_DEV.ANALYTICS.TMS_AGENT that uses the semantic view SUMMIT_DB_DEV.ANALYTICS.TMS_SEMANTIC_VIEW as its data source.\n\nRequirements:\n1. The agent should be able to answer natural language questions about the TMS (Transportation Management System) data: orders, package tracking, logistics hub performance, and fraud detection.\n2. Give the agent a clear description and instructions so it understands it serves a pan-European shipping company called EuroShip Logistics.\n3. The agent should respond concisely and include relevant data in its answers.\n\nAfter creating the agent, provide 3 example prompts to demonstrate how to use it:\n- \"Which packages are currently delayed and where are they stuck?\"\n- \"What is our fraud detection rate this week compared to last week?\"\n- \"Show me the busiest hubs today and their average processing times\"\n\nRules:\nCreate only a SQL file and save it locally. Do not run the SQL yet.\nUse the local repository to get information about schema objects.\n```\n\n### Agent Configuration\n\nExplore the generated SQL, there is one. backup here as well at [`6_cortex-agent/create_agent.sql`](6_cortex-agent/create_agent.sql):\n\n**Tools** — The agent uses two tools:\n- `cortex_analyst_text_to_sql` — translates natural language to SQL using the semantic view\n- `data_to_chart` — generates visualizations from query results\n\n**Instructions** — The agent knows it serves EuroShip Logistics and:\n- Defaults to the last 7 days when time range is ambiguous\n- Uses EUR as the default currency\n- Rounds percentages to 1 decimal place\n- Always mentions fraud scores and signals when discussing fraud\n- Proactively highlights concerning metrics\n\n**Sample Questions** — Pre-configured onboarding questions:\n- \"Which packages are currently delayed and where are they stuck?\"\n- \"What is our fraud detection rate this week compared to last week?\"\n- \"Show me the busiest hubs today and their average processing times\"\n- \"How many orders were delivered in the last 7 days?\"\n- \"What are the top fraud signals this month?\"\n\n### Deploy the Agent\n\n```bash\nsnow sql -f 6_cortex-agent/create_agent.sql\n```\n\nVerify it was created:\n\n```sql\nUSE ROLE SUMMIT_ADMIN;\nSHOW AGENTS IN SCHEMA SUMMIT_DB_DEV.ANALYTICS;\n```\n\n### Chat with the Agent\n\nOpen the agent in **Snowflake Intelligence** (Snowsight → AI & ML → Cortex Agents → `TMS_AGENT`) for a full chat interface with visualization support.\n\nYou can also interact with the agent programmatically using the Cortex Agents REST API or via **Cortex Code** by typing a question and selecting the agent as the data source.\n\n\u003C!-- ------------------------ --\u003E\n## Work with Snowflake Intelligence\n\nOnce the Cortex Agent is deployed, it appears automatically in **Snowflake Intelligence**. Navigate to **AI & ML → Cortex Agents** in Snowsight to find `TMS_AGENT`.\n\nFrom Snowflake Intelligence you can:\n- Chat with the agent using natural language\n- See the generated SQL for transparency\n- View chart visualizations inline\n- Share conversations with team members\n- Pin useful queries as bookmarks\n\n### Example Conversations\n\nTry these prompts to see the agent in action:\n\n```text\n\"How many orders were placed today and what's the total revenue?\"\n\"Show me all fraud alerts from the last 7 days with their explanations\"\n\"What are the top 3 busiest hubs right now by package volume?\"\n\"Which carriers have the longest average transit times?\"\n\"Compare this week's fraud rate to last week\"\n```\n\nThe agent will use the semantic view to generate SQL, execute it, and return formatted results with context.\n\n![Openflow Runtimes](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/cortex_agent.png?v=e261180a)\n\nIf you Click on **Show Traces** you can see detailed execution tracking, with performance metrics and tokens consumed.\n\n\u003C!-- ------------------------ --\u003E\n## Build a Streamlit Dashboard with Cortex Code\n\nNow let's use **Cortex Code** to vibe-code a Streamlit in Snowflake (SiS) operations dashboard for EuroShip Logistics. Instead of writing the app manually, you'll give Cortex Code a detailed prompt and let it generate the full application.\n\n### Prepare the Prompt\n\nThe prompt file is already provided at [`7_streamlit/create_streamlit_app_prompt.txt`](7_streamlit/create_streamlit_app_prompt.txt). It instructs Cortex Code to build a multi-page Streamlit app with:\n\n- **Dashboard** — KPIs (total orders, packages in transit, fraud alerts, avg transit hours) and trend charts\n- **Package Tracking** — Searchable, filterable table of all packages\n- **Fraud Alerts** — Flagged payments with AI-generated explanations and a fraud score slider\n- **Location Performance** — Hub/warehouse metrics with P90 processing times\n\nThe Prompt:\n\n```text\nBuild a Streamlit in Snowflake (SiS) app for the EuroShip Logistics TMS system.\n\nThe app should connect to SUMMIT_DB_DEV.ANALYTICS and provide:\n\n1. **Dashboard page** — Key KPIs at the top (total orders, packages in transit, fraud alerts, avg transit hours), followed by charts showing:\n   - Orders over time (line chart)\n   - Package status distribution (bar chart)\n   - Top 10 busiest hubs by package volume (horizontal bar chart)\n\n2. **Package Tracking page** — A searchable table of all packages with filters for status (IN_TRANSIT, DELIVERED, etc.) and carrier. Show tracking number, customer, destination, status, hubs visited, and transit hours.\n\n3. **Fraud Alerts page** — A table of flagged fraudulent payments with fraud score, fraud type, triggered signals, and the AI-generated explanation. Add a filter for minimum fraud score threshold (slider from 0.3 to 1.0).\n\n4. **Location Performance page** — A table and bar chart of hub/warehouse performance metrics: location name, type, city, country, number of packages processed, and P90 processing time in minutes. Add date filter.\n\nRequirements:\n- Use the role SUMMIT_ADMIN and warehouse SUMMIT_WH_DEV.\n- Query these views: ORDER_SUMMARY, PACKAGE_TRACKING, FRAUD_DETECTION, LOCATION_ACTIVITY.\n- Use st.connection(\"snowflake\") for the Snowflake connection.\n- Use Streamlit's built-in charting (st.bar_chart, st.line_chart) or st.altair_chart for more control.\n- Add a sidebar with page navigation using st.navigation and st.Page.\n- Apply clean formatting with st.metric for KPIs.\n- The app title should be \"EuroShip Logistics — TMS Operations\".\n\nRules:\n- Create only the Python app file and save it locally as `7_streamlit/tms_app.py`.\n- Do not deploy the app yet.\n- Use the local repository to get information about schema objects and column names.\n```\n\n### Generate the App with Cortex Code\n\n1. Open **Cortex Code** — either in the desktop IDE or through the Snowsight integration.\n\n2. Make sure you have the project repository open as your workspace so Cortex Code can reference the schema objects.\n\n3. Paste the contents of `7_streamlit/create_streamlit_app_prompt.txt` into the Cortex Code chat panel.\n\n4. Cortex Code will generate a complete `tms_app.py` file. Review the generated code — it should:\n   - Use `st.connection(\"snowflake\")` for the database connection\n   - Query the `ANALYTICS` schema views (`ORDER_SUMMARY`, `PACKAGE_TRACKING`, `FRAUD_DETECTION`, `LOCATION_ACTIVITY`)\n   - Use `st.navigation` and `st.Page` for multi-page layout\n   - Display KPIs with `st.metric` and charts with `st.bar_chart` / `st.line_chart`\n\n5. Save the generated file to `7_streamlit/tms_app.py`.\n\n### Run Locally\n\nTo test the app locally before deploying:\n\n```bash\nsource .venv/bin/activate\nstreamlit run 7_streamlit/tms_app.py\n```\n\nThis uses your local `summit` Snowflake CLI connection via `st.connection(\"snowflake\")`.\n\n### Deploy to Snowflake (Optional)\n\nOnce you're happy with the generated app, let's update the connection and deploy it as a Streamlit in Snowflake app:\n\nCortex Code:\n\n```text\nUpdate the streamlit app to use streamlit snowflake connection\n```\n\nDeploy using snow cli:\n\n```bash\nsnow streamlit deploy tms_operations_app \\\n  --replace \\\n  --database SUMMIT_DB_DEV \\\n  --role SUMMIT_ADMIN \\\n  --project 7_streamlit\n```\n\nNow Open the Link printed after deploy:\n\n`Streamlit successfully deployed and available under https://app.snowflake.com/...`\n\nStill get errors? Cortex Code is your friend. Just paste the error in the prompt and ask to fix.\n\n### Iterate with Cortex Code\n\nThe power of this approach is iteration. If you want to add features or change the layout, simply ask Cortex Code:\n\n- \"Provide a date selector for the Dashboard, with default to last 7 days\"\n- \"Add a map visualization showing package locations across Europe\"\n- \"Add a real-time refresh button that re-queries the data\"\n- \"Change the fraud alerts page to highlight critical scores in red\"\n\nCortex Code will modify the existing file in place, preserving what works and adding the requested changes.\n\n\u003C!-- ------------------------ --\u003E\n## Bonus: Configure github actions for your DCM project\n\nAutomate DCM deployments using GitHub Actions so that pushes to specific branches trigger `snow dcm plan` and `snow dcm deploy` against the correct environment.\n\n### Multi-Environment Strategy\n\nThe `manifest.yml` already defines three targets with Jinja-templated suffixes:\n\n| Branch | Target | Suffix | Account |\n|:-------|:-------|:-------|:--------|\n| `main` | `DCM_DEV` | `_DEV` | Dev account |\n| `staging` | `DCM_STAGE` | `_STAGE` | Stage account |\n| `production` | `DCM_PROD` | `_PROD` | Prod account |\n\nEach target creates isolated objects (e.g., `SUMMIT_DB_DEV`, `SUMMIT_DB_STAGE`, `SUMMIT_DB_PROD`) using the same definitions.\n\nYou will need a Github account for this, where you will upload the dcm project.\n\nSee these 2 Quickstarts for reference:\n - https://www.snowflake.com/en/developers/guides/get-started-snowflake-dcm-projects/\n - https://www.snowflake.com/en/developers/guides/build-data-pipelines-with-snowflake-dcm-projects/\n\n\u003C!-- ------------------------ --\u003E\n## Cleanup\n\nWhen you're done exploring, tear down all resources created by this guide.\n\n### Stop the Openflow Connector\n\nIn the Openflow UI, right-click on the process group and click **Stop**. Wait for all processors to stop before proceeding. Then disable controllers.\n\n### Drop All Resources\n\nRun the tear-down script to remove the database, warehouse, roles, and Openflow runtime:\n\n```bash\nsnow sql -f 2_dcm_project/scripts/tear_down.sql \\\n  --variable \"env_suffix=_DEV\" --enable-templating JINJA\n```\n\nHere's what gets dropped in order:\n\n1. Suspends and drops the Openflow runtime\n2. Drops the **SUMMIT_DB_DEV** database (removes all schemas, tables, dynamic tables, views, and data)\n3. Drops the **SUMMIT_WH_DEV** warehouse\n4. Drops roles: **SUMMIT_INGEST_ROLE_DEV**, **SUMMIT_DEVELOPER_ROLE_DEV**\n5. Drops the DCM project object\n\n### Drop Bootstrap Resources (Optional)\n\nIf you also want to remove the DCM infrastructure and Openflow deployment:\n\n```sql\nUSE ROLE ACCOUNTADMIN;\n\nALTER OPENFLOW DEPLOYMENT SUMMIT_DEPLOYMENT TERMINATE;\nDROP DATABASE IF EXISTS DCM_DB;\nDROP WAREHOUSE IF EXISTS SUMMIT_WH;\nDROP ROLE IF EXISTS SUMMIT_ADMIN;\n```\n\n\u003E **Note:** Terminating the Openflow deployment takes a few minutes to complete.\n\n### Delete Kafka Topics (Optional)\n\nIf you created topics on your own cluster:\n\n```bash\nsource .env\nfor suffix in orders order-items payments packages tracking-events deliveries; do\n  rpk topic delete \"${KAFKA_TOPIC_PREFIX}-${suffix}\"\ndone\n```\n\n\u003C!-- ------------------------ --\u003E\n## Conclusion and Resources\n\nCongratulations! You've built a complete real-time data platform that streams logistics events from Kafka, transforms them through a multi-layer Dynamic Table pipeline, scores payments for fraud using AI, and exposes clean analytics views ready for agent consumption — all defined as code using DCM Projects.\n\n### What You Learned\n\n- How to define an entire data platform as code using **DCM Projects** with Jinja templating for multi-environment support\n- How to provision and configure **Openflow** to stream data from Kafka into Snowflake using SASL authentication and regex-based topic-to-table mapping\n- How to build a **two-layer Dynamic Table architecture** — a clean layer for deduplication and standardization, and an analytic layer for business aggregations\n- How the entire pipeline refreshes automatically with 1-minute target lag, providing near real-time analytics on streaming data\n- How to structure an **analytics layer** with views that serve as the interface for Cortex Agents and dashboards\n- How to implement **AI-powered fraud detection** using heuristic scoring enriched with Cortex AI (`AI_CLASSIFY` + `AI_COMPLETE`) for fraud classification and explanation\n- How to create a **Semantic View** with Cortex Code that defines dimensions, metrics, relationships, and verified queries for natural language querying\n- How to deploy a **Cortex Agent** that uses the semantic view to answer operational questions in plain English\n- How to use **Cortex Code** to vibe-code a **Streamlit in Snowflake** operations dashboard from a natural language prompt\n\n### Related Resources\n\n- [DCM Projects Documentation](https://docs.snowflake.com/en/user-guide/dcm-projects/dcm-projects-overview)\n- [Openflow Documentation](https://docs.snowflake.com/en/user-guide/data-load/openflow/openflow-overview)\n- [Dynamic Tables Documentation](https://docs.snowflake.com/en/user-guide/dynamic-tables-about)\n- [Cortex AI Documentation](https://docs.snowflake.com/en/user-guide/snowflake-cortex/overview)\n- [Streamlit in Snowflake](https://docs.snowflake.com/en/developer-guide/streamlit/about-streamlit)\n- [Snowflake CLI — DCM Projects](https://docs.snowflake.com/developer-guide/snowflake-cli/data-pipelines/dcm-projects)\n- [Get Started with Snowflake DCM Projects](https://www.snowflake.com/en/developers/guides/get-started-snowflake-dcm-projects/)\n",":type":"text/x-markdown","multiValue":false},"quickstartArticleLogoImage":{"title":"Quickstart Article Logo Image","dataType":"string",":type":"text/plain","multiValue":false}},"elementsOrder":["quickstartArticleBody","quickstartArticleLogoImage"],"isDeveloperGuidesPage":false,":type":"snowflake-site/components/contentfragment","model":"snowflake-site/models/quickstart-article"},"flexible_column_cont":{"id":"flexible-column-container-7d88984594","type":"2-column-75-25","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"none","bottomPadding":"none","spaceBetween":"none","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-954dbefff5",":items":{"quickstart_last_modi":{"id":"quickstart-last-modified-90baca4ab0","icon":{"id":"icon","icon":"calendar",":type":"snowflake-site/components/icon","appliedCssClassNames":"snowflake-icon-blue"},"lastModifiedDatePrefix":"Updated","lastModifiedDate":"2026-06-08",":type":"snowflake-site/components/quickstart/quickstart-last-modified","appliedCssClassNames":"snowflake-responsive-component-top-padding-small"},"text":{"id":"text-ac7a32673e","additionalClasses":"qs-disclaimer-text","text":"\u003Cp\u003E\u003Cspan style=\"color: #666;\"\u003EThis content is provided as is, and is not maintained on an ongoing basis. It may be out of date with current Snowflake instances\u003C/span\u003E\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"snowflake-responsive-component-top-padding-small"}},":itemsOrder":["quickstart_last_modi","text"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-52fddd1947",":items":{},":itemsOrder":[],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["contentfragment","flexible_column_cont"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-05ea36c678",":items":{"quickstart_table_of_":{"layout":"SIMPLE","id":"container-3064ab7a3e","isDeveloperGuidesPage":false,":items":{"quickstart_table_of_":{"id":"quickstart-table-of-content-85bad37720",":type":"snowflake-site/components/quickstart/quickstart-table-of-content","fragmentPath":"/content/dam/snowflake-site/en/content-fragments/quickstarts/build-autonomous-sql-pipelines-for-ai-agents","headings":["\u003Ch2\u003EOverview\u003C/h2\u003E","\u003Ch2\u003EArchitecture Overview\u003C/h2\u003E","\u003Ch2\u003EClone the Companion Git Repo\u003C/h2\u003E","\u003Ch2\u003EBootstrap the Account\u003C/h2\u003E","\u003Ch2\u003ESet Up Your Environment\u003C/h2\u003E","\u003Ch2\u003EDeploy the DCM Project\u003C/h2\u003E","\u003Ch2\u003EStart streaming from Kafka\u003C/h2\u003E","\u003Ch2\u003EConfigure the Openflow Connector\u003C/h2\u003E","\u003Ch2\u003EExplore the Dynamic Tables\u003C/h2\u003E","\u003Ch2\u003ERun AI-Powered Fraud Detection\u003C/h2\u003E","\u003Ch2\u003EQuery the Analytics Layer\u003C/h2\u003E","\u003Ch2\u003ECreate Semantic View using Cortex Code\u003C/h2\u003E","\u003Ch2\u003ECreate a Cortex Agent\u003C/h2\u003E","\u003Ch2\u003EWork with Snowflake Intelligence\u003C/h2\u003E","\u003Ch2\u003EBuild a Streamlit Dashboard with Cortex Code\u003C/h2\u003E","\u003Ch2\u003EBonus: Configure github actions for your DCM project\u003C/h2\u003E","\u003Ch2\u003ECleanup\u003C/h2\u003E","\u003Ch2\u003EConclusion and Resources\u003C/h2\u003E"]},"quickstart_button":{"id":"quickstart-button-ae757c2d72",":type":"snowflake-site/components/quickstart/quickstart-button","fragmentPath":"/content/dam/snowflake-site/en/content-fragments/quickstarts/build-autonomous-sql-pipelines-for-ai-agents","appliedCssClassNames":"snowflake-responsive-component-top-padding-none"}},":itemsOrder":["quickstart_table_of_","quickstart_button"],":type":"snowflake-site/components/quickstart/quickstart-table-of-content/quickstart-table-of-content-container"}},":itemsOrder":["quickstart_table_of_"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"},"markup_editor":{"id":"markup-editor-9005efddf4","title":"Page CSS","cssContent":"#quickstart-template-main-flexible-container{padding:24px}#quickstart-template-main-flexible-container \u003E .snowflake-flexible-column-container-items{grid-template-columns:1fr 0}.qs-disclaimer-text p \u003E span{font-size:15px !important}@media (min-width:768px){#quickstart-template-main-flexible-container{padding:24px 32px}#quickstart-template-main-flexible-container \u003E .snowflake-flexible-column-container-items{grid-template-columns:7fr 3fr;gap:48px}}@media (max-width:767px){#quickstart-template-main-flexible-container \u003E .snowflake-flexible-column-container-items{gap:0}}@media (min-width:1024px){#quickstart-template-main-flexible-container{padding:0 92px 48px 92px}#quickstart-template-main-flexible-container \u003E .snowflake-flexible-column-container-items{gap:117px}}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false}},":itemsOrder":["quickstart_hero","flexible_column_cont","markup_editor"],":type":"wcm/foundation/components/responsivegrid"},"modal_container":{"layout":"SIMPLE","id":"container-81282e42de",":items":{},":itemsOrder":[],":type":"snowflake-site/components/modal/modal-container"},"experiencefragment-footer":{"id":"experiencefragment-b8945ac94b","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master/jcr:content","configured":true,":items":{"root":{"additionalClasses":"sf-footer","layout":"SIMPLE","id":"container-862df6c3c7",":items":{"container_copy":{"additionalClasses":"sf-footer__inner","columnClassNames":{"flexible_column_cont":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-77253833a6",":items":{"flexible_column_cont":{"id":"flexible-column-container-60b5b4a015","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"medium","bottomPadding":"extra-small","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"sf-footer-grid","backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-24d4eba89e",":items":{"container":{"additionalClasses":"sf-footer-grid__inner","columnClassNames":{"container":"aem-GridColumn aem-GridColumn--default--12","container_1622723482":"aem-GridColumn aem-GridColumn--default--12","container_copy_copy_":"aem-GridColumn aem-GridColumn--default--12","container_copy_copy":"aem-GridColumn aem-GridColumn--default--12","container_copy":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-25d548c859",":items":{"container_1622723482":{"additionalClasses":"sf-footer__column","columnClassNames":{"container":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-bc7684d3f0",":items":{"container":{"additionalClasses":"sf-footer__newsletter-group","columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12","marketo_v2":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-a0bd94e79b",":items":{"text":{"id":"text-d2bb77c0cf","additionalClasses":"sf-footer__newsletter-title","text":"\u003Cp\u003E\u003Cb\u003ESubscribe to our monthly newsletter\u003C/b\u003E\u003C/p\u003E\r\n\u003Cp\u003EStay up to date on Snowflake’s latest products, expert insights and resources—right in your inbox!\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-04"},"marketo_v2":{"id":"marketo-v2-d2c7b46f81","marketoForm":{"formId":"45871","edit":false,"successUrl":null,"hidden":null,"script":null,"values":null},"munchkinId":"252-RFO-227","serverInstance":"252-RFO-227.mktoweb.com","formConfigured":true,"marketoConfigured":true,":type":"snowflake-site/components/form/marketo-v2"}},":itemsOrder":["text","marketo_v2"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":type":"snowflake-site/components/container"}},":itemsOrder":["container"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":type":"snowflake-site/components/container"},"container":{"columnClassNames":{"text_copy":"aem-GridColumn aem-GridColumn--default--12","text":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-e0376c1bd9",":items":{"text":{"id":"text-749be1b481","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003EProduct\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/product/platform/\"\u003EPlatform\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/product/snowflake-cowork/\"\u003ESnowflake CoWork\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/product/data-engineering/\"\u003EData Engineering\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/product/analytics/\"\u003EAnalytics\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/product/ai/\"\u003EAI\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/product/applications-and-collaboration/\"\u003EApplications &amp; Collaboration\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/pricing-options/\"\u003EPricing\u003C/a\u003E\u003C/li\u003E\r\n\u003C/ul\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small text-color-text-04"},"text_copy":{"id":"text-777f1b79c1","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003ESupport\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/support/\"\u003ESupport\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/legal/addenda/priority-support-services-description/\"\u003EPriority Support\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://status.snowflake.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003EStatus\u003C/a\u003E\u003C/li\u003E\r\n\u003C/ul\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small text-color-text-04"}},":itemsOrder":["text","text_copy"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-medium",":type":"snowflake-site/components/container"},"container_copy_copy":{"columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-56e51ca421",":items":{"text":{"id":"text-fb34722552","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003E\u003Ca href=\"/en/solutions/industries/\"\u003EIndustries\u003C/a\u003E\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/solutions/industries/advertising-media-entertainment/\"\u003EAdvertising, Media &amp; Entertainment\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/solutions/industries/financial-services/\"\u003EFinancial Services\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/solutions/industries/healthcare-and-life-sciences/\"\u003EHealthcare &amp; Life Sciences\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/solutions/industries/manufacturing/\"\u003EManufacturing\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/solutions/industries/public-sector/\"\u003EPublic Sector\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/solutions/industries/retail-consumer-goods/\"\u003ERetail &amp; Consumer Goods\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/solutions/industries/telecom/\"\u003ETelecom\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/solutions/industries/technology/\"\u003ETechnology\u003C/a\u003E\u003C/li\u003E\r\n\u003C/ul\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small text-color-text-04"}},":itemsOrder":["text"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":type":"snowflake-site/components/container"},"container_copy":{"columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-a07ef1249a",":items":{"text":{"id":"text-94a1a85df8","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003ECompany\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/company/overview/about-snowflake/\"\u003EAbout Snowflake\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/company/overview/leadership-and-board/\"\u003ELeadership &amp; Board\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://careers.snowflake.com/us/en\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ECareers\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://investors.snowflake.com/overview/default.aspx\" target=\"_blank\" rel=\"noopener noreferrer\"\u003EInvestor Relations\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://trust.snowflake.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ETrust Center\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/brand-guidelines/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003EBrand Guidelines\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/contact/\"\u003EContact\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/news/\"\u003ENewsroom\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/company/overview/esg/\"\u003EEnvironmental, Social &amp; Governance\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/company/overview/snowflake-ventures/\"\u003ESnowflake Ventures\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/company/overview/end-data-disparity/\"\u003EEnd Data Disparity\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/summit/\"\u003ESnowflake Summit 26\u003C/a\u003E\u003C/li\u003E\r\n\u003C/ul\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small text-color-text-04"}},":itemsOrder":["text"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":type":"snowflake-site/components/container"},"container_copy_copy_":{"columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-a83c8cb629",":items":{"text":{"id":"text-586aa2784f","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003ELearn\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://snowflake.com/en/resources/\"\u003EResource Library\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/webinars/demo/\"\u003ELive Demos\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/fundamentals/\"\u003EFundamentals\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/resources/learn/training/\"\u003ETraining\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/resources/learn/certifications/\"\u003ECertifications\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://learn.snowflake.com/en/\"\u003ESnowflake University\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/developers/guides\"\u003EDeveloper Guides\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://docs.snowflake.com/\"\u003EDocumentation\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/data-governance/\"\u003EData Governance\u003C/a\u003E\u003C/li\u003E\r\n\u003C/ul\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small text-color-text-04"}},":itemsOrder":["text"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":type":"snowflake-site/components/container"}},":itemsOrder":["container_1622723482","container","container_copy_copy","container_copy","container_copy_copy_"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":type":"snowflake-site/components/container"}},":itemsOrder":["container"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["flexible_column_cont"],"appliedCssClassNames":"snowflake-container snowflake-responsive-container-inner-padding-small",":type":"snowflake-site/components/container"},"container_573483281_":{"additionalClasses":"sf-footer__bottom","columnClassNames":{"container_112062425":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-b63f3cec62",":items":{"container_112062425":{"columnClassNames":{"flexible_column_cont":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-5c3eb61fc3",":items":{"flexible_column_cont":{"id":"flexible-column-container-3fdc3485f0","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"none","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-a7682480ee",":items":{"container":{"additionalClasses":"sf-footer__legal-container","columnClassNames":{"container":"aem-GridColumn aem-GridColumn--default--12","text_copy_copy_16360":"aem-GridColumn aem-GridColumn--default--12","markup_editor":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-11b0e52aef",":items":{"container":{"columnClassNames":{"image":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-dba6af9bf9",":items":{"image":{"id":"image-3b4604b0d9","additionalClasses":"sf-footer__logo","alt":"Snowflake logo","imageLink":{"valid":true,"url":"/en/"},"lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master/_jcr_content/root/container_573483281_/container_112062425/flexible_column_cont/flexible_column_content_container_1/container/container/image.coreimg.svg/1747882370694/nav-icon-snowflake-bug.svg","height":"64","width":"64",":type":"snowflake-site/components/image"}},":itemsOrder":["image"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small",":type":"snowflake-site/components/container"},"text_copy_copy_16360":{"id":"text-2ce41cb7dc","additionalClasses":"sf-footer__legal-links","text":"\u003Cul\u003E\r\n\u003Cli\u003E© 2026 Snowflake Inc. All Rights Reserved\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/legal/privacy/privacy-policy/\"\u003EPrivacy Policy\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://snowflake.com/en/legal/snowflake-site-terms/\"\u003ESite Terms\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://info.snowflake.com/Preference-center.html\"\u003ECommunication Preferences\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Cbutton id=\"ot-sdk-btn\" class=\"ot-sdk-show-settings\"\u003ECookie Settings\u003C/button\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/legal/privacy/privacy-policy/#12\"\u003EDo Not Share My Personal Information\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/legal/\"\u003ELegal\u003C/a\u003E\u003C/li\u003E\r\n\u003C/ul\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small text-color-text-04"},"markup_editor":{"id":"markup-editor-b329fcf928","title":" ","htmlContent":"\u003Cdiv class=\"sf-footer__social\"\u003E\r\n\u003Cdiv data-testid=\"snowflake-footer-twitter\" class=\"snowflake-button-icon snowflake-button-white snowflake-footer-social-item\"\u003E\u003Cdiv class=\"snowflake-button-icon \"\u003E\u003Ca href=\"https://x.com/Snowflake\" data-testid=\"button-external\" aria-label=\"X (Twitter)\" role=\"button\" class=\"snowflake-button-container\" title=\"X (Twitter)\" tabindex=\"0\" target=\"_blank\" rel=\"noreferrer\"\u003E\u003Cdiv data-testid=\"button-icon-wrapper\"\u003E\u003Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 59 53\" class=\"button-icon\"\u003E\u003Cpath fill=\"currentColor\" d=\"M46.614 0h9.044L35.8 22.49 59 53H40.795L26.54 34.46 10.223 53H1.18l21.036-24.055L0 0h18.657l12.878 16.937zM43.45 47.72h5.013L16.023 5.085h-5.387z\"\u003E\u003C/path\u003E\u003C/svg\u003E\u003C/div\u003E\u003C/a\u003E\u003Cdiv\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003Cdiv data-testid=\"snowflake-footer-linkedin\" class=\"snowflake-button-icon snowflake-button-white snowflake-footer-social-item\"\u003E\u003Cdiv class=\"snowflake-button-icon \"\u003E\u003Ca href=\"https://www.linkedin.com/company/3653845\" data-testid=\"button-external\" aria-label=\"LinkedIn\" role=\"button\" class=\"snowflake-button-container\" title=\"LinkedIn\" tabindex=\"0\" target=\"_blank\" rel=\"noreferrer\"\u003E\u003Cdiv data-testid=\"button-icon-wrapper\"\u003E\u003Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 24 24\" class=\"button-icon\"\u003E\u003Cpath d=\"M22.223 0H1.772C.792 0 0 .773 0 1.73v20.536C0 23.222.792 24 1.772 24h20.451c.98 0 1.777-.778 1.777-1.73V1.73C24 .773 23.203 0 22.223 0ZM7.12 20.452H3.558V8.995H7.12v11.457ZM5.34 7.434a2.064 2.064 0 1 1 0-4.125 2.063 2.063 0 0 1 0 4.125Zm15.112 13.018h-3.558v-5.57c0-1.326-.024-3.037-1.852-3.037-1.851 0-2.133 1.449-2.133 2.944v5.663H9.356V8.995h3.413v1.566h.047c.473-.9 1.636-1.852 3.365-1.852 3.605 0 4.27 2.372 4.27 5.457v6.286Z\"\u003E\u003C/path\u003E\u003C/svg\u003E\u003C/div\u003E\u003C/a\u003E\u003Cdiv\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003Cdiv data-testid=\"snowflake-footer-facebook\" class=\"snowflake-button-icon snowflake-button-white snowflake-footer-social-item\"\u003E\u003Cdiv class=\"snowflake-button-icon \"\u003E\u003Ca href=\"https://www.facebook.com/snowflakedb/\" data-testid=\"button-external\" aria-label=\"Facebook\" role=\"button\" class=\"snowflake-button-container\" title=\"Facebook\" tabindex=\"0\" target=\"_blank\" rel=\"noreferrer\"\u003E\u003Cdiv data-testid=\"button-icon-wrapper\"\u003E\u003Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 24 24\" class=\"button-icon\"\u003E\u003Cpath d=\"M24 12c0-6.627-5.373-12-12-12S0 5.373 0 12c0 5.99 4.388 10.954 10.125 11.854V15.47H7.078V12h3.047V9.356c0-3.007 1.792-4.668 4.533-4.668 1.312 0 2.686.234 2.686.234v2.953H15.83c-1.491 0-1.956.925-1.956 1.875V12h3.328l-.532 3.469h-2.796v8.385C19.612 22.954 24 17.99 24 12Z\"\u003E\u003C/path\u003E\u003C/svg\u003E\u003C/div\u003E\u003C/a\u003E\u003Cdiv\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003Cdiv data-testid=\"snowflake-footer-youtube\" class=\"snowflake-button-icon snowflake-button-white snowflake-footer-social-item\"\u003E\u003Cdiv class=\"snowflake-button-icon \"\u003E\u003Ca href=\"https://www.youtube.com/user/snowflakecomputing\" data-testid=\"button-external\" aria-label=\"YouTube\" role=\"button\" class=\"snowflake-button-container\" title=\"YouTube\" tabindex=\"0\" target=\"_blank\" rel=\"noreferrer\"\u003E\u003Cdiv data-testid=\"button-icon-wrapper\"\u003E\u003Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 24 24\" class=\"button-icon\"\u003E\u003Cpath d=\"M23.76 7.2s-.233-1.655-.955-2.381c-.914-.956-1.936-.961-2.405-1.017-3.356-.244-8.395-.244-8.395-.244h-.01s-5.039 0-8.395.244c-.469.056-1.49.06-2.405 1.017C.473 5.545.244 7.2.244 7.2S0 9.145 0 11.086v1.819c0 1.94.24 3.886.24 3.886s.233 1.654.95 2.38c.915.957 2.115.924 2.65 1.027 1.92.183 8.16.24 8.16.24s5.044-.01 8.4-.249c.469-.056 1.49-.06 2.405-1.017.722-.727.956-2.381.956-2.381S24 14.85 24 12.905v-1.819c0-1.94-.24-3.886-.24-3.886ZM9.52 15.113V8.367l6.483 3.385-6.483 3.36Z\"\u003E\u003C/path\u003E\u003C/svg\u003E\u003C/div\u003E\u003C/a\u003E\u003Cdiv\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\r\n\u003C/div\u003E",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false}},":itemsOrder":["container","text_copy_copy_16360","markup_editor"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-none",":type":"snowflake-site/components/container"}},":itemsOrder":["container"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["flexible_column_cont"],"appliedCssClassNames":"snowflake-container snowflake-responsive-container-inner-padding-small",":type":"snowflake-site/components/container"}},":itemsOrder":["container_112062425"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-none",":type":"snowflake-site/components/container"},"markup_editor_copy":{"id":"markup-editor-a8d5a9f9f1","title":"New css","cssContent":".snowflake-image-container img{background-color:transparent}div.snowflake-person-chip-avatar{width:80px !important}#snowflake-blog-template-main-container .aem-GridColumn:has(.vertical-video){background-color:#000;border-radius:16px;overflow:hidden}#snowflake-blog-template-main-container .vertical-video{max-width:240px;margin-left:auto;margin-right:auto}@media screen and (min-width:1367px){.dynamic .heading-1-v2 .snowflake-title-v2-line{font-size:72px !important;line-height:60px !important}}.snowflake-flexible-column-container-items-alignment-match-height .download-card,.snowflake-flexible-column-container-items-alignment-match-height .download-card\u003E.container{height:100%}.download-card div.code-toolbar\u003E.toolbar .copy-to-clipboard-button{background-color:white;border:1px solid #a9e1f6;margin-right:4px;top:6px;border-radius:16px;height:26px;width:40px}.download-card .snowflake-code-snippet\u003Ediv.code-toolbar\u003E.toolbar\u003E.toolbar-item\u003Ebutton:before{content:'';background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9' y='9' width='13' height='13' rx='2' ry='2' style='stroke:%23249EDC;'%3E%3C/rect%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1' style='stroke:%23249EDC;'%3E%3C/path%3E%3C/svg%3E\");background-size:auto 65%;background-position:center;background-repeat:no-repeat;top:0;left:0;width:100%;height:100%}.download-card .snowflake-code-snippet\u003Ediv.code-toolbar\u003E.toolbar\u003E.toolbar-item\u003Ebutton:hover:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9' y='9' width='13' height='13' rx='2' ry='2' style='stroke:%23fff;'%3E%3C/rect%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1' style='stroke:%23fff;'%3E%3C/path%3E%3C/svg%3E\")}.download-card\u003Ediv{background-color:#fff;border:1px solid #ccc;border-radius:8px;padding:24px}.download-chip__headline{border-bottom:1px solid #ccc;padding-bottom:16px;margin-bottom:16px}.download-chip{padding:8px 12px !important;border-radius:4px;transition:300ms ease background-color}.download-chip .black-blue-text-color .snowflake-title-v2-line{color:#000 !important;padding-right:24px;font-family:'Lato',sans-serif;font-size:14px !important;font-weight:500 !important}.download-chip .black-blue-text-color .snowflake-title-v2-line:not(:first-child){opacity:.6;font-style:italic !important}.download-chip .snowflake-content-chip-button{display:none}.download-chip.is-external-link{background-size:16px 16px;background-image:url(\"data:image/svg+xml,%3Csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.06055 13.0607L11.8605 2.26067M13.0605 10.6607V1.06067H3.46055' stroke='%23249EDC' stroke-width='2.12132' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A\")}.download-chip{background-image:url(\"data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_883_7979)'%3E%3Cpath d='M3.375 16.875H14.625' stroke='%23249EDC' stroke-width='1.40625' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9 1.125V11.25' stroke='%23249EDC' stroke-width='1.40625' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M4.5 7.875L9 12.375L13.5 7.875' stroke='%23249EDC' stroke-width='1.40625' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_883_7979'%3E%3Crect width='18' height='18' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\");background-size:24px auto;background-repeat:no-repeat;background-position:calc(100% - 12px) center}.download-chip__headline{display:flex;gap:16px;flex-direction:row !important;flex-wrap:nowrap}.download-chip__headline::before{content:'';display:inline-block;width:24px;height:24px;background-position:center;background-image:url(\"data:image/svg+xml,%3Csvg width='21' height='21' viewBox='0 0 21 21' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7.50005 9.89999C8.13657 9.89999 8.74702 9.64713 9.19711 9.19704C9.64719 8.74696 9.90005 8.13651 9.90005 7.49999V2.69999C9.90005 2.06347 9.64719 1.45302 9.19711 1.00293C8.74702 .552844 8.13657 .299988 7.50005 .299988H2.70005C2.06353 .299988 1.45308 .552844 1.00299 1.00293C.552905 1.45302 .300049 2.06347 .300049 2.69999V7.49999C.300049 8.13651 .552905 8.74696 1.00299 9.19704C1.45308 9.64713 2.06353 9.89999 2.70005 9.89999H7.50005ZM7.50005 7.49999H2.70005V2.69999H7.50005V7.49999Z' fill='%23249EDC' stroke='white' stroke-width='.6'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7.50005 20.3C8.13657 20.3 8.74702 20.0472 9.19711 19.5971C9.64719 19.147 9.90005 18.5365 9.90005 17.9V13.1C9.90005 12.4635 9.64719 11.853 9.19711 11.403C8.74702 10.9529 8.13657 10.7 7.50005 10.7H2.70005C2.06353 10.7 1.45308 10.9529 1.00299 11.403C.552905 11.853 .300049 12.4635 .300049 13.1V17.9C.300049 18.5365 .552905 19.147 1.00299 19.5971C1.45308 20.0472 2.06353 20.3 2.70005 20.3H7.50005ZM7.50005 17.9H2.70005V13.1H7.50005V17.9Z' fill='%23249EDC' stroke='white' stroke-width='.6'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M17.9001 9.89999C18.5366 9.89999 19.147 9.64713 19.5971 9.19704C20.0472 8.74696 20.3001 8.13651 20.3001 7.49999V2.69999C20.3001 2.06347 20.0472 1.45302 19.5971 1.00293C19.147 .552844 18.5366 .299988 17.9001 .299988H13.1001C12.4636 .299988 11.8531 .552844 11.403 1.00293C10.9529 1.45302 10.7001 2.06347 10.7001 2.69999V7.49999C10.7001 8.13651 10.9529 8.74696 11.403 9.19704C11.8531 9.64713 12.4636 9.89999 13.1001 9.89999H17.9001ZM17.9001 7.49999H13.1001V2.69999H17.9001V7.49999Z' fill='%23249EDC' stroke='white' stroke-width='.6'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M17.9001 20.3C18.5366 20.3 19.147 20.0472 19.5971 19.5971C20.0472 19.147 20.3001 18.5365 20.3001 17.9V13.1C20.3001 12.4635 20.0472 11.853 19.5971 11.403C19.147 10.9529 18.5366 10.7 17.9001 10.7H13.1001C12.4636 10.7 11.8531 10.9529 11.403 11.403C10.9529 11.853 10.7001 12.4635 10.7001 13.1V17.9C10.7001 18.5365 10.9529 19.147 11.403 19.5971C11.8531 20.0472 12.4636 20.3 13.1001 20.3H17.9001ZM17.9001 17.9H13.1001V13.1H17.9001V17.9Z' fill='%23249EDC' stroke='white' stroke-width='.6'/%3E%3C/svg%3E%0A\");background-size:contain;background-repeat:no-repeat}.download-chip__headline.is-cli::before{background-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 17L10 11L4 5' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 19H20' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A\")}.download-card pre[class*=language-]{padding:8px 12px;background-color:var(--ui-background-05);overflow:hidden}.download-chip__headline.is-windows,.download-chip__headline.is-mac{gap:12px}.download-chip__headline.is-windows::before{width:16px;height:20px;background-image:url(\"data:image/svg+xml,%3Csvg width='4875' height='4875' viewBox='0 0 4875 4875' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_122_201)'%3E%3Cpath d='M0 0H2311V2310H0V0ZM2564 0H4875V2310H2564V0ZM0 2564H2311V4875H0V2564ZM2564 2564H4875V4875H2564' fill='%23000'/%3E%3C/g%3E%3C/svg%3E\")}.download-chip__headline.is-mac::before{width:16px;height:20px;background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns:x='ns_extend;' xmlns:i='ns_ai;' xmlns:graph='ns_graphs;' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0' y='0' viewBox='0 0 41.5 51' style='enable-background:new 0 0 41.5 51;' xml:space='preserve'%3E%3Cmetadata%3E%3Csfw xmlns='ns_sfw;'%3E%3Cslices%3E%3C/slices%3E%3CsliceSourceBounds bottomLeftOrigin='true' height='51' width='41.5' x='166.1' y='-208.1'%3E%3C/sliceSourceBounds%3E%3C/sfw%3E%3C/metadata%3E%3Cg%3E%3Cpath d='M40.2,17.4c-3.4,2.1-5.5,5.7-5.5,9.7c0,4.5,2.7,8.6,6.8,10.3c-.8,2.6-2,5-3.5,7.2c-2.2,3.1-4.5,6.3-7.9,6.3s-4.4-2-8.4-2 c-3.9,0-5.3,2.1-8.5,2.1s-5.4-2.9-7.9-6.5C2,39.5,.1,33.7,0,27.6c0-9.9,6.4-15.2,12.8-15.2c3.4,0,6.2,2.2,8.3,2.2 c2,0,5.2-2.3,9-2.3C34.1,12.2,37.9,14.1,40.2,17.4z M28.3,8.1C30,6.1,30.9,3.6,31,1c0-.3,0-.7-.1-1c-2.9,.3-5.6,1.7-7.5,3.9 c-1.7,1.9-2.7,4.3-2.8,6.9c0,.3,0,.6,.1,.9c.2,0,.5,.1,.7,.1C24.1,11.6,26.6,10.2,28.3,8.1z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\")}.download-chip__headline.is-desktop::before{background-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='.8'%3E%3Cpath d='M1.5 21H22.5V18H1.5V21Z' fill='%23000' stroke='white' stroke-width='.75'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M19.5 15C20.2956 15 21.0587 14.6839 21.6213 14.1213C22.1839 13.5587 22.5 12.7956 22.5 12V6C22.5 5.20435 22.1839 4.44129 21.6213 3.87868C21.0587 3.31607 20.2956 3 19.5 3H4.5C3.70435 3 2.94129 3.31607 2.37868 3.87868C1.81607 4.44129 1.5 5.20435 1.5 6V12C1.5 12.7956 1.81607 13.5587 2.37868 14.1213C2.94129 14.6839 3.70435 15 4.5 15H19.5ZM19.5 12H4.5V6H19.5V12Z' fill='%23000' stroke='white' stroke-width='.75'/%3E%3C/g%3E%3C/svg%3E%0A\")}.download-card .snowflake-code-snippet,.download-card .snowflake-code-snippet code,.download-card .snowflake-code-snippet pre{font-size:14px;color:#000;text-shadow:none !important}.download-chip:hover{background-color:var(--ui-background-05) !important;transition:300ms ease background-color}body:has(.snowflake-skip-to-content[style]) #subNav,.pushdown-banner-dismissed #subNav{top:var(--scroll-padding-top) !important;transition:300ms ease top}body:has(.snowflake-skip-to-content[style*=\"58\"]) #subNav{top:34px !important}body:has(.snowflake-skip-to-content[style*=\"82\"]) #subNav{top:58px !important}body:has(.snowflake-skip-to-content[style*=\"130\"]) #subNav{top:106px !important}body:has(.snowflake-skip-to-content[style*=\"138\"]) #subNav{top:114px !important}body:has(.snowflake-skip-to-content[style*=\"146\"]) #subNav{top:122px !important}.is-hidden .snowflake-person-chip-avatar{display:none}.is-small .snowflake-person-chip-avatar{width:56px;height:56px}.ai-summary ul{margin:16px 0 0 0 !important;padding:0 !important;list-style-type:none}.ai-summary li{margin:0;padding:0 0 0 32px;position:relative}.ai-summary 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}.ai-summary li:not(:last-child){margin-bottom:1rem}.snowflake-content-chip-image__image{aspect-ratio:5 / 3 !important}.content-chip-new .snowflake-content-chip-image__image{height:100% !important;aspect-ratio:unset !important}.snapshot-card .snowflake-text p:not(:first-child){margin-top:var(--spacing-01)}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(2) p:has(b){font-family:'Texta',sans-serif;margin-top:24px}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(2) p b{font-weight:700 !important}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(2){border-bottom:1px solid #ccc;padding-bottom:24px}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(3) p:first-child:has(b){font-family:'Texta',sans-serif;font-size:20px !important;margin-bottom:1rem !important}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(3) li{display:inline-block}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(3) li a{display:inline-block;text-decoration:none;padding:4px 16px !important;border:1px solid #ccc;border-radius:24px;color:#666 !important}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(3) ul{list-style-type:none;display:flex;padding:0 !important;margin:0 !important;gap:12px}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container img{width:90%;max-width:240px;margin:0 auto}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container{padding:40px;max-width:450px;margin:0 0 0 auto;background-color:#fff;box-shadow:0 2px 6px 0 rgba(152,162,179,.25),0 10px 20px 0 rgba(152,162,179,.10);border-radius:8px;border-top:4px solid var(--ui-01)}.ai-summary{background-color:#f3fbfe;border-left:2px solid var(--ui-01);padding:40px}.ai-summary\u003Espan p:last-child:has(i){color:#666;font-size:14px !important}.ai-summary\u003Espan p:last-child:has(i) a{color:#666 !important;text-decoration:underline !important}.ai-summary\u003Espan p:last-child:has(i) a:hover{color:var(--ui-01) !Important}.ai-summary\u003Espan p:first-child:has(b)::after{content:'';display:inline-block;width:20px;height:20px;background-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9.3158 3.15226C8.6475 6.2258 6.22698 8.64545 3.15232 9.31587C2.94923 9.36072 2.94923 9.63928 3.15232 9.68413C6.22698 10.3522 8.6475 12.7742 9.3158 15.8477C9.36067 16.0508 9.63933 16.0508 9.6842 15.8477C10.3525 12.7742 12.773 10.3545 15.8477 9.68413C16.0508 9.63928 16.0508 9.36072 15.8477 9.31587C12.773 8.64781 10.3525 6.2258 9.6842 3.15226C9.63933 2.94925 9.36067 2.94925 9.3158 3.15226Z' fill='%23249EDC'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M17.3725 11.5461C16.9098 13.6739 15.2341 15.3491 13.1054 15.8132C12.9649 15.8443 12.9649 16.0371 13.1054 16.0681C15.2341 16.5307 16.9098 18.2074 17.3725 20.3353C17.4035 20.4758 17.5965 20.4758 17.6275 20.3353C18.0902 18.2074 19.7659 16.5323 21.8946 16.0681C22.0352 16.0371 22.0352 15.8443 21.8946 15.8132C19.7659 15.3507 18.0902 13.6739 17.6275 11.5461C17.5965 11.4055 17.4035 11.4055 17.3725 11.5461Z' fill='%23249EDC'/%3E%3C/svg%3E%0A\");background-repeat:no-repeat;background-size:contain;background-position:center;vertical-align:middle;margin-left:8px}.ai-summary\u003Espan p:first-child:has(b){color:var(--ui-01) !important;text-transform:uppercase}.border-top{border-top:1px solid rgba(0,0,0,.2)}.border-top\u003Espan{display:block;padding-top:32px}body .snowflake-card-v2-advanced-image__image{aspect-ratio:16 / 9 !important}.content-chip-new .snowflake-content-chip-image__image{border-radius:0;object-fit:cover;height:100%}.sf-footer #ot-sdk-btn.ot-sdk-show-settings,.sf-footer #ot-sdk-btn.optanon-show-settings{color:rgba(255,255,255,.7) !important;text-underline-offset:4px;border-top:none;border-left:none;border-right:none;border-bottom:1px dotted transparent;background-color:transparent !important;background-image:none !important;transition:300ms ease text-decoration-color;padding:0 !important;font-size:12px;font-family:'Lato',sans-serif}.sf-footer #ot-sdk-btn.ot-sdk-show-settings:hover,.sf-footer #ot-sdk-btn.optanon-show-settings:hover{color:rgba(255,255,255,1) !important;border-bottom:1px dotted var(--ui-01);transition:300ms ease text-decoration-color}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:last-child{flex-shrink:0}.sf-footer__disclaimers{background-color:#042130}.sf-footer__disclaimers .snowflake-simple-stat-disclaimer p a{color:inherit;text-decoration:none !important}.sf-footer__disclaimers .snowflake-simple-stat-disclaimer p sup{margin-right:2px}.sf-footer__disclaimers .snowflake-simple-stat-disclaimer p{text-indent:-5px;padding-left:5px}.sf-footer__disclaimers-inner{border-top:1px solid rgba(255,255,255,.25);padding:40px 0}.sf-footer__disclaimers .snowflake-simple-stat{align-items:flex-start;text-align:left;color:rgba(255,255,255,.7);margin-bottom:10px}.sf-footer__social{display:flex;justify-content:center;gap:12px}.sf-footer .snowflake-footer-social-item{margin:0 !important}.sf-footer .snowflake-footer-social-item a{line-height:0;background-color:rgba(3,24,35,.8);display:inline-block;width:48px !important;height:48px;border-radius:8px;display:inline-flex;justify-content:center;align-items:center;transition:300ms ease background-color}.sf-footer .snowflake-footer-social-item a:hover{background-color:var(--ui-01) !important;transition:300ms ease background-color}.sf-footer__bottom{padding-bottom:40px}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoError .mktoErrorMsg{max-width:100%;color:#fff}.sf-footer .mktoForm .mktoError .mktoErrorMsg .mktoErrorDetail{display:inline-block}.sf-footer .mktoFormRow:has(.mktoHtmlText:empty){display:none}.sf-footer .mktoFormRow .mktoHtmlText span{color:#fff !important}.sf-footer{background-color:#042130}.sf-footer .optanon-toggle-display:hover{text-decoration-color:var(--ui-01) !important;cursor:pointer !important;text-underline-offset:4px;text-decoration-style:dotted !important;text-decoration-color:var(--ui-01);color:#fff !important;transition:300ms ease text-decoration-color;text-decoration:underline;opacity:1}.sf-footer__logo{width:40px}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container{row-gap:32px}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;justify-content:space-between;align-items:center;text-align:center;row-gap:16px}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(2){text-align:center;flex-grow:1}.sf-footer__legal-links li button,.sf-footer__legal-links li a,.sf-footer__legal-links li{margin:0;color:rgba(255,255,255,.7) !important;font-weight:500}.sf-footer__legal-links li a:hover{color:rgba(255,255,255,1) !important}.sf-footer div.sf-footer__copyright p,.sf-footer div.sf-footer__legal-links li,.sf-footer div.sf-footer__legal-links a,.sf-footer div.sf-footer__legal-links p{font-size:12px !important}.sf-footer__legal-links ul{list-style-type:none;margin:0;padding:0;display:flex;gap:20px;row-gap:4px;justify-content:center;flex-wrap:wrap;text-align:center}.sf-footer__legal-links li:last-child{width:100%}.sf-footer .mktoFormRow:has(.mktoPlaceholder),.sf-footer .mktoFormRow:has(input[type=\"hidden\"]){display:none !important}.sf-footer .mktoFormCol{margin-bottom:0 !important}.sf-footer label[for=\"adhoc1\"]{width:auto !important;flex-grow:1;margin-left:16px}.sf-footer .mktoFieldWrap:has(label[for=\"adhoc1\"]){display:flex;flex-direction:row-reverse;margin-top:22px}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoCheckboxList input[type=checkbox]{background-color:transparent !important;border:1px solid rgba(255,255,255,.4) !important;border-radius:4px !important}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoEmailField,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoTelField,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoTextField,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap select{background-color:transparent !important;color:#fff !important;height:auto !important;border:1px solid rgba(255,255,255,.4) !important;border-radius:4px !important;padding:12px 18px !important}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoEmailField:focus,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoTelField:focus,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoTextField:focus,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap select:focus{border-color:var(--ui-01) !important}.sf-footer .mktoForm *{padding:0 !important}.sf-footer .mktoForm,.sf-footer .snowflake-marketo-form-container{padding:0 !important;background:transparent;margin-bottom:0;box-shadow:none}.sf-footer .mktoHtmlText.mktoHasWidth{width:100% !important;margin:24px 0}.sf-footer .mktoFormRow{flex-direction:column}.sf-footer .mktoForm .mktoButtonWrap{margin:0 !important}.sf-footer select{background-image:url(\"data:image/svg+xml,%3Csvg width='14' height='8' viewBox='0 0 14 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.981445 1.43496L6.90897 7.32496L12.9314 1.33496' stroke='white' stroke-width='1.33333' stroke-miterlimit='10' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A\") !important}.sf-footer .snowflake-marketo-form .mktoButtonWrap.mktoNative{justify-content:flex-start}.sf-footer *::placeholder{color:#fff !important;opacity:.8}.sf-footer .mktoForm .mktoButtonWrap.mktoSimple .mktoButton{background-color:var(--ui-01) !important;color:#fff !important;width:100% !important;padding:12px 16px !important;border:1px solid var(--ui-01) !important;background-image:none !important;border-radius:48px;text-transform:uppercase;font-weight:800 !important;font-family:'Texta',sans-serif !important;font-size:16px !important;line-height:1.2}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoHtmlText\u003Espan,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoLabel\u003Espan,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap label.mktoLabel{color:#fff !important}.sf-footer__newsletter-title p:not(:first-child){margin-top:8px !important}.sf-footer__newsletter-title p b{font-weight:800 !important;font-family:'Texta',sans-serif !important;font-size:22px !important;line-height:1.2}.sf-footer__newsletter-title p:last-child{font-size:14px !important;opacity:.8}.sf-footer__link-group li a[target=\"_blank\"]::after{content:'';display:inline-block;width:10px;height:10px;margin-left:5px;background-image:url(\"data:image/svg+xml,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.72222 1.22222C6.38471 1.22222 6.11111 .948616 6.11111 .611111C6.11111 .273607 6.38471 0 6.72222 0H10.3889C10.551 0 10.7064 .0643867 10.821 .178988C10.9356 .293596 11 .449032 11 .611111V4.27778C11 4.61529 10.7264 4.88889 10.3889 4.88889C10.0514 4.88889 9.77778 4.61529 9.77778 4.27778V2.08647L4.09879 7.76545C3.86013 8.00409 3.4732 8.00409 3.23454 7.76545C2.99589 7.52681 2.99589 7.13986 3.23454 6.90122L8.91355 1.22222H6.72222ZM0 2.44444C0 1.76943 .547207 1.22222 1.22222 1.22222H4.27778C4.61529 1.22222 4.88889 1.49583 4.88889 1.83333C4.88889 2.17084 4.61529 2.44444 4.27778 2.44444H1.22222V9.77778H8.55556V6.72222C8.55556 6.38471 8.82915 6.11111 9.16667 6.11111C9.50418 6.11111 9.77778 6.38471 9.77778 6.72222V9.77778C9.77778 10.4528 9.23059 11 8.55556 11H1.22222C.547207 11 0 10.4528 0 9.77778V2.44444Z' fill='white'/%3E%3C/svg%3E%0A\");background-size:contain;background-repeat:no-repeat;background-position:center}.sf-footer__link-group ul,.sf-footer__link-group li{margin:0;padding:0;list-style-type:none}.sf-footer__link-group ul{margin-top:20px !important}.sf-footer__link-group li{margin-top:15px}.sf-footer div.sf-footer__link-group\u003Espan\u003Ep\u003Ea,.sf-footer div.sf-footer__link-group\u003Espan\u003Ep{color:var(--ui-01) !important;font-weight:800 !important;font-family:'Texta',sans-serif !important;font-size:20px !important;line-height:1.2}.sf-footer__link-group li a{opacity:.9;color:#fff !important;font-weight:500 !important;font-size:15px !important;line-height:1.3}.sf-footer__link-group li a:hover{opacity:1}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container::before,.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container::after{display:none}.sf-footer__column{flex-grow:1}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:not(:first-child){width:50%}@media (min-width:800px){.sf-footer__legal-links ul{justify-content:flex-start;text-align:left}.sf-footer__social{justify-content:flex-end}.sf-footer__legal-links ul{padding-left:24px}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container{text-align:right;flex-wrap:nowrap}.sf-footer__legal-links.align-left ul{justify-content:flex-start}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;justify-content:space-between;flex-direction:row}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:auto !important;max-width:200px}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:first-child{flex-grow:1;order:2;width:100% !important;max-width:none}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:auto}}@media screen and (min-width:1380px){.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container{flex-wrap:nowrap}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:first-child{padding-right:48px;max-width:380px;background-color:rgba(3,24,35,.4);padding:32px;margin-left:48px;border-radius:16px}.sf-footer__link-group li,.sf-footer__link-group li a{font-size:14px !important;line-height:1.3}}@media screen and (max-width:991px){.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:first-child{order:2;margin-top:24px !important}}@media screen and (max-width:420px){.is-reduced-mobile .heading-1-v2,.is-reduced-mobile .heading-1-v2-sm{font-size:32px;line-height:28px}}.quote-content-chip{background-color:var(--ui-background-05);padding:24px;border-radius:12px;position:relative}.quote-content-chip .black-blue-text-color .snowflake-title-v2-line\u003Espan{color:rgba(0,0,0,.8) !important;font-size:15px !important;line-height:1.5 !important;font-family:'Lato',sans-serif;font-weight:400 !important}.quote-content-chip .black-blue-text-color .snowflake-title-v2-line\u003Espan:not(:first-child){max-width:calc(100% - 200px)}.quote-content-chip .black-blue-text-color .snowflake-title-v2-line\u003Espan:nth-child(2){font-family:'Texta',sans-serif;color:#000 !important;font-size:20px !important;font-weight:800 !important;margin-top:24px}.quote-content-chip .snowflake-content-chip-image{width:140px !important}@media screen and (min-width:992px){.quote-content-chip .snowflake-content-chip-image{position:absolute !important;bottom:24px;right:16px}}@media screen and (max-width:991px){.quote-content-chip .snowflake-content-chip-image{margin-bottom:40px}.quote-content-chip{flex-direction:column}}#spa-root{background-color:#fff}.lowercase .snowflake-title-v2-line{text-transform:none !important}.centered .snowflake-logo-content-container-inner{justify-content:center}div.snowflake-linklist-dropdown-menu{max-height:380px}.first-line-blue .snowflake-typographyv2 .snowflake-title-v2-line:first-child{color:var(--ui-01) !important}.is-front{position:relative;z-index:2}.use-case-body .snowflake-text h1,.use-case-body .snowflake-text h2,.use-case-body .snowflake-text h3,.use-case-body .snowflake-text h4,.use-case-body .snowflake-text h5,.use-case-body .snowflake-text h6{font-family:'Texta',sans-serif;color:#000;margin:.25rem 0 0 0}.pc-hero .button-group\u003E.container\u003E.cmp-container\u003E.aem-container{justify-content:flex-start}.sf-footer .mktoFormRow .mktoHtmlText span{font-family:'Lato',sans-serif !important}.snowflake-button-primary.snowflake-button-blue .snowflake-button-container{justify-content:center}.related-chip-25{background-color:#fff;border:1px solid rgba(204,204,204,.5);border-radius:8px;padding:20px;position:relative}.related-chip-25:hover{box-shadow:rgba(152,162,179,.1) 0 10px 20px 0}.related-chip-25:hover::after{right:24px;transition:300ms ease right}.related-chip-25::after{content:'';display:block;transition:300ms ease right;background-image:url(\"data:image/svg+xml,%3Csvg width='8' height='14' viewBox='0 0 8 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7.66699 7C7.66699 6.6571 7.53559 6.32825 7.30169 6.08578L2.34446 .947072C1.84529 .429617 1.0164 .429617 .517219 .947072C.0427878 1.43887 .042788 2.21798 .517219 2.70978L4.65591 7L.51722 11.2902C.0427889 11.782 .0427887 12.5611 .51722 13.0529C1.0164 13.5704 1.84529 13.5704 2.34447 13.0529L7.30169 7.91421C7.53559 7.67175 7.66699 7.34289 7.66699 7Z' fill='%2329B5E8'/%3E%3C/svg%3E%0A\");width:8px;height:14px;display:block;position:absolute;right:30px;top:50%;transform:translateY(-50%);background-size:contain;background-position:center;background-repeat:no-repeat}.related-chip-25 .heading-5-v2{font-size:22px;line-height:1.1}.related-chip-25 .snowflake-content-chip-image{width:48px;flex-shrink:0}.related-chip-25 .snowflake-content-chip-image__image{aspect-ratio:1;height:auto;object-fit:contain}.related-chip-25 .snowflake-content-chip-button{display:none}.related-chip-25 .snowflake-content-chip-content-without-tag{flex-grow:1;padding-right:24px}.case-study-25.small-logo .snowflake-case-study-card-logo img{width:60px !important}.swiper-slide .case-study-25{width:95%;margin-left:auto;margin-right:auto}.case-study-25 .snowflake-case-study-card-logo img{width:140px !important;height:auto !important;transform:none !important;margin:24px 0 8px 0}.case-study-25 .snowflake-case-study-card-image__image{object-position:left center}.case-study-25 .snowflake-case-study-card-information-container{padding-right:24px}.case-study-25 ul{list-style-type:none;padding:0;margin:8px 0 0 0}.case-study-25 li{font-size:15px !important;line-height:1.3 !important;display:flex;flex-direction:column;border-left:4px solid var(--ui-01);padding-left:24px;margin-top:24px;color:#535862;gap:4px}.case-study-25 li b{display:block;font-family:'Texta',sans-serif;font-weight:900 !important;font-size:48px !important;line-height:.9 !important;color:var(--ui-01)}.case-study-25 .snowflake-case-study-card-description p{color:#535862}.case-study-25 .snowflake-case-study-card-description p:nth-child(2):not(:has(a)){color:#000;font-family:Texta;font-size:30px !important;line-height:1 !important;font-style:normal;font-weight:700;text-indent:-8px}.case-study-25.is-story .snowflake-case-study-card-description p:nth-child(2):not(:has(a)){text-indent:0}.case-study-25 .snowflake-case-study-card-key-card{background-color:transparent}.case-study-25 .snowflake-case-study-card-button{display:none}.case-study-25{border-radius:24px;overflow:hidden}@media screen and (min-width:1024px){.case-study-25 .snowflake-case-study-card-left-container{position:static;width:60%;min-height:0}.case-study-25 .snowflake-case-study-card-right-container::after{content:'';display:block;width:60%;max-width:340px;padding-bottom:50%;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 22 16' class='snowflake-pushdown-banner-placeholder-arrow'%3E%3Cpath fill='%2329B5E8' fill-rule='evenodd' d='M17.865 8.756c.088-.274.124-.555.118-.834a2.551 2.551 0 0 0-1.3-2.142L7.887.76C6.645.055 5.063.475 4.35 1.7a2.535 2.535 0 0 0 .947 3.494l4.916 2.809-4.916 2.801a2.543 2.543 0 0 0-.947 3.502c.713 1.222 2.295 1.64 3.537.934l8.796-5.024a2.541 2.541 0 0 0 1.182-1.46Z' clip-rule='evenodd'%3E%3C/path%3E%3C/svg%3E\");background-size:contain;background-repeat:no-repeat;position:absolute;top:-10%;left:-20%}.case-study-25 .snowflake-case-study-card-right-container{max-width:none;width:40%;position:absolute;top:-5%;right:-5%;z-index:0;height:110%}}@media screen and (min-width:768px){.case-study-25 li{max-width:50%}.case-study-25 ul{display:flex;gap:48px}}.snowflake-text.section-eyebrow p{margin-left:auto;margin-right:auto;margin-bottom:16px !important}.snowflake-text.section-eyebrow p,.snowflake-text.eyebrow-text p{text-transform:uppercase;font-family:'Texta',sans-serif !important;font-weight:800 !important;letter-spacing:.025em;margin-bottom:12px;line-height:1.1 !important}.snowflake-title-v2.dynamic .heading-2-v2 span.snowflake-title-v2-line{font-size:clamp(2.5rem,4.5vw,4rem) !important;line-height:.82 !important}.checklist ul{padding:0;margin:0}.checklist ul li{list-style-type:none;padding-left:32px;position:relative}.checklist ul li:not(:last-child){margin-bottom:1em}.checklist ul li::before{content:'';display:inline-block;width:20px;height:20px;background-image:url(\"data:image/svg+xml,%3Csvg width='24' height='25' viewBox='0 0 24 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='.985352' width='24' height='24' rx='12' fill='%23D4F0FA'/%3E%3Cpath d='M7.28613 13.2967L10.7147 16.7253L17.5718 9.86816' stroke='%2329B5E8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A\");background-size:contain;background-repeat:no-repeat;position:absolute;top:3px;left:0}.last-line-blue .snowflake-typographyv2 .snowflake-title-v2-line:last-child{color:var(--ui-01)}.snowflake-text p sup{line-height:0}.snowflake-title-v2.lowercase .heading-3-v2{font-size:28px;line-height:1;text-transform:none;font-weight:700}.snowflake-title-v2.lowercase .heading-2-v2{font-size:32px;line-height:1;text-transform:none;font-weight:700}.content-chip-new{border:1px solid rgba(204,204,204,.5);border-radius:16px;overflow:hidden}.content-chip-new .snowflake-image-container{border-radius:0;display:none}.content-chip-new .snowflake-content-chip-image{margin-right:0;max-width:180px;flex-shrink:0}.content-chip-new .snowflake-content-chip-content{padding:24px}.content-chip-new .black-blue-text-color .snowflake-title-v2-line:first-child{font-size:24px;line-height:1.1}.content-chip-new .black-blue-text-color .snowflake-title-v2-line:not(:first-child){font-family:'Lato',sans-serif;font-size:17px;color:#535862 !important;font-weight:500;line-height:1.45;margin-top:8px;display:none}div.snowflake-text a{font-weight:normal;color:var(--ui-01);text-decoration:underline;text-underline-offset:4px;text-decoration-style:dotted !important;text-decoration-color:transparent;transition:300ms ease text-decoration-color}div.snowflake-text a:hover{text-decoration-color:var(--ui-01);transition:300ms ease text-decoration-color}.footer-nav__link-group .snowflake-button-container,.subnav__item--button,.snowflake-card-v2-advanced-button .snowflake-button-container{justify-content:flex-start}.button-container\u003E.container\u003E.cmp-container\u003E.aem-container{align-items:center}.button-container\u003E.container\u003E.cmp-container\u003E.aem-container .snowflake-button-primary+.snowflake-button-link{margin-left:12px !important}.snowflake-button-regular.snowflake-button-link .snowflake-button-container{font-size:18px !important;text-align:left;justify-content:flex-start;line-height:1.4 !important}body .snowflake-card-v2-advanced{border:1px solid rgba(204,204,204,.5);border-radius:var(--spacing-02);transition:300ms ease all}body .snowflake-card-v2-advanced:hover{transform:translateY(-10px);box-shadow:rgba(152,162,179,.1) 0 10px 20px 0;transition:300ms ease all}body .snowflake-card-v2-advanced-inner{border-bottom:none}body .snowflake-card-v2-advanced-image{line-height:0}body .snowflake-card-v2-advanced-image__image{aspect-ratio:16 / 9}body .snowflake-card-v2-advanced-content{position:relative}body .snowflake-card-v2-advanced-content::after{content:'';display:block;position:absolute;bottom:0;left:0;transition:300ms ease all;width:20%;height:4px;background-color:var(--ui-01);opacity:0}body .snowflake-card-v2-advanced:hover .snowflake-card-v2-advanced-content::after{width:100%;opacity:1;transition:300ms ease all}body .snowflake-card-v2-advanced .snowflake-button-link.snowflake-button-blue .snowflake-button-container\u003E.link-icon{transition:300ms ease transform}body .snowflake-card-v2-advanced:hover .snowflake-button-link.snowflake-button-blue .snowflake-button-container\u003E.link-icon{transform:translateX(4px);transition:300ms ease transform}.six-columns\u003E.container\u003E.cmp-container\u003E.aem-container,.three-columns\u003E.container\u003E.cmp-container\u003E.aem-container,.four-columns\u003E.container\u003E.cmp-container\u003E.aem-container,.five-columns\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;flex-wrap:wrap;gap:24px}.six-columns.align-center\u003E.container\u003E.cmp-container\u003E.aem-container,.three-columns.align-center\u003E.container\u003E.cmp-container\u003E.aem-container,.four-columns.align-center\u003E.container\u003E.cmp-container\u003E.aem-container,.five-columns.align-center\u003E.container\u003E.cmp-container\u003E.aem-container{justify-content:center}.three-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:100%;margin:0 !important}.six-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv,.four-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv,.five-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(50% - 12px);margin:0 !important}@media screen and (min-width:768px){.three-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(50% - 12px)}.six-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv,.four-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv,.five-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(33.333% - 16px)}}@media screen and (min-width:1024px){.snowflake-title-v2.lowercase .heading-3-v2{font-size:34px}.snowflake-title-v2.lowercase.larger .heading-2-v2{font-size:44px;line-height:.95}.three-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(33.333% - 16px)}.four-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(25% - 18px)}.five-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(20% - 19.2px)}.six-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(16.6666% - 20px)}.snowflake-title-v2.lowercase .heading-3-v2{font-size:28px !important}}@media screen and (min-width:1200px){.snowflake-title-v2.lowercase .heading-2-v2{font-size:40px}.content-chip-new .snowflake-content-chip-content{padding:32px}.content-chip-new .snowflake-image-container,.content-chip-new .black-blue-text-color .snowflake-title-v2-line:not(:first-child){display:block}}.promo-banner-25{border-radius:16px;overflow:hidden}.promo-banner-25 .snowflake-premium-content-banner-image-container{position:relative;max-width:380px}.promo-banner-25 .snowflake-text{color:#535862}.promo-banner-25 .snowflake-premium-content-banner-image__image{transform:translateY(8px);transition:300ms ease transform;border-radius:0;width:85%;margin:0 auto;display:block;position:relative;z-index:1}.promo-banner-25 .snowflake-premium-content-banner-image__link:hover .snowflake-premium-content-banner-image__image{transform:translateY(0);transition:300ms ease transform}.promo-banner-25 .snowflake-premium-content-banner-image__inner{height:auto;padding-top:24px}.promo-banner-25 .snowflake-premium-content-banner-image__link{position:relative;z-index:1;height:auto}.promo-banner-25 .snowflake-premium-content-banner-image__link::after{content:'';display:block;position:absolute;clip-path:polygon(0 0,66% 0,100% 100%,0 100%);bottom:0;left:0;width:100%;height:100%;background:var(--ui-01);transition:300ms ease width}.promo-banner-25 .snowflake-premium-content-banner-image__link:hover::after{width:110%;transition:300ms ease width}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap select{background-position:95% 50%}.sf-footer__disclaimers .text-size-small .snowflake-text p{color:#fff !important;font-size:10px !important;opacity:.8}@media screen and (min-width:768px){.sf-footer__disclaimers .text-size-small .snowflake-text p{font-size:12px !important}}@media screen and (max-width:1023px){.mobile-top-padding{padding-top:64px}}@media (max-width:799px){.sf-footer .snowflake-marketo-form .mktoButtonWrap.mktoNative .mktoButton{width:100% !important}.sf-footer__logo{text-align:center;display:block;margin:0 auto}}.customer-card .snowflake-card-v2-advanced-image{aspect-ratio:4.35 / 1}.customer-card .snowflake-card-v2-advanced-image__image{width:100%;height:100%;padding-left:8px;object-fit:contain;object-position:left center;margin:0 !important;aspect-ratio:initial}.customer-card .snowflake-card-v2-advanced-image__inner{height:110px}.customer-card .snowflake-card-v2-advanced-tag-indicator{display:none}.pc-hero .snowflake-container-arrow-small-gray-image{top:-34% !important;width:18% !important}.pc-hero .snowflake-container-arrow-small-gray-image path{fill:var(--ui-01);opacity:1}@media screen and (max-width:767px){.mobile-padding-top{padding-top:64px}.hide-mobile{display:none !important}.pc-hero{padding-top:52px}.pc-hero .snowflake-text p,.pc-hero .left-alignment .snowflake-title-v2-line,.pc-hero h1 span{text-align:center !important}}div.snowflake-pushdown-banner-button{margin-top:0}.button-group.align-center\u003E.container\u003E.cmp-container\u003E.aem-container{align-items:center;justify-content:center !important}.text-center .snowflake-breadcrumb-swiper .swiper-wrapper{justify-content:center}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}.hide-filters .snowflake-filterable-and-searchable-grid-top-part{display:none !important}.page-section{padding-left:24px;padding-right:24px}@media screen and (min-width:768px){.page-section{padding-left:48px;padding-right:48px}}.download-card pre[class*=language-]{overflow-x:scroll !important}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false}},":itemsOrder":["container_copy","container_573483281_","markup_editor_copy"],":type":"snowflake-site/components/container"}},":itemsOrder":["root"],"classNames":"aem-xf",":type":"snowflake-site/components/experiencefragment"},"markup_editor":{"id":"markup-editor-8cf9b42624","title":"Quickstarts Overrides","cssContent":".snowflake-markdown blockquote{padding:24px 32px;background:#f6f9fa;border:1px solid #29b5e8;border-radius:16px}.snowflake-markdown .snowflake-image-container img{width:auto !important;max-width:100%}.snowflake-markdown .snowflake-text ol{padding-left:20px !important}.snowflake-markdown .snowflake-text li{margin:0 0 12px 0 !important}.snowflake-markdown h3.snowflake-markdown-h3{font-size:20px !important;font-family:Texta,sans-serif !important}@media (min-width:768px){.snowflake-markdown h3.snowflake-markdown-h3{font-size:28px !important}}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false}},":itemsOrder":["experiencefragment-banner","experiencefragment-header","markup_editor_1950346551","responsivegrid","modal_container","experiencefragment-footer","markup_editor"],":type":"wcm/foundation/components/responsivegrid"}},":itemsOrder":["root"],"isPasswordProtected":false,":hierarchyType":"page",":path":"/content/snowflake-site/global/en/developers/guides/build-autonomous-sql-pipelines-for-ai-agents","analyticsEnabled":true,"analyticsContentTags":["snowflake-site:taxonomy/solution-center/certification/quickstart","snowflake-site:taxonomy/snowflake-feature/dynamic-tables","snowflake-site:taxonomy/product/data-engineering","snowflake-site:taxonomy/snowflake-feature/cortex"],":mappedPath":"/en/developers/guides/build-autonomous-sql-pipelines-for-ai-agents/",":type":"snowflake-site/components/structure/page","analyticsData":{"excludeFromAnalytics":false,"subCategory":"","pageType":"quickstart-page-template","templateName":"quickstart-page-template","siteName":"snowflake","pageUrl":"/content/snowflake-site/global/en/developers/guides/build-autonomous-sql-pipelines-for-ai-agents","language":"en","category":"general","pageName":"Build Autonomous Pipelines for AI Agents","contentTags":["snowflake-site:taxonomy/solution-center/certification/quickstart","snowflake-site:taxonomy/snowflake-feature/dynamic-tables","snowflake-site:taxonomy/product/data-engineering","snowflake-site:taxonomy/snowflake-feature/cortex"]},"coveoConfig":{"organizationId":"snowflakecomputingproduction8neljofn","apiKey":"xx335921a6-2a0a-40f2-a167-e390b4766c3d","pipeline":"snowflake.com","searchHub":"snowflake.com"},"locale":"en"}
  