{"allowedRenditionsWidth":["320","480","640","768","960","1200","1440","1920"],"templateName":"quickstart-page-template","cssClassNames":"page basicpage summit-page","language":"en","title":"Zero to Snowflake","analyticsPageType":"quickstart-page-template","analyticsCategory":"general","analyticsSubCategory":"","excludeFromAnalytics":false,"analyticsContentTags":["snowflake-site:taxonomy/solution-center/certification/quickstart","snowflake-site:taxonomy/product/platform","snowflake-site:taxonomy/snowflake-feature/dynamic-tables","snowflake-site:taxonomy/snowflake-feature/transformation","snowflake-site:taxonomy/snowflake-feature/ingestion"],"analyticsEnabled":true,"coveoConfig":{"searchHub":"snowflake.com","organizationId":"snowflakecomputingproduction8neljofn","apiKey":"xx335921a6-2a0a-40f2-a167-e390b4766c3d","pipeline":"snowflake.com"},"analyticsDebugMode":false,"analyticsData":{"excludeFromAnalytics":false,"subCategory":"","pageType":"quickstart-page-template","templateName":"quickstart-page-template","siteName":"snowflake","pageUrl":"/content/snowflake-site/global/en/developers/guides/zero-to-snowflake","language":"en","category":"general","pageName":"Zero to Snowflake","contentTags":["snowflake-site:taxonomy/solution-center/certification/quickstart","snowflake-site:taxonomy/product/platform","snowflake-site:taxonomy/snowflake-feature/dynamic-tables","snowflake-site:taxonomy/snowflake-feature/transformation","snowflake-site:taxonomy/snowflake-feature/ingestion"]},":mappedPath":"/en/developers/guides/zero-to-snowflake/",":type":"snowflake-site/components/structure/page",":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-22563fa716","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":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-d7194c37c9",":type":"snowflake-site/components/container",":items":{"pushdown_banner_copy":{"id":"pushdown-banner-bd6cc9adbc","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Register now"},":type":"snowflake-site/components/pushdown-banner","appliedCssClassNames":"snowflake-pushdown-banner-text-white snowflake-pushdown-banner-background-black"}},":itemsOrder":["pushdown_banner_copy"]},"image":{":type":"nt:unstructured"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","image","cq:metadata"]},"experiencefragment-header":{"id":"experiencefragment-d45e245af5","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":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-4d302ba163",":type":"snowflake-site/components/container",":items":{"markup_editor":{"id":"markup-editor-c0e68e167b","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-92f9af5411",":type":"snowflake-site/components/mega-header",":items":{"nav_mega":{"activeItem":"item_1719963657751_c_663444255","id":"tabs-3eabe27188",":type":"snowflake-site/components/nav/nav-mega",":items":{"item_1719963657751_c_663444255":{"id":"nav-dropdown-menu-7389aa9e07","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-d64d35af95",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column":{"additionalClasses":"nav-platform-sidebar","numberOfSubColumns":"one-column","minWidth":"230","maxWidth":"350","layout":"SIMPLE","id":"container-308b202ff5",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_copy_2_793631646":{"id":"nav-item-9569c2982d","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"The Snowflake Platform"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-e7f7fa9b8c","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Snowflake CoWork"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2_836345186":{"id":"nav-item-7fe691494b","additionalClasses":"blue-icon is-analytics","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/analytics/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Analytics"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2":{"id":"nav-item-8ff18fab43","additionalClasses":"blue-icon is-ai","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/ai/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"AI"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2_1314771042":{"id":"nav-item-e42b17a6f2","additionalClasses":"blue-icon is-data-eng","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/data-engineering/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Data Engineering"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634":{"id":"nav-item-6fdd0340de","additionalClasses":"blue-icon is-apps-collab","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/applications-and-collaboration/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Applications & Collaboration"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634_2013333117":{"id":"nav-item-3d29be46c6","additionalClasses":"blue-icon is-transactions","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/transactions/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","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"]},"nav_column_copy_copy":{"additionalClasses":"meganav-platform-features","navColumnTitle":"Featured Capabilities","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-26f33de7dd",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_212715":{"id":"nav-item-33fb297a28","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Snowflake CoCo"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-af7359a8e7","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Cortex AI"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590635":{"id":"nav-item-c8e21d3678","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Marketplace"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590":{"id":"nav-item-f4584a6720","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Snowpark"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590_983061516":{"id":"nav-item-3bec673ab3","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","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"]},"nav_column_692142673":{"navColumnTitle":" ","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-743b3eebef",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_660590_1739526127":{"id":"nav-item-b5e4bb8ea6","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Postgres"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565":{"id":"nav-item-7027bf8100","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Snowflake ML"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_212715":{"id":"nav-item-dc627f5cae","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Openflow"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590":{"id":"nav-item-c0f9c4a9e9","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Notebooks"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_258535199":{"id":"nav-item-0b39838184","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","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"]},"nav_column_782221091":{"navColumnTitle":" ","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-7d51ae026e",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy":{"id":"nav-item-5e2aa92250","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Horizon Catalog"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590_1293798742":{"id":"nav-item-19acaaebbb","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Horizon Context"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_511717659_c":{"id":"nav-item-64c5754ab0","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Unistore"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_511717659_c_1443811525":{"id":"nav-item-2b241fb2ae","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Observe"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_511717659_c_1006104884":{"id":"nav-item-d7c7aa3059","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","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"]}},":itemsOrder":["nav_column","nav_column_copy_copy","nav_column_692142673","nav_column_782221091"]},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Product"},"nav_dropdown_menu_2":{"id":"nav-dropdown-menu-1810dd60c9","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-f0c135de1e",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column":{"navColumnTitle":"INDUSTRIES","numberOfSubColumns":"one-column","minWidth":"280","layout":"SIMPLE","id":"container-0e78d0fc4b",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_361384_2056203141":{"id":"nav-item-822b06c37c","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"All Industries"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-8f7c33a988","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/advertising-media-entertainment/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Advertising, Media & Entertainment"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-21835d1ab9","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/financial-services/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Financial Services"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-6516b3bc07","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/healthcare-and-life-sciences/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Healthcare & Life Sciences"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1533429516":{"id":"nav-item-682a0c41d5","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/manufacturing/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Manufacturing"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1444458226":{"id":"nav-item-c84be4f464","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/public-sector/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Public Sector"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1149488919":{"id":"nav-item-98678696c1","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/retail-consumer-goods/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Retail & Consumer Goods"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_57417040":{"id":"nav-item-79e4446e82","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/technology/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Technology"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_361384674":{"id":"nav-item-7697f40484","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/telecom/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Telecom"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_361384":{"id":"nav-item-9f0af1c541","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/travel-hospitality/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","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"},"nav_column_copy":{"navColumnTitle":"DEPARTMENTS","numberOfSubColumns":"one-column","minWidth":"160","layout":"SIMPLE","id":"container-1d870ecb2c",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-10a51828ca","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/solutions/departments/finance/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Finance"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-ee595c4c17","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/solutions/departments/information-technology/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"IT"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-1a5219d700","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/solutions/departments/marketing/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Marketing"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_1970515619"]},"nav_column_833417450":{"navColumnTitle":"Enablement Solutions","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-c1616faddb",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_107772":{"id":"nav-item-aef8873287","linkDescription":"Confident migration to a unified platform","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/migrate-to-the-cloud/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Migrate to the AI Data Cloud"},"icon":{"id":"icon","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","alt":"Cloud icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy":{"id":"nav-item-fe3443fc25","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Services Delivery"},"icon":{"id":"icon","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","alt":"Migrate icon","lazyEnabled":true,"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"]},"nav_column_copy_copy":{"navColumnTitle":"PARTNER SOLUTIONS","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-a831b7afbc",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-a4669fd507","linkDescription":"Programs with product, solutions and cloud partners","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/partners/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Snowflake Partner Network"},"icon":{"id":"icon","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","alt":"Partner Network icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-bb1fd9ebcd","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Partner Finder"},"icon":{"id":"icon","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","alt":"Partner Finder icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-82dc3f24a7","linkDescription":"Live and virtual events","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/partners/event-partnership-opportunities/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Event Partnership Opportunities"},"icon":{"id":"icon","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","alt":"Calendar icon","lazyEnabled":true,"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"]}},":itemsOrder":["nav_column","nav_column_copy","nav_column_833417450","nav_column_copy_copy"]},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Solutions"},"item_1719963657751_c":{"id":"nav-dropdown-menu-0d87d8b4f7","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-d5f000b37c",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column":{"numberOfSubColumns":"one-column","minWidth":"230","maxWidth":"350","layout":"SIMPLE","id":"container-9f2a580c90",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_copy_2_793631646":{"id":"nav-item-3ed8194e81","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Why Snowflake"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_copy_2_793631646"]},"nav_column_copy_copy":{"additionalClasses":"meganav-platform-features","numberOfSubColumns":"two-columns","maxWidth":"1200","layout":"SIMPLE","id":"container-df12a2beb2",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-731e483465","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Customers"},"icon":{"id":"icon","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","alt":"Customer icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_258535199":{"id":"nav-item-2d10698b03","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"The AI Data Cloud Explained"},"icon":{"id":"icon","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","alt":"Cloud icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565":{"id":"nav-item-2cc4bf0064","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Security Hub"},"icon":{"id":"icon","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","alt":"User with security lock icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-b5462d21c0","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Cost and Performance Optimization"},"icon":{"id":"icon","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","alt":"Cost Optimization icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565_903555964":{"id":"nav-item-2d68cca66f","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Snowflake for Startups"},"icon":{"id":"icon","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","alt":"Launch","lazyEnabled":true,"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"]}},":itemsOrder":["nav_column","nav_column_copy_copy"]},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Why Snowflake"},"item_1719961362824":{"id":"nav-dropdown-menu-dcc3d3c8a7","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-10ed865b2a",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column_copy":{"navColumnTitle":"Connect","numberOfSubColumns":"one-column","minWidth":"124","layout":"SIMPLE","id":"container-dd0f6c3f4f",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-abc91b5570","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Blog"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_180298689":{"id":"nav-item-fd1adc14ca","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/events/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Events"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_1639361946":{"id":"nav-item-d2c97f3388","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/support/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Support"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_680912746":{"id":"nav-item-a38209b699","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/contact/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Contact us"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_180298689","nav_item_1639361946","nav_item_680912746"]},"nav_column_44600420__826130542":{"navColumnTitle":"Learn","numberOfSubColumns":"two-columns","layout":"SIMPLE","id":"container-0275b5d02b",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy":{"id":"nav-item-cc9695d881","linkDescription":"Ebooks, videos, white papers and more","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/resources/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Resource Library"},"icon":{"id":"icon","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","alt":"Notebooks icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-1f3e956409","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Training"},"icon":{"id":"icon","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","alt":"Training icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634_1984107859":{"id":"nav-item-fb37dcab8f","linkDescription":"Expert-led discussions and demos across industries and use cases","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/webinars/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Webinars"},"icon":{"id":"icon","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","alt":"Webinars icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1438098918":{"id":"nav-item-e63eee0a1e","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Certifications"},"icon":{"id":"icon","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","alt":"Certification icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_143809":{"id":"nav-item-b276016a6a","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Live Demos"},"icon":{"id":"icon","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","alt":"Live Demo icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890638":{"id":"nav-item-d1b2ca40a7","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Snowflake University"},"icon":{"id":"icon","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","alt":"Education icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_189945":{"id":"nav-item-c6f6751036","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Hands-On Labs"},"icon":{"id":"icon","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","alt":"Hands-on Labs icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890":{"id":"nav-item-c78c376fec","linkDescription":"Academic papers written by Snowflake researchers","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/resources/publications/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Snowflake Research Publications"},"icon":{"id":"icon","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","alt":"Copy","lazyEnabled":true,"height":"64","width":"65",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890_930852828":{"id":"nav-item-50c5b5e5b2","linkDescription":"Informative articles about AI and data topics","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/fundamentals/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Fundamentals"},"icon":{"id":"icon","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","alt":"Document with list","lazyEnabled":true,"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"]}},":itemsOrder":["nav_column_copy","nav_column_44600420__826130542"]},"nav_promo_section":{"id":"nav-promo-section-621cda96e7","experience_fragment_1":{"id":"experiencefragment-3aca985fe2","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/master1/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":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-87d2af19b4",":type":"snowflake-site/components/container",":items":{"nav_promo_card":{"id":"nav-promo-card-3253cf1051","openInNewWindow":true,"layout":"horizontal","headline":"The Modern Marketing Data Stack 5th Edition","description":"AI agents are changing the marketing stack. See how to govern the shift. ","linkTitle":"Learn more","linkUrl":"/en/the-modern-marketing-data-stack-report/","image":{"id":"image","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--b3030d24-fd50-45e6-bfe6-9520d3eb46d8/web-inside-the-mmds-5th-960x540.png?preferwebp=true&quality=85","alt":"MMDS report 5th edition","lazyEnabled":true,"height":"540","width":"960",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"]},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","cq:metadata"]},"experience_fragment_2":{"id":"experiencefragment-d760aad942","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/navigation-promo-card-2/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":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-ae92e3ddcc",":type":"snowflake-site/components/container",":items":{"nav_promo_card":{"id":"nav-promo-card-5244fd1436","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","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","alt":"roi of gen ai and agents","lazyEnabled":true,"height":"540","width":"960",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"]},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","cq:metadata"]},"experience_fragment_3":{"id":"experiencefragment-342644824d","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/navigation-promo-card-3/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":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-c698b35d23",":type":"snowflake-site/components/container",":items":{"nav_promo_card":{"id":"nav-promo-card-edb4477762","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","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--a320b404-dca1-4477-b033-c79708538657/web-startup-2026-960x540.png?preferwebp=true&quality=85","alt":"alt","lazyEnabled":true,"height":"540","width":"960",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"]},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","cq:metadata"]},":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-ef486bfeb5","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-ddc06bdf53",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column_copy_copy":{"navColumnTitle":"Build","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-28f47ef796",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-bac9cbab1c","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Snowflake for Developers"},"icon":{"id":"icon","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","alt":"Developers icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1855651246":{"id":"nav-item-6378b13b41","linkDescription":"Reference architectures, use cases and best practices","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/guides/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Developer Guides"},"icon":{"id":"icon","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","alt":"Solution Center icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-08a03d9631","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Downloads"},"icon":{"id":"icon","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","alt":"Download icon","lazyEnabled":true,"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"]},"nav_column_copy_copy_1367930678":{"navColumnTitle":"Learn","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-e5fb9977b3",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-f3ee02775f","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Documentation"},"icon":{"id":"icon","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","alt":"Docs icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-d32f03819a","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Open Source"},"icon":{"id":"icon","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","alt":"Open Source icon","lazyEnabled":true,"height":"32","width":"32",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy":{"id":"nav-item-fdae0f088b","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Builder Education"},"icon":{"id":"icon","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","alt":"Northstar logo","lazyEnabled":true,"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"]},"nav_column_copy_copy_1101894776":{"navColumnTitle":"Connect","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-83b2cfe9ed",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-2a4a0c9341","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Engineering Blog"},"icon":{"id":"icon","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","alt":"Developers icon","lazyEnabled":true,"height":"32","width":"32",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1855651246":{"id":"nav-item-dd05ff0cf8","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",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Community"},"icon":{"id":"icon","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","alt":"Partner Network icon","lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy_1855651246"]}},":itemsOrder":["nav_column_copy_copy","nav_column_copy_copy_1367930678","nav_column_copy_copy_1101894776"]},"nav_promo_section":{"id":"nav-promo-section-aca22949c7","experience_fragment_1":{"id":"experiencefragment-d24a288402","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/nav-promo-5/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":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-3726bd3592",":type":"snowflake-site/components/container",":items":{"nav_promo_card":{"id":"nav-promo-card-70ae634d07","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","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--dc7e334a-c38b-4283-b1de-fcf829952eef/nav-promo-first-notebook.jpg?preferwebp=true&quality=85","alt":"alt","lazyEnabled":true,"height":"210","width":"415",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"]},"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"]},"experience_fragment_2":{"id":"experiencefragment-7a8d62107e","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/nav-promo-card-4/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":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-34cf9a211b",":type":"snowflake-site/components/container",":items":{"nav_promo_card":{"id":"nav-promo-card-2816921768","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","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--14341ced-bc5e-4a29-9762-b7857f6cadfc/nav-promo-northstar.jpg?preferwebp=true&quality=85","alt":"Snowflake Northstar logo","lazyEnabled":true,"height":"700","width":"1440",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"]},"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"]},":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-7b2958244d","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-d4a327bdcd","languageNavItems":[{"title":"English","path":"/en/developers/guides/zero-to-snowflake/","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-3cd4d75192","heapButtonClasses":["mega-nav__sign-in"],"showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://app.snowflake.com/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","appliedCssClassNames":"snowflake-button-link snowflake-button-black snowflake-button-compact","text":"Sign in"},"button":{"id":"button-4f229f595d","heapButtonClasses":["contact_nav","heap-nav-contact"],"showOutboundIcon":true,"buttonLink":{"valid":true,"url":"/en/contact-sales/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","appliedCssClassNames":"snowflake-button-secondary snowflake-button-blue snowflake-button-compact","text":"CONTACT SALES"},"button_288358396":{"id":"button-f8ae8b83dc","heapButtonClasses":["start_for_free_nav","heap-nav-start-for-free"],"showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://signup.snowflake.com/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","appliedCssClassNames":"snowflake-button-primary snowflake-button-blue snowflake-button-compact","text":"start for free"}},":itemsOrder":["nav_mega","languagenavigation","button_1177328691","button","button_288358396"],"appliedCssClassNames":"snowflake-header-container white"}},":itemsOrder":["markup_editor","mega_header"]},"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"]},"markup_editor_1950346551":{"id":"markup-editor-de653f760d","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-41939d4d1d","quickstartHeroTitle":{"lines":["Zero to Snowflake"],"type":"heading2",":type":"snowflake-site/components/title-v2"},"quickstartHeroAuthor":"Cameron Shimmin, Dureti Shemsi","quickstartHeroFirstSnowflakeFeatureTag":{"tagText":"Dynamic Tables","tagColor":"#29B5E8","tagPath":"/content/cq:tags/snowflake-site/taxonomy/snowflake-feature/dynamic-tables","tagIcon":""},"quickstartHeroForkRepoLink":{"id":"button-ae18c55209","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://github.com/Snowflake-Labs/sfquickstarts/tree/master/site/sfguides/src/zero-to-snowflake"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Fork Repo"},"quickstartHeroBreadcrumbs":[{"title":"Zero to Snowflake","url":"https://www.snowflake.com/content/snowflake-site/global/en/developers/guides/zero-to-snowflake","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}],"isDeveloperGuidesPage":false,"quickstartHeroFirstCertifiedTag":{"tagText":"Quickstart","tagColor":"#29B5E8","tagPath":"/content/cq:tags/snowflake-site/taxonomy/solution-center/certification/quickstart","tagIcon":""},"fragmentPath":"/content/dam/snowflake-site/en/content-fragments/quickstarts/zero-to-snowflake",":type":"snowflake-site/components/quickstart/quickstart-hero"},"flexible_column_cont":{"id":"flexible-column-container-f63e90b529","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-2984639fc3",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"contentfragment":{"id":"contentfragment-dff2bd3975","paragraphs":["\u003Ch2\u003EOverview\u003C/h2\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/zts_header.png\" alt=\"./assets/zts_header.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EOverview\u003C/h3\u003E\n","\u003Cp\u003EWelcome to the Zero to Snowflake Quickstart! This guide is a consolidated journey through key areas of the Snowflake AI Data Cloud. You will start with the fundamentals of warehousing and data transformation, build an automated data pipeline, then see how you can experiment with LLMs using the Cortex Playground to compare different models for summarizing text, use AISQL Functions to instantly analyze customer review sentiment with a simple SQL command, and harness Cortex Search for intelligent text discovery, and utilize Cortex Analyst for conversational business intelligence. Finally, you will learn to secure your data with powerful governance controls and enrich your analysis through seamless data collaboration.\u003C/p\u003E\n","\u003Cp\u003EWe'll apply these concepts using a sample dataset from our fictitious food truck, Tasty Bytes, to improve and streamline their data operations. We'll explore this dataset through several workload-specific scenarios, demonstrating the benefits Snowflake provides to businesses.\u003C/p\u003E\n","\u003Ch3\u003EWho is Tasty Bytes?\u003C/h3\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/whoistb.png\" alt=\"./assets/whoistb.png\"\u003E\u003C/p\u003E\n","\u003Cp\u003EOur mission is to provide unique, high-quality food options in a convenient and cost-effective manner, emphasizing the use of fresh ingredients from local vendors. Their vision is to become the largest food truck network in the world with a zero carbon footprint.\u003C/p\u003E\n","\u003Ch3\u003EPrerequisites\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EA Supported Snowflake \u003Ca href=\"https://docs.snowflake.com/en/user-guide/setup?_fsi=6tNBra0z&amp;_fsi=6tNBra0z#browser-requirements\"\u003EBrowser\u003C/a\u003E\u003C/li\u003E\u003Cli\u003EAn Enterprise or Business Critical Snowflake Account\u003C/li\u003E\u003Cli\u003EIf you do not have a Snowflake Account, please \u003Ca href=\"https://signup.snowflake.com/?utm_source=snowflake-devrel&amp;utm_medium=developer-guides&amp;utm_cta=developer-guides&amp;_fsi=6tNBra0z&amp;_fsi=6tNBra0z\"\u003Esign up for a Free 30 Day Trial Account\u003C/a\u003E. When signing up, please make sure to select  Enterprise edition. You are welcome to choose any \u003Ca href=\"https://docs.snowflake.com/en/user-guide/intro-regions?_fsi=6tNBra0z&amp;_fsi=6tNBra0z\"\u003ESnowflake Cloud/Region\u003C/a\u003E.\u003C/li\u003E\u003Cli\u003EAfter registering, you will receive an email with an activation link and your Snowflake Account URL.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You Will Learn\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EVignette 1: Getting Started with Snowflake:\u003C/strong\u003E The fundamentals of Snowflake warehouses, caching, cloning, and Time Travel.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EVignette 2: Simple Data Pipelines:\u003C/strong\u003E How to ingest and transform semi-structured data using Dynamic Tables.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EVignette 3: Snowflake Cortex AI:\u003C/strong\u003E How to leverage Snowflake's comprehensive AI capabilities for experimentation, scalable analysis, AI-assisted development, and conversational business intelligence.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EVignette 4: Governance with Horizon:\u003C/strong\u003E How to protect your data with roles, classification, masking, and row-access policies.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EVignette 5: Apps &amp; Collaboration:\u003C/strong\u003E How to leverage the Snowflake Marketplace to enrich your internal data with third-party datasets.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You Will Build\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EA comprehensive understanding of the core Snowflake platform.\u003C/li\u003E\u003Cli\u003EConfigured Virtual Warehouses.\u003C/li\u003E\u003Cli\u003EAn automated ELT pipeline with Dynamic Tables.\u003C/li\u003E\u003Cli\u003EA complete intelligence customer analytics platform leveraging Snowflake AI.\u003C/li\u003E\u003Cli\u003EA robust data governance framework with roles and policies.\u003C/li\u003E\u003Cli\u003EEnriched analytical views combining first- and third-party data.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch2\u003ESetup\u003C/h2\u003E\n","\u003Ch3\u003E\u003Cstrong\u003EOverview\u003C/strong\u003E\u003C/h3\u003E\n","\u003Cp\u003EIn this guide, we will use &lt;a href=&quot;https://app.snowflake.com/_deeplink/#/workspaces?utm_source=snowflake-devrel&amp;utm_medium=developer-guides&amp;utm_content=zero-to-snowflake&amp;utm_cta=developer-guides-deeplink&quot; class=&quot;_deeplink&quot;&gt;Snowflake Workspaces&lt;/a&gt; to organize, edit, and run all the SQL scripts required for this course. We will create a dedicated SQL file for the setup and each vignette. This will keep our code organized and easy to manage.\u003C/p\u003E\n","\u003Cp\u003ELet's walk through how to create your first SQL file, add the necessary setup code, and run it.\u003C/p\u003E\n","\u003Ch3\u003E\u003Cstrong\u003EStep 1 - Create Your Setup SQL File\u003C/strong\u003E\u003C/h3\u003E\n","\u003Cp\u003EFirst, we need a place to put our setup script.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\u003Cstrong\u003ENavigate to &lt;a href=&quot;https://app.snowflake.com/_deeplink/#/workspaces?utm_source=snowflake-devrel&amp;utm_medium=developer-guides&amp;utm_content=zero-to-snowflake&amp;utm_cta=developer-guides-deeplink&quot; class=&quot;_deeplink&quot;&gt;Workspaces&lt;/a&gt;:\u003C/strong\u003E In the left-hand navigation menu of the Snowflake UI, click on \u003Cstrong\u003EProjects\u003C/strong\u003E &raquo; \u003Cstrong\u003E&lt;a href=&quot;https://app.snowflake.com/_deeplink/#/workspaces?utm_source=snowflake-devrel&amp;utm_medium=developer-guides&amp;utm_content=zero-to-snowflake-deeplink&quot; class=&quot;_deeplink&quot;&gt;Workspaces&lt;/a&gt;\u003C/strong\u003E. This is the central hub for all your SQL files.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ECreate a New SQL File:\u003C/strong\u003E Find and click the \u003Cstrong\u003E+ Add New\u003C/strong\u003E button in the top-left corner of the &lt;a href=&quot;https://app.snowflake.com/_deeplink/#/workspaces?utm_source=snowflake-devrel&amp;utm_medium=developer-guides&amp;utm_content=zero-to-snowflake&amp;utm_cta=developer-guides-deeplink&quot; class=&quot;_deeplink&quot;&gt;Workspaces&lt;/a&gt; area, then select \u003Cstrong\u003ESQL File\u003C/strong\u003E. This will generate a new, blank SQL file.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ERename the SQL File:\u003C/strong\u003E Your new SQL file will have a name based on the timestamp it was created. Give it a descriptive name like \u003Cstrong\u003EZero To Snowflake - Setup\u003C/strong\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch3\u003E\u003Cstrong\u003EStep 2 - Add and Run the Setup Script\u003C/strong\u003E\u003C/h3\u003E\n","\u003Cp\u003ENow that you have your SQL file, it's time to add the setup SQL and execute it.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\u003Cstrong\u003ECopy the SQL Code:\u003C/strong\u003E Click the link for the \u003Cstrong\u003E\u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/setup.sql\"\u003Esetup file\u003C/a\u003E\u003C/strong\u003E and copy it to your clipboard.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EPaste into your SQL File:\u003C/strong\u003E Return to your Zero To Snowflake Setup SQL file in Snowflake and paste the entire script into the editor.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ERun the Script:\u003C/strong\u003E To execute all the commands in the SQL file sequentially, click the \u003Cstrong\u003E&quot;Run All&quot;\u003C/strong\u003E button located at the top-left of the editor. This will perform all the necessary setup actions, such as creating roles, schemas, and warehouses that you will need for the upcoming vignettes.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/create_a_worksheet.gif\" alt=\"./assets/create_a_worksheet.gif\"\u003E\u003C/p\u003E\n","\u003Ch3\u003E\u003Cstrong\u003ELooking Ahead\u003C/strong\u003E\u003C/h3\u003E\n","\u003Cp\u003EThe process you just completed for creating a new SQL file is the exact same workflow you will use for every subsequent vignette in this course.\u003C/p\u003E\n","\u003Cp\u003EFor each new vignette, you will:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003ECreate a \u003Cstrong\u003Enew\u003C/strong\u003E SQL file.\u003C/li\u003E\u003Cli\u003EGive it a descriptive name (e.g., Vignette 1 - Getting Started with Snowflake).\u003C/li\u003E\u003Cli\u003ECopy and paste the SQL script for that specific vignette.\u003C/li\u003E\u003Cli\u003EEach SQL file has all of the necessary instructions and commands to follow along.\u003C/li\u003E\u003C/ol\u003E\n&lt;!-- end list --&gt;\n","\u003Ch2\u003EGet Started with Snowflake\u003C/h2\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/getting_started_header.png\" alt=\"./assets/getting_started_header.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EOverview\u003C/h3\u003E\n","\u003Cp\u003EWithin this Vignette, we will learn about core Snowflake concepts by exploring Virtual Warehouses, using the query results cache, performing basic data transformations, leveraging data recovery with Time Travel, and monitoring our account with Resource Monitors and Budgets.\u003C/p\u003E\n","\u003Ch3\u003EWhat You Will Learn\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EHow to create, configure, and scale a Virtual Warehouse.\u003C/li\u003E\u003Cli\u003EHow to leverage the Query Result Cache.\u003C/li\u003E\u003Cli\u003EHow to use Zero-Copy Cloning for development.\u003C/li\u003E\u003Cli\u003EHow to transform and clean data.\u003C/li\u003E\u003Cli\u003EHow to instantly recover a dropped table using UNDROP.\u003C/li\u003E\u003Cli\u003EHow to create and apply a Resource Monitor.\u003C/li\u003E\u003Cli\u003EHow to create a Budget to monitor costs.\u003C/li\u003E\u003Cli\u003EHow to use Universal Search to find objects and information.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You Will Build\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EA Snowflake Virtual Warehouse\u003C/li\u003E\u003Cli\u003EA development copy of a table using Zero-Copy Clone\u003C/li\u003E\u003Cli\u003EA Resource Monitor\u003C/li\u003E\u003Cli\u003EA Budget\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EGet the SQL code and paste it into your SQL File.\u003C/h3\u003E\n","\u003Cp\u003E\u003Cstrong\u003ECopy and paste the SQL code from this \u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-1.sql\"\u003Efile\u003C/a\u003E in a new SQL File to follow along in Snowflake. Note that once you've reached the end of the SQL File you can skip to Step 10 - Simple Data Pipeline\u003C/strong\u003E\u003C/p\u003E\n","\u003Ch3\u003EVirtual Warehouses and Settings\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EVirtual Warehouses are the dynamic, scalable, and cost-effective computing power that lets you perform analysis on your Snowflake data. Their purpose is to handle all your data processing needs without you having to worry about the underlying technical details.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Setting Context\u003C/h4\u003E\n","\u003Cp\u003EFirst, lets set our session context. To run the queries, highlight the three queries at the top of your SQL file and click the &quot;► Run&quot; button.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER SESSION SET query_tag = '{&quot;origin&quot;:&quot;sf_sit-is&quot;,&quot;name&quot;:&quot;tb_zts,&quot;version&quot;:{&quot;major&quot;:1, &quot;minor&quot;:1},&quot;attributes&quot;:{&quot;is_quickstart&quot;:1, &quot;source&quot;:&quot;tastybytes&quot;, &quot;vignette&quot;: &quot;getting_started_with_snowflake&quot;}}';\n\nUSE DATABASE tb_101;\nUSE ROLE accountadmin;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Creating a Warehouse\u003C/h4\u003E\n","\u003Cp\u003ELet's create our first warehouse! This command creates a new X-Small warehouse that will initially be suspended.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE WAREHOUSE my_wh\n    COMMENT = 'My TastyBytes warehouse'\n    WAREHOUSE_TYPE = 'standard'\n    WAREHOUSE_SIZE = 'xsmall'\n    MIN_CLUSTER_COUNT = 1\n    MAX_CLUSTER_COUNT = 2\n    SCALING_POLICY = 'standard'\n    AUTO_SUSPEND = 60\n    INITIALLY_SUSPENDED = true\n    AUTO_RESUME = false;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EVirtual Warehouses\u003C/strong\u003E: A virtual warehouse, often referred to simply as a &ldquo;warehouse&rdquo;, is a cluster of compute resources in Snowflake. Warehouses are required for queries, DML operations, and data loading. For more information, see the \u003Ca href=\"https://docs.snowflake.com/en/user-guide/warehouses-overview\"\u003EWarehouse Overview\u003C/a\u003E.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 3 - Using and Resuming a Warehouse\u003C/h4\u003E\n","\u003Cp\u003ENow that we have a warehouse, we must set it as the active warehouse for our session. Execute the next statement.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE WAREHOUSE my_wh;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EIf you try to run the query below, it will fail, because the warehouse is suspended and does not have \u003Ccode\u003EAUTO_RESUME\u003C/code\u003E enabled.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT * FROM raw_pos.truck_details;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ELet's resume it and set it to auto-resume in the future.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER WAREHOUSE my_wh RESUME;\nALTER WAREHOUSE my_wh SET AUTO_RESUME = TRUE;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ENow, try the query again. It should execute successfully.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT * FROM raw_pos.truck_details;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 4 - Scaling a Warehouse\u003C/h4\u003E\n","\u003Cp\u003EWarehouses in Snowflake are designed for elasticity. We can scale our warehouse up on the fly to handle a more intensive workload. Let's scale our warehouse to an X-Large.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER WAREHOUSE my_wh SET warehouse_size = 'XLarge';\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EWith our larger warehouse, let's run a query to calculate total sales per truck brand.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT\n    o.truck_brand_name,\n    COUNT(DISTINCT o.order_id) AS order_count,\n    SUM(o.price) AS total_sales\nFROM analytics.orders_v o\nGROUP BY o.truck_brand_name\nORDER BY total_sales DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EQuery Result Cache\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EThis is a great place to demonstrate another powerful feature in Snowflake: the Query Result Cache. When you first ran the 'sales per truck' query, it likely took several seconds. If you run the exact same query again, the result will be nearly instantaneous. This is because the query results were cached in Snowflake's Query Result Cache.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Re-running a Query\u003C/h4\u003E\n","\u003Cp\u003ERun the same 'sales per truck' query from the previous step. Note the execution time in the query details pane. It should be much faster.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT\n    o.truck_brand_name,\n    COUNT(DISTINCT o.order_id) AS order_count,\n    SUM(o.price) AS total_sales\nFROM analytics.orders_v o\nGROUP BY o.truck_brand_name\nORDER BY total_sales DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/query_result_cache.png\" alt=\"assets/vignette-1/query_result_cache.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EQuery Result Cache\u003C/strong\u003E: Results are retained for any query for 24 hours. Hitting the result cache requires almost no compute resources, making it ideal for frequently run reports or dashboards. The cache resides in the Cloud Services Layer, making it globally accessible to all users and warehouses in the account. For more information, please visit the \u003Ca href=\"https://docs.snowflake.com/en/user-guide/querying-persisted-results\"\u003Edocumentation on using persisted query results\u003C/a\u003E.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 2 - Scaling Down\u003C/h4\u003E\n","\u003Cp\u003EWe will now be working with smaller datasets, so we can scale our warehouse back down to an X-Small to conserve credits.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER WAREHOUSE my_wh SET warehouse_size = 'XSmall';\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EBasic Transformation Techniques\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EIn this section, we will see some basic transformation techniques to clean our data and use Zero-Copy Cloning to create development environments. Our goal is to analyze the manufacturers of our food trucks, but this data is currently nested inside a \u003Ccode\u003EVARIANT\u003C/code\u003E column.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Creating a Development Table with Zero-Copy Clone\u003C/h4\u003E\n","\u003Cp\u003EFirst, let's take a look at the \u003Ccode\u003Etruck_build\u003C/code\u003E column.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT truck_build FROM raw_pos.truck_details;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThis table contains data about the make, model and year of each truck, but it is nested, or embedded in a special data type called a VARIANT. We can perform operations on this column to extract these values, but first we'll create a development copy of the table.\u003C/p\u003E\n","\u003Cp\u003ELet's create a development copy of our \u003Ccode\u003Etruck_details\u003C/code\u003E table. Snowflake's Zero-Copy Cloning lets us create an identical, fully independent copy of the table instantly, without using additional storage.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE TABLE raw_pos.truck_dev CLONE raw_pos.truck_details;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/object-clone\"\u003EZero-Copy Cloning\u003C/a\u003E\u003C/strong\u003E: Cloning creates a copy of a database object without duplicating the storage. Changes made to either the original or the clone are stored as new micro-partitions, leaving the other object untouched.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 2 - Adding New Columns and Transforming Data\u003C/h4\u003E\n","\u003Cp\u003ENow that we have a safe development table, let's add columns for \u003Ccode\u003Eyear\u003C/code\u003E, \u003Ccode\u003Emake\u003C/code\u003E, and \u003Ccode\u003Emodel\u003C/code\u003E. Then, we will extract the data from the \u003Ccode\u003Etruck_build\u003C/code\u003E \u003Ccode\u003EVARIANT\u003C/code\u003E column and populate our new columns.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- Add new columns\nALTER TABLE raw_pos.truck_dev ADD COLUMN IF NOT EXISTS year NUMBER;\nALTER TABLE raw_pos.truck_dev ADD COLUMN IF NOT EXISTS make VARCHAR(255);\nALTER TABLE raw_pos.truck_dev ADD COLUMN IF NOT EXISTS model VARCHAR(255);\n\n-- Extract and update data\nUPDATE raw_pos.truck_dev\nSET \n    year = truck_build:year::NUMBER,\n    make = truck_build:make::VARCHAR,\n    model = truck_build:model::VARCHAR;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 3 - Cleaning the Data\u003C/h4\u003E\n","\u003Cp\u003ELet's run a query to see the distribution of truck makes.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT \n    make,\n    COUNT(*) AS count\nFROM raw_pos.truck_dev\nGROUP BY make\nORDER BY make ASC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EDid you notice anything odd about the results from the last query? We can see a data quality issue: 'Ford' and 'Ford_' are being treated as separate manufacturers. Let's easily fix this with a simple \u003Ccode\u003EUPDATE\u003C/code\u003E statement.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUPDATE raw_pos.truck_dev\n    SET make = 'Ford'\n    WHERE make = 'Ford_';\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EHere we're saying we want to set the row's make value to \u003Ccode\u003EFord\u003C/code\u003E wherever it is \u003Ccode\u003EFord_\u003C/code\u003E. This will ensure none of the Ford makes have the underscore, giving us a unified make count.\u003C/p\u003E\n","\u003Ch4\u003EStep 4 - Promoting to Production with SWAP\u003C/h4\u003E\n","\u003Cp\u003EOur development table is now cleaned and correctly formatted. We can instantly promote it to be the new production table using the \u003Ccode\u003ESWAP WITH\u003C/code\u003E command. This atomically swaps the two tables.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER TABLE raw_pos.truck_details SWAP WITH raw_pos.truck_dev;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 5 - Cleanup\u003C/h4\u003E\n","\u003Cp\u003ENow that the swap is complete, we can drop the unnecessary \u003Ccode\u003Etruck_build\u003C/code\u003E column from our new production table. We also need to drop the old production table, which is now named \u003Ccode\u003Etruck_dev\u003C/code\u003E. But for the sake of the next lesson, we will &quot;accidentally&quot; drop the main table.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER TABLE raw_pos.truck_details DROP COLUMN truck_build;\n\n-- Accidentally drop the production table!\nDROP TABLE raw_pos.truck_details;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 6 - Data Recovery with UNDROP\u003C/h4\u003E\n","\u003Cp\u003EOh no! We accidentally dropped the production \u003Ccode\u003Etruck_details\u003C/code\u003E table. Luckily, Snowflake's Time Travel feature allows us to recover it instantly. The \u003Ccode\u003EUNDROP\u003C/code\u003E command restores dropped objects.\u003C/p\u003E\n","\u003Ch4\u003EStep 7 - Verify the Drop\u003C/h4\u003E\n","\u003Cp\u003EIf you run a \u003Ccode\u003EDESCRIBE\u003C/code\u003E command on the table, you will get an error stating it does not exist.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EDESCRIBE TABLE raw_pos.truck_details;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 8 - Restore the Table with UNDROP\u003C/h4\u003E\n","\u003Cp\u003ELet's restore the \u003Ccode\u003Etruck_details\u003C/code\u003E table to the exact state it was in before being dropped.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUNDROP TABLE raw_pos.truck_details;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/data-time-travel\"\u003ETime Travel &amp; UNDROP\u003C/a\u003E\u003C/strong\u003E: Snowflake Time Travel enables accessing historical data at any point within a defined period. This allows for restoring data that has been modified or deleted. \u003Ccode\u003EUNDROP\u003C/code\u003E is a feature of Time Travel that makes recovery from accidental drops trivial.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 9 - Verify Restoration and Clean Up\u003C/h4\u003E\n","\u003Cp\u003EVerify the table was successfully restored by selecting from it. Then, we can safely drop the actual development table, \u003Ccode\u003Etruck_dev\u003C/code\u003E.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- Verify the table was restored\nSELECT * from raw_pos.truck_details;\n\n-- Now drop the real truck_dev table\nDROP TABLE raw_pos.truck_dev;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EResource Monitors\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EMonitoring compute usage is critical. Snowflake provides Resource Monitors to track warehouse credit usage. You can define credit quotas and trigger actions (like notifications or suspension) when thresholds are reached.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Creating a Resource Monitor\u003C/h4\u003E\n","\u003Cp\u003ELet's create a resource monitor for \u003Ccode\u003Emy_wh\u003C/code\u003E. This monitor has a monthly quota of 100 credits and will send notifications at 75% and suspend the warehouse at 90% and 100% of the quota. First, ensure your role is \u003Ccode\u003Eaccountadmin\u003C/code\u003E.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE accountadmin;\n\nCREATE OR REPLACE RESOURCE MONITOR my_resource_monitor\n    WITH CREDIT_QUOTA = 100\n    FREQUENCY = MONTHLY\n    START_TIMESTAMP = IMMEDIATELY\n    TRIGGERS ON 75 PERCENT DO NOTIFY\n             ON 90 PERCENT DO SUSPEND\n             ON 100 PERCENT DO SUSPEND_IMMEDIATE;\n\u003C/code\u003E\u003C/pre\u003E\n&lt;!-- ![assets/create_rm.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/create_rm.png) --&gt;\n","\u003Ch4\u003EStep 2 - Applying the Resource Monitor\u003C/h4\u003E\n","\u003Cp\u003EWith the monitor created, apply it to \u003Ccode\u003Emy_wh\u003C/code\u003E.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER WAREHOUSE my_wh \n    SET RESOURCE_MONITOR = my_resource_monitor;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003EFor more information on what each configuration handles, please visit the documentation for \u003Ca href=\"https://docs.snowflake.com/en/user-guide/resource-monitors\"\u003EWorking with Resource Monitors\u003C/a\u003E.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003ECreate a Budget\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EWhile Resource Monitors track warehouse usage, Budgets provide a more flexible approach to managing all Snowflake costs. Budgets can track spend on any Snowflake object and notify users when a dollar amount threshold is reached.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Creating a Budget via SQL\u003C/h4\u003E\n","\u003Cp\u003ELet's first create the budget object in SQL.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE SNOWFLAKE.CORE.BUDGET my_budget()\n    COMMENT = 'My Tasty Bytes Budget';\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Budget Page in Snowsight\u003C/h4\u003E\n","\u003Cp\u003ELet's take a look at the Budget Page on Snowsight.\u003C/p\u003E\n","\u003Cp\u003ENavigate to \u003Cstrong\u003EAdmin\u003C/strong\u003E &raquo; \u003Cstrong\u003ECost Management\u003C/strong\u003E &raquo; \u003Cstrong\u003EBudgets\u003C/strong\u003E.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/budget_page.png\" alt=\"assets/vignette-1/budget_page.png\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey:\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EWarehouse Context\u003C/li\u003E\u003Cli\u003ECost Management Navigation\u003C/li\u003E\u003Cli\u003ETime Period Filter\u003C/li\u003E\u003Cli\u003EKey Metrics Summary\u003C/li\u003E\u003Cli\u003ESpend and Forecast Trend Chart\u003C/li\u003E\u003Cli\u003EBudget Details\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch4\u003EStep 3 - Configuring the Budget in Snowsight\u003C/h4\u003E\n","\u003Cp\u003EConfiguring a budget is done through the Snowsight UI.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EMake sure your account role is set to \u003Ccode\u003EACCOUNTADMIN\u003C/code\u003E. You can change this in the bottom left corner.\u003C/li\u003E\u003Cli\u003EClick on the \u003Cstrong\u003EMY_BUDGET\u003C/strong\u003E budget we created.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003EBudget Details\u003C/strong\u003E to open the Budget details panel, then click \u003Cstrong\u003EEdit\u003C/strong\u003E in the Budget Details panel on the right.\u003C/li\u003E\u003Cli\u003ESet the \u003Cstrong\u003ESpending Limit\u003C/strong\u003E to \u003Ccode\u003E100\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003EEnter a verified notification email address.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003E+ Tags &amp; Resources\u003C/strong\u003E and add the \u003Cstrong\u003ETB_101.ANALYTICS\u003C/strong\u003E schema and the \u003Cstrong\u003ETB_DE_WH\u003C/strong\u003E warehouse to be monitored.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ESave Changes\u003C/strong\u003E.\n\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/edit_budget.png\" alt=\"assets/vignette-1/edit_budget.png\"\u003E\u003C/li\u003E\u003C/ol\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003EFor a detailed guide on Budgets, please see the \u003Ca href=\"https://docs.snowflake.com/en/user-guide/budgets\"\u003ESnowflake Budgets Documentation\u003C/a\u003E.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003EUniversal Search\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EUniversal Search allows you to easily find any object in your account, plus explore data products in the Marketplace, relevant Snowflake Documentation, and Community Knowledge Base articles.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Searching for an Object\u003C/h4\u003E\n","\u003Cp\u003ELet's try it now.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EClick \u003Cstrong\u003ESearch\u003C/strong\u003E in the Navigation Menu on the left.\u003C/li\u003E\u003Cli\u003EEnter \u003Ccode\u003Etruck\u003C/code\u003E into the search bar.\u003C/li\u003E\u003Cli\u003EObserve the results. You will see categories of objects on your account, such as tables and views, as well as relevant documentation.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/universal_search_truck.png\" alt=\"assets/vignette-1/universal_search_truck.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EStep 2 - Using Natural Language Search\u003C/h4\u003E\n","\u003Cp\u003EYou can also use natural language. For example, search for: \u003Ccode\u003EWhich truck franchise has the most loyal customer base?\u003C/code\u003E\nUniversal search will return relevant tables and views, even highlighting columns that might help answer your question, providing an excellent starting point for analysis.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/universal_search_natural_language_query.png\" alt=\"assets/vignette-1/universal_search_natural_language_query.png\"\u003E\u003C/p\u003E\n","\u003Ch2\u003ESimple Data Pipeline\u003C/h2\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/data_pipeline_header.png\" alt=\"./assets/data_pipeline_header.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EOverview\u003C/h3\u003E\n","\u003Cp\u003EWithin this vignette, we will learn how to build a simple, automated data pipeline in Snowflake. We will start by ingesting raw, semi-structured data from an external stage, and then use the power of Snowflake's Dynamic Tables to transform and enrich that data, creating a pipeline that automatically stays up-to-date as new data arrives.\u003C/p\u003E\n","\u003Ch3\u003EWhat You Will Learn\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EHow to ingest data from an external S3 stage.\u003C/li\u003E\u003Cli\u003EHow to query and transform semi-structured VARIANT data.\u003C/li\u003E\u003Cli\u003EHow to use the FLATTEN function to parse arrays.\u003C/li\u003E\u003Cli\u003EHow to create and chain Dynamic Tables.\u003C/li\u003E\u003Cli\u003EHow an ELT pipeline automatically processes new data.\u003C/li\u003E\u003Cli\u003EHow to visualize a pipeline using the Directed Acyclic Graph (DAG).\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You Will Build\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EAn external Stage for data ingestion.\u003C/li\u003E\u003Cli\u003EA staging table for raw data.\u003C/li\u003E\u003Cli\u003EA multi-step data pipeline using three chained Dynamic Tables.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EGet the SQL and paste it into your SQL File.\u003C/h3\u003E\n","\u003Cp\u003E\u003Cstrong\u003ECopy and paste the SQL from this \u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-2.sql\"\u003Efile\u003C/a\u003E in a new SQL File to follow along in Snowflake. Note that once you've reached the end of the SQL File you can skip to Step 16 - Snowflake Cortex AI.\u003C/strong\u003E\u003C/p\u003E\n","\u003Ch3\u003EExternal Stage Ingestion\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EOur raw menu data currently sits in an Amazon S3 bucket as CSV files. To begin our pipeline, we first need to ingest this data into Snowflake. We will do this by creating a Stage to point to the S3 bucket and then using the \u003Ccode\u003ECOPY\u003C/code\u003E command to load the data into a staging table.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Set Context\u003C/h4\u003E\n","\u003Cp\u003EFirst, let's set our session context to use the correct database, role, and warehouse. Execute the first few queries in your SQL file.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER SESSION SET query_tag = '{&quot;origin&quot;:&quot;sf_sit-is&quot;,&quot;name&quot;:&quot;tb_zts&quot;,&quot;version&quot;:{&quot;major&quot;:1, &quot;minor&quot;:1},&quot;attributes&quot;:{&quot;is_quickstart&quot;:1, &quot;source&quot;:&quot;tastybytes&quot;, &quot;vignette&quot;: &quot;data_pipeline&quot;}}';\n\nUSE DATABASE tb_101;\nUSE ROLE tb_data_engineer;\nUSE WAREHOUSE tb_de_wh;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Create Stage and Staging Table\u003C/h4\u003E\n","\u003Cp\u003EA Stage is a Snowflake object that specifies an external location where data files are stored. We'll create a stage that points to our public S3 bucket. Then, we'll create the table that will hold this raw data.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- Create the menu stage\nCREATE OR REPLACE STAGE raw_pos.menu_stage\nCOMMENT = 'Stage for menu data'\nURL = 's3://sfquickstarts/frostbyte_tastybytes/raw_pos/menu/'\nFILE_FORMAT = public.csv_ff;\n\nCREATE OR REPLACE TABLE raw_pos.menu_staging\n(\n    menu_id NUMBER(19,0),\n    menu_type_id NUMBER(38,0),\n    menu_type VARCHAR(16777216),\n    truck_brand_name VARCHAR(16777216),\n    menu_item_id NUMBER(38,0),\n    menu_item_name VARCHAR(16777216),\n    item_category VARCHAR(16777216),\n    item_subcategory VARCHAR(16777216),\n    cost_of_goods_usd NUMBER(38,4),\n    sale_price_usd NUMBER(38,4),\n    menu_item_health_metrics_obj VARIANT\n);\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 3 - Copy Data into Staging Table\u003C/h4\u003E\n","\u003Cp\u003EWith the stage and table in place, let's load the data from the stage into our \u003Ccode\u003Emenu_staging\u003C/code\u003E table using the \u003Ccode\u003ECOPY INTO\u003C/code\u003E command.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECOPY INTO raw_pos.menu_staging\nFROM @raw_pos.menu_stage;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/sql-reference/sql/copy-into-table\"\u003ECOPY INTO TABLE\u003C/a\u003E\u003C/strong\u003E: This powerful command loads data from a staged file into a Snowflake table. It is the primary method for bulk data ingestion.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003ESemi-Structured Data\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003ESnowflake excels at handling semi-structured data like JSON using its native \u003Ccode\u003EVARIANT\u003C/code\u003E data type. One of the columns we ingested, \u003Ccode\u003Emenu_item_health_metrics_obj\u003C/code\u003E, contains JSON. Let's explore how to query it.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Querying VARIANT Data\u003C/h4\u003E\n","\u003Cp\u003ELet's look at the raw JSON. Notice it contains nested objects and arrays.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT menu_item_health_metrics_obj FROM raw_pos.menu_staging;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EWe can use special syntax to navigate the JSON structure. The colon (\u003Ccode\u003E:\u003C/code\u003E) accesses keys by name, and square brackets (\u003Ccode\u003E[]\u003C/code\u003E) access array elements by index. We can also cast results to explicit data types using the \u003Ccode\u003ECAST\u003C/code\u003E function or the double-colon shorthand (\u003Ccode\u003E::\u003C/code\u003E).\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT\n    menu_item_name,\n    CAST(menu_item_health_metrics_obj:menu_item_id AS INTEGER) AS menu_item_id, -- Casting using 'AS'\n    menu_item_health_metrics_obj:menu_item_health_metrics[0]:ingredients::ARRAY AS ingredients -- Casting using double colon (::) syntax\nFROM raw_pos.menu_staging;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Parsing Arrays with FLATTEN\u003C/h4\u003E\n","\u003Cp\u003EThe \u003Ccode\u003EFLATTEN\u003C/code\u003E function is a powerful tool for un-nesting arrays. It produces a new row for each element in an array. Let's use it to create a list of every ingredient for every menu item.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT\n    i.value::STRING AS ingredient_name,\n    m.menu_item_health_metrics_obj:menu_item_id::INTEGER AS menu_item_id\nFROM\n    raw_pos.menu_staging m,\n    LATERAL FLATTEN(INPUT =&gt; m.menu_item_health_metrics_obj:menu_item_health_metrics[0]:ingredients::ARRAY) i;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/sql-reference/data-types-semistructured\"\u003ESemi-Structured Data Types\u003C/a\u003E\u003C/strong\u003E: Snowflake's VARIANT, OBJECT, and ARRAY types allow you to store and query semi-structured data directly, without needing to define a rigid schema upfront.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003EDynamic Tables\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EOur franchises are constantly adding new menu items. We need a way to process this new data automatically. For this, we can use Dynamic Tables, a powerful tool designed to simplify data transformation pipelines by declaratively defining the result of a query and letting Snowflake handle the refreshes.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Creating the First Dynamic Table\u003C/h4\u003E\n","\u003Cp\u003EWe'll start by creating a dynamic table that extracts all unique ingredients from our staging table. We set a \u003Ccode\u003ELAG\u003C/code\u003E of '1 minute', which tells Snowflake the maximum amount of time this table's data can be behind the source data.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE DYNAMIC TABLE harmonized.ingredient\n    LAG = '1 minute'\n    WAREHOUSE = 'TB_DE_WH'\nAS\n    SELECT\n    ingredient_name,\n    menu_ids\nFROM (\n    SELECT DISTINCT\n        i.value::STRING AS ingredient_name, \n        ARRAY_AGG(m.menu_item_id) AS menu_ids\n    FROM\n        raw_pos.menu_staging m,\n        LATERAL FLATTEN(INPUT =&gt; menu_item_health_metrics_obj:menu_item_health_metrics[0]:ingredients::ARRAY) i\n    GROUP BY i.value::STRING\n);\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/dynamic-tables-about\"\u003EDynamic Tables\u003C/a\u003E\u003C/strong\u003E: Dynamic Tables automatically refresh as their underlying source data changes, simplifying ELT pipelines and ensuring data freshness without manual intervention or complex scheduling.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 2 - Testing the Automatic Refresh\u003C/h4\u003E\n","\u003Cp\u003ELet's see the automation in action. One of our trucks has added a Banh Mi sandwich, which contains new ingredients for French Baguette and Pickled Daikon. Let's insert this new menu item into our staging table.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EINSERT INTO raw_pos.menu_staging \nSELECT \n    10101, 15, 'Sandwiches', 'Better Off Bread', 157, 'Banh Mi', 'Main', 'Cold Option', 9.0, 12.0,\n    PARSE_JSON('{&quot;menu_item_health_metrics&quot;: [{&quot;ingredients&quot;: [&quot;French Baguette&quot;,&quot;Mayonnaise&quot;,&quot;Pickled Daikon&quot;,&quot;Cucumber&quot;,&quot;Pork Belly&quot;],&quot;is_dairy_free_flag&quot;: &quot;N&quot;,&quot;is_gluten_free_flag&quot;: &quot;N&quot;,&quot;is_healthy_flag&quot;: &quot;Y&quot;,&quot;is_nut_free_flag&quot;: &quot;Y&quot;}],&quot;menu_item_id&quot;: 157}');\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ENow, query the \u003Ccode\u003Eharmonized.ingredient\u003C/code\u003E table. Within a minute, you should see the new ingredients appear automatically.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- You may need to wait up to 1 minute and re-run this query\nSELECT * FROM harmonized.ingredient \nWHERE ingredient_name IN ('French Baguette', 'Pickled Daikon');\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EBuild Out the Pipeline\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003ENow we can build a multi-step pipeline by creating more dynamic tables that read from other dynamic tables. This creates a chain, or a Directed Acyclic Graph (DAG), where updates automatically flow from the source to the final output.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Creating a Lookup Table\u003C/h4\u003E\n","\u003Cp\u003ELet's create a lookup table that maps ingredients to the menu items they are used in. This dynamic table reads from our \u003Ccode\u003Eharmonized.ingredient\u003C/code\u003E dynamic table.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE DYNAMIC TABLE harmonized.ingredient_to_menu_lookup\n    LAG = '1 minute'\n    WAREHOUSE = 'TB_DE_WH'   \nAS\nSELECT\n    i.ingredient_name,\n    m.menu_item_health_metrics_obj:menu_item_id::INTEGER AS menu_item_id\nFROM\n    raw_pos.menu_staging m,\n    LATERAL FLATTEN(INPUT =&gt; m.menu_item_health_metrics_obj:menu_item_health_metrics[0]:ingredients) f\nJOIN harmonized.ingredient i ON f.value::STRING = i.ingredient_name;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Adding Transactional Data\u003C/h4\u003E\n","\u003Cp\u003ELet's simulate an order of two Banh Mi sandwiches by inserting records into our order tables.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EINSERT INTO raw_pos.order_header\nSELECT \n    459520441, 15, 1030, 101565, null, 200322900,\n    TO_TIMESTAMP_NTZ('08:00:00', 'hh:mi:ss'),\n    TO_TIMESTAMP_NTZ('14:00:00', 'hh:mi:ss'),\n    null, TO_TIMESTAMP_NTZ('2022-01-27 08:21:08.000'),\n    null, 'USD', 14.00, null, null, 14.00;\n    \nINSERT INTO raw_pos.order_detail\nSELECT\n    904745311, 459520441, 157, null, 0, 2, 14.00, 28.00, null;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 3 - Creating the Final Pipeline Table\u003C/h4\u003E\n","\u003Cp\u003EFinally, let's create our final dynamic table. This one joins our order data with our ingredient lookup tables to create a summary of monthly ingredient usage per truck. This table depends on the other dynamic tables, completing our pipeline.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE DYNAMIC TABLE harmonized.ingredient_usage_by_truck \n    LAG = '2 minute'\n    WAREHOUSE = 'TB_DE_WH'  \n    AS \n    SELECT\n        oh.truck_id,\n        EXTRACT(YEAR FROM oh.order_ts) AS order_year,\n        MONTH(oh.order_ts) AS order_month,\n        i.ingredient_name,\n        SUM(od.quantity) AS total_ingredients_used\n    FROM\n        raw_pos.order_detail od\n        JOIN raw_pos.order_header oh ON od.order_id = oh.order_id\n        JOIN harmonized.ingredient_to_menu_lookup iml ON od.menu_item_id = iml.menu_item_id\n        JOIN harmonized.ingredient i ON iml.ingredient_name = i.ingredient_name\n        JOIN raw_pos.location l ON l.location_id = oh.location_id\n    WHERE l.country = 'United States'\n    GROUP BY\n        oh.truck_id,\n        order_year,\n        order_month,\n        i.ingredient_name\n    ORDER BY\n        oh.truck_id,\n        total_ingredients_used DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 4 - Querying the Final Output\u003C/h4\u003E\n","\u003Cp\u003ENow, let's query the final table in our pipeline. After a few minutes for the refreshes to complete, you will see the ingredient usage for two Banh Mis from the order we inserted in a previous step. The entire pipeline updated automatically.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- You may need to wait up to 2 minutes and re-run this query\nSELECT\n    truck_id,\n    ingredient_name,\n    SUM(total_ingredients_used) AS total_ingredients_used\nFROM\n    harmonized.ingredient_usage_by_truck\nWHERE\n    order_month = 1\n    AND truck_id = 15\nGROUP BY truck_id, ingredient_name\nORDER BY total_ingredients_used DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EVisualize the Pipeline\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EFinally, let's visualize our pipeline's Directed Acyclic Graph, or DAG. The DAG shows how our data flows through the tables, and it can be used to monitor the health and lag of our pipeline.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Accessing the Graph View\u003C/h4\u003E\n","\u003Cp\u003ETo access the DAG in Snowsight:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003ENavigate to \u003Cstrong\u003EData\u003C/strong\u003E &raquo; \u003Cstrong\u003EDatabase\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EIn the database object explorer, expand your database \u003Cstrong\u003ETB_101\u003C/strong\u003E and the schema \u003Cstrong\u003EHARMONIZED\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EClick on \u003Cstrong\u003EDynamic Tables\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003ESelect any of the dynamic tables you created (e.g., \u003Ccode\u003EINGREDIENT_USAGE_BY_TRUCK\u003C/code\u003E).\u003C/li\u003E\u003Cli\u003EClick on the \u003Cstrong\u003EGraph\u003C/strong\u003E tab in the main window.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003EYou will now see a visualization of your pipeline, showing how the base tables flow into your dynamic tables.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-2/dag.png\" alt=\"assets/vignette-2/dag.png\"\u003E\u003C/p\u003E\n","\u003Ch2\u003ESnowflake Cortex AI\u003C/h2\u003E\n","\u003Ch3\u003EOverview\u003C/h3\u003E\n","\u003Cp\u003EWelcome to the Zero to Snowflake guide focused on Snowflake Cortex AI!\u003C/p\u003E\n","\u003Cp\u003EWithin this guide, we will explore Snowflake's complete AI platform through a progressive journey from experimentation into unified business intelligence. We'll learn AI capabilities by building a comprehensive customer intelligence system using Cortex Playground for AI experimentation, Cortex AI Functions for production-scale analysis, &lt;!-- Snowflake Copilot for AI-assisted SQL development, --&gt; Cortex Search for semantic text searching, and Cortex Analyst for natural language analytics.\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EFor more detail on Snowflake Cortex AI, please visit the \u003Ca href=\"https://docs.snowflake.com/en/guides-overview-ai-features\"\u003ESnowflake AI and ML Overview documentation\u003C/a\u003E.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You Will Learn\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EHow to Experiment with AI Using AI Cortex Playground for model testing and prompt optimization.\u003C/li\u003E\u003Cli\u003EHow to Scale AI Analysis with Cortex AI Functions for production-scale customer review processing.\u003C/li\u003E\u003C/ul\u003E\n&lt;!-- * How to optimize development with Snowflake&rsquo;s Copilot for AI-assisted SQL query generation. --&gt;\n\u003Cul\u003E\u003Cli\u003EHow to enable semantic discovery with Cortex Search for intelligent text and review finding.\u003C/li\u003E\u003Cli\u003EHow to create conversational analytics with Cortex Analyst for natural language business intelligence.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You Will Build\u003C/h3\u003E\n","\u003Cp\u003EThrough this journey, you&rsquo;ll construct a complete intelligence customer analytics platform:\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EPhase 1: AI Foundation\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EAI Experimentation Environment using Cortex Playground for model testing and optimization.\u003C/li\u003E\u003Cli\u003EProduction-scale Review Analysis pipeline using Cortex AI Functions for systematic customer feedback processing.\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cstrong\u003EPhase 2: Intelligent Development &amp; Discovery\u003C/strong\u003E\u003C/p\u003E\n&lt;!-- * AI-Assisted SQL Development Workflow using Copilot for complex query generation. --&gt;\n\u003Cul\u003E\u003Cli\u003ESemantic Search Engine using Cortex Search for instant customer feedback discovery and operational intelligence.\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cstrong\u003EPhase 3: Conversational Intelligence\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003ENatural Language Business Analytics Interface using Cortex Analyst for conversational data exploration.\u003C/li\u003E\u003Cli\u003EUnified AI Business Intelligence Platform using Snowflake CoWork that connects customer voice with business performance\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003ECortex Playground\u003C/h3\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/cortex_playground_header.png\" alt=\"./assets/cortex_playground_header.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EAs a data analyst at Tasty Bytes, you need to rapidly explore customer feedback using AI models to identify service improvement opportunities. Traditionally, AI experimentation is complex and time-consuming. \u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-playground\"\u003ESnowflake Cortex Playground\u003C/a\u003E\u003C/strong\u003E solves this by offering a quick, secure environment directly within Snowflake's UI to experiment with diverse AI models, compare their performance on real business data, and export successful approaches as production-ready SQL. This module guides you through using Cortex Playground for rapid prototyping and seamless integration of AI into your data workflows.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Connect Data &amp; Filter\u003C/h4\u003E\n","\u003Cp\u003ELet's begin by connecting directly to customer review data within Cortex Playground. This keeps your data secure within Snowflake while allowing you to analyze feedback using AI models.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENavigation steps:\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003ENavigate to \u003Cstrong\u003EAI &amp; ML &rarr; Studio &rarr; Cortex Playground\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003ESelect \u003Cstrong\u003ERole: TB_DEV\u003C/strong\u003E and \u003Cstrong\u003EWarehouse: TB_DEV_WH\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EClick &quot;\u003Cstrong\u003E+Connect your data\u003C/strong\u003E&quot; in the prompt box.\u003C/li\u003E\u003Cli\u003ESelect data source:\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EDatabase: TB_101\u003C/strong\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ESchema: HARMONIZED\u003C/strong\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ETable: TRUCK_REVIEWS_V\u003C/strong\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ELet's go\u003C/strong\u003E\u003C/li\u003E\u003Cli\u003ESelect text column: \u003Cstrong\u003EREVIEW\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003ESelect filter column: \u003Cstrong\u003ETRUCK_BRAND_NAME\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003EDone\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EIn the system prompt box, apply a filter using the \u003Cstrong\u003ETRUCK_BRAND_NAME\u003C/strong\u003E dropdown. There are multiple reviews available for each truck brand. For instance, you can select &quot;\u003Cstrong\u003EBetter Of Bread\u003C/strong\u003E&quot; to narrow down the reviews. If &quot;\u003Cstrong\u003EBetter Of Bread\u003C/strong\u003E&quot; isn't available, please choose any other truck brand from the dropdown and proceed with one of its reviews.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-connect.gif\" alt=\"assets/vignette-3/cortex-playground-connect.gif\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EWhat you've accomplished:\u003C/strong\u003E You now have direct access to customer review data within the AI interface. The filter allows you to focus your analysis on specific truck brands, making your experiment more targeted and relevant.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 2 - Compare AI Models for Insights\u003C/h4\u003E\n","\u003Cp\u003ENow, let's analyze customer reviews to extract specific operational insights and compare how different AI models perform on this business task.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESetup Model Comparison:\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EClick &quot;\u003Cstrong\u003ECompare\u003C/strong\u003E&quot; to enable side-by-side model comparison.\u003C/li\u003E\u003Cli\u003ESet the left panel to &quot;\u003Cstrong\u003Eclaude-3-5-sonnet\u003C/strong\u003E&quot; and the right panel to &quot;\u003Cstrong\u003Esnowflake-llama-3.3-70b\u003C/strong\u003E&quot;.\u003C/li\u003E\u003C/ol\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote:\u003C/strong\u003E Snowflake Cortex provides access to leading AI models from multiple providers, including Anthropic, OpenAI, Meta, and others, giving you choice and flexibility without vendor lock-in.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EEnter this strategic prompt:\u003C/strong\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Ccode\u003EAnalyze this customer review across multiple dimensions: sentiment score with confidence level, key theme extraction, competitive positioning insights, operational impact assessment, and priority ranking for management action\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-compare-two-model.png\" alt=\"assets/vignette-3/cortex-playground-compare-two-model.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey Insight:\u003C/strong\u003E Notice the distinct strengths: Claude provides structured, executive-ready analysis with clear confidence. In contrast, Snowflake&rsquo;s Llama model, optimized specifically for robust business intelligence, delivers comprehensive operational intelligence enriched with strategic context and detailed competitive analysis. This highlights the power of leveraging multiple AI providers, empowering you to choose the ideal approach for your specific business needs.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003EWith our optimal model identified, we now need to fine-tune its behavior for different business scenarios. The same model can produce vastly different results depending on its settings&mdash;let&rsquo;s optimize this for our specific analytical requirements.\u003C/p\u003E\n","\u003Ch4\u003EStep 3 - Fine-Tune Model Behavior\u003C/h4\u003E\n","\u003Cp\u003EWe want to observe how adjusting parameters, especially &quot;\u003Cstrong\u003Etemperature\u003C/strong\u003E,&quot; affects the AI model's responses. Does it lead to more consistent or more creative answers?\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EHow to Set Up This Temperature Test:\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EFirst, make sure both panels are set to &quot;\u003Cstrong\u003Eclaude-3-5-sonnet\u003C/strong\u003E.&quot; We're comparing the same model, just with different settings.\u003C/li\u003E\u003Cli\u003ENext, click &quot;\u003Cstrong\u003EChange Settings\u003C/strong\u003E&quot; right next to where it says &quot;\u003Cstrong\u003ECompare\u003C/strong\u003E.&quot;\u003C/li\u003E\u003Cli\u003ENow, let's adjust those parameters for each side:\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ELeft Panel:\u003C/strong\u003E\n\u003Cul\u003E\u003Cli\u003ESet \u003Cstrong\u003ETemperature\u003C/strong\u003E to \u003Cstrong\u003E0.1\u003C/strong\u003E. This will generally make the model give you really consistent, predictable answers.\u003C/li\u003E\u003Cli\u003ESet \u003Cstrong\u003EMax-tokens\u003C/strong\u003E to \u003Cstrong\u003E200\u003C/strong\u003E. This just keeps the responses from getting too long.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ERight Panel:\u003C/strong\u003E\n\u003Cul\u003E\u003Cli\u003ESet \u003Cstrong\u003ETemperature\u003C/strong\u003E to \u003Cstrong\u003E0.8\u003C/strong\u003E. This should make the model's answers a bit more creative and varied.\u003C/li\u003E\u003Cli\u003ESet \u003Cstrong\u003Etop_p\u003C/strong\u003E to \u003Cstrong\u003E0.8\u003C/strong\u003E. This is another setting that helps encourage a wider range of words in the response.\u003C/li\u003E\u003Cli\u003ESet \u003Cstrong\u003EMax-tokens\u003C/strong\u003E to \u003Cstrong\u003E200\u003C/strong\u003E. Again, keeping the length in check.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EFinally, use the exact same strategic prompt you used in Step 2.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003EGive that a try and see how the responses differ! It's pretty cool to see how these small tweaks can change the AI's &quot;personality.&quot;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-model-setting.gif\" alt=\"assets/vignette-3/cortex-playground-model-setting.gif\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-same-model.png\" alt=\"assets/vignette-3/cortex-playground-same-model.png\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EObserve the Impact:\u003C/strong\u003E\u003C/p\u003E\n","\u003Cp\u003ENotice how adjusting the temperature parameter fundamentally changes the analytical output, even with the same AI model and data.\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ETemperature 0.1:\u003C/strong\u003E Produces deterministic, focused output. Ideal for structured, consistent analysis and standardized reporting.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ETemperature 0.8:\u003C/strong\u003E Results in diverse, varied output. Perfect for generating explanatory insights or exploring less obvious connections.\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003EWhile temperature influences token choice, \u003Cstrong\u003Etop_p\u003C/strong\u003E (set to 0.8 on the right) restricts possible tokens. \u003Cstrong\u003Emax_tokens\u003C/strong\u003E simply sets the maximum response length; be mindful small values can truncate results. This gives you precise control over AI creativity versus consistency, letting you match the AI&rsquo;s behavior to your analytical objectives.\u003C/p\u003E\n","\u003Cp\u003ENow that we&rsquo;ve mastered model selection and parameter optimization, let's examine the technology foundation that makes this experimentation possible. Understanding this will help us transition from playground testing to production deployment.\u003C/p\u003E\n","\u003Ch4\u003EStep 4 - Understanding the Underlying Technology\u003C/h4\u003E\n","\u003Cp\u003EIn this section, let's explore the core technology that takes your AI insights from the playground to production.\u003C/p\u003E\n","\u003Ch4\u003EThe Foundation: SQL at Its Core\u003C/h4\u003E\n","\u003Cp\u003EEvery AI insight you generate in Cortex Playground isn't just magic; it's backed by SQL. Click &quot;\u003Cstrong\u003EView Code\u003C/strong\u003E&quot; after any model response, and you'll see the exact SQL query, complete with your specified settings like temperature. This isn't just for show&mdash;this code is ready for action! You can run it directly in a Workspace SQL file, automate it with streams and tasks, or integrate it with a dynamic table for live data processing. It's also worth noting that the functionalities of this Cortex Complete can be accessed programmatically via Python or a REST API, offering flexible integration options.\u003C/p\u003E\n","\u003Ch4\u003EThe AI_COMPLETE Function\u003C/h4\u003E\n","\u003Cp\u003EBehind every prompt you've run, the \u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/sql-reference/functions/ai_complete\"\u003EAI_COMPLETE\u003C/a\u003E\u003C/strong\u003E function is hard at work. This is Snowflake Cortex AI's powerful function providing direct access to industry-leading large language models for text completion. The Cortex Playground simply offers an intuitive interface to test and compare these models before you embed them directly into your SQL. (Heads up: AI_COMPLETE is the updated version of SNOWFLAKE.CORTEX.COMPLETE)\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-view-code.png\" alt=\"assets/vignette-3/cortex-playground-view-code.png\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThis seamless integration means your AI experimentation directly translates into production-ready workflows within Snowflake.\u003C/p\u003E\n","\u003Ch4\u003EConclusion\u003C/h4\u003E\n","\u003Cp\u003EThe Cortex Playground is an invaluable tool for experimenting with individual reviews, but true large-scale customer feedback analysis demands specialized AI functions. The prompt patterns and model selections you've refined here lay the groundwork for building scalable solutions. Our next step involves processing thousands of reviews using purpose-built AI Functions like \u003Cstrong\u003ESENTIMENT()\u003C/strong\u003E, \u003Cstrong\u003ECLASSIFY()\u003C/strong\u003E, \u003Cstrong\u003EEXTRACT_ANSWER()\u003C/strong\u003E, and \u003Cstrong\u003EAI_SUMMARIZE_AGG()\u003C/strong\u003E. This systematic approach ensures that AI-driven insights seamlessly become a core part of our operational strategy.\u003C/p\u003E\n","\u003Ch3\u003EAI Functions\u003C/h3\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/ai_functions_header.png\" alt=\"./assets/ai_functions_header.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EYou've successfully experimented with AI models in Cortex Playground to analyze individual customer reviews. Now, it's time to scale! This guide shows you how to use \u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/aisql\"\u003EAI Functions\u003C/a\u003E\u003C/strong\u003E to process thousands of reviews, turning experimental insights into production-ready intelligence. You'll learn to:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\u003Cstrong\u003EUSE SENTIMENT()\u003C/strong\u003E to score and label truck customer reviews.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EUse AI_CLASSIFY()\u003C/strong\u003E to categorize reviews by themes.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EUse EXTRACT_ANSWER()\u003C/strong\u003E to pull specific complaints or praise.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EUse AI_SUMMARIZE_AGG()\u003C/strong\u003E to generate quick summaries per truck brand.\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch3\u003EGet the SQL code and paste it into your SQL File.\u003C/h3\u003E\n","\u003Cp\u003ECopy and paste the SQL from this \u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-3-aisql.sql\"\u003Efile\u003C/a\u003E in a new SQL File to follow along in Snowflake.\u003C/p\u003E\n&lt;!-- Uncomment when Copilot is added back --&gt;\n&lt;!-- **Note that once you've reached the end of the SQL File you can skip to [Step 19 - Snowflake Copilot](/en/developers/guides/zero-to-snowflake/).** --&gt;\n&lt;!-- Remove when Copilot is added back --&gt;\n&lt;!-- End remove --&gt;\n","\u003Ch3\u003EStep 1 - Setting Context\u003C/h3\u003E\n","\u003Cp\u003EFirst, let's set our session context. We will assume the role of a TastyBytes data analyst with the intention of leveraging AISQL functions to gain insights from customer reviews.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER SESSION SET query_tag = '{&quot;origin&quot;:&quot;sf_sit-is&quot;,&quot;name&quot;:&quot;tb_zts&quot;,&quot;version&quot;:{&quot;major&quot;:1, &quot;minor&quot;:1},&quot;attributes&quot;:{&quot;is_quickstart&quot;:1, &quot;source&quot;:&quot;tastybytes&quot;, &quot;vignette&quot;: &quot;aisql_functions&quot;}}';\n\nUSE ROLE tb_analyst;\nUSE DATABASE tb_101;\nUSE WAREHOUSE tb_de_wh;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Sentiment Analysis at Scale\u003C/h4\u003E\n","\u003Cp\u003EAnalyze customer sentiment across all food truck brands to identify which trucks are performing best and create fleet-wide customer satisfaction metrics. In Cortex Playground, we analyzed individual reviews manually. Now we&rsquo;ll use the \u003Ccode\u003ESENTIMENT()\u003C/code\u003E function to automatically score customer reviews from -1 (negative) to +1 (positive), following Snowflake's official sentiment ranges.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EBusiness Question:\u003C/strong\u003E &ldquo;How do customers feel about each of our truck brands overall?&rdquo;\u003C/p\u003E\n","\u003Cp\u003EPlease execute this query to analyze customer sentiment across our food truck network and categorize feedback.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT\n    truck_brand_name,\n    COUNT(*) AS total_reviews,\n    AVG(CASE WHEN sentiment &gt;= 0.5 THEN sentiment END) AS avg_positive_score,\n    AVG(CASE WHEN sentiment BETWEEN -0.5 AND 0.5 THEN sentiment END) AS avg_neutral_score,\n    AVG(CASE WHEN sentiment &lt;= -0.5 THEN sentiment END) AS avg_negative_score\nFROM (\n    SELECT\n        truck_brand_name,\n        SNOWFLAKE.CORTEX.SENTIMENT (review) AS sentiment\n    FROM harmonized.truck_reviews_v\n    WHERE\n        language ILIKE '%en%'\n        AND review IS NOT NULL\n    LIMIT 10000\n)\nGROUP BY\n    truck_brand_name\nORDER BY total_reviews DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/sentiment.png\" alt=\"assets/vignette-3/sentiment.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey Insight\u003C/strong\u003E: Notice how we transitioned from analyzing reviews one at a time in Cortex Playground to systematically processing thousands. The \u003Ccode\u003ESENTIMENT()\u003C/code\u003E function automatically scored every review and categorized them into Positive, Negative, and Neutral - giving us instant fleet-wide customer satisfaction metrics.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESentiment Score Ranges\u003C/strong\u003E:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EPositive: 0.5 to 1\u003C/li\u003E\u003Cli\u003ENeutral: -0.5 to 0.5\u003C/li\u003E\u003Cli\u003ENegative: -0.5 to -1\u003C/li\u003E\u003C/ul\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 3 - Categorize Customer Feedback\u003C/h4\u003E\n","\u003Cp\u003ENow, let's categorize all reviews to understand what aspects of our service customers are talking about most. We'll use the \u003Ccode\u003EAI_CLASSIFY()\u003C/code\u003E function, which automatically categorizes reviews into user-defined categories based on AI understanding, rather than simple keyword matching. In this step, we will categorize customer feedback into business-relevant operational areas and analyze their distribution patterns.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EBusiness Question:\u003C/strong\u003E &ldquo;What are customers primarily commenting on - food quality, service, or delivery experience?&quot;\u003C/p\u003E\n","\u003Cp\u003EExecute the Classification Query:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EWITH classified_reviews AS (\n  SELECT\n    truck_brand_name,\n    AI_CLASSIFY(\n      review,\n      ['Food Quality', 'Pricing', 'Service Experience', 'Staff Behavior']\n    ):labels[0] AS feedback_category\n  FROM\n    harmonized.truck_reviews_v\n  WHERE\n    language ILIKE '%en%'\n    AND review IS NOT NULL\n    AND LENGTH(review) &gt; 30\n  LIMIT\n    10000\n)\nSELECT\n  truck_brand_name,\n  feedback_category,\n  COUNT(*) AS number_of_reviews\nFROM\n  classified_reviews\nGROUP BY\n  truck_brand_name,\n  feedback_category\nORDER BY\n  truck_brand_name,\n  number_of_reviews DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/classify.png\" alt=\"assets/vignette-3/classify.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey Insight\u003C/strong\u003E: Observe how \u003Ccode\u003EAI_CLASSIFY()\u003C/code\u003E automatically categorized thousands of reviews into business-relevant themes such as Food Quality, Service Experience, and more. We can instantly see that Food Quality is the most discussed topic across our truck brands, providing the operations team with clear, actionable insight into customer priorities.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 4 - Extract Specific Insights\u003C/h4\u003E\n","\u003Cp\u003ENext, to gain precise answers from unstructured text, we'll utilize the \u003Ccode\u003EEXTRACT_ANSWER()\u003C/code\u003E function. This powerful function enables us to ask specific business questions about customer feedback and receive direct answers. In this step, our goal is to identify precise operational issues mentioned in customer reviews, highlighting specific problems that require immediate attention.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EBusiness question:\u003C/strong\u003E &ldquo;What specific improvement or complaint is mentioned in this review?&quot;\u003C/p\u003E\n","\u003Cp\u003ELet's execute the next query:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E  SELECT\n    truck_brand_name,\n    primary_city,\n    LEFT(review, 100) || '...' AS review_preview,\n    SNOWFLAKE.CORTEX.EXTRACT_ANSWER(\n        review,\n        'What specific improvement or complaint is mentioned in this review?'\n    ) AS specific_feedback\nFROM\n    harmonized.truck_reviews_v\nWHERE\n    language = 'en'\n    AND review IS NOT NULL\n    AND LENGTH(review) &gt; 50\nORDER BY truck_brand_name, primary_city ASC\nLIMIT 10000;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/extract.png\" alt=\"assets/vignette-3/extract.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey Insight\u003C/strong\u003E: Notice how \u003Ccode\u003EEXTRACT_ANSWER()\u003C/code\u003E distills specific, actionable insights from long customer reviews. Rather than manual review, this function automatically identifies concrete feedback like &quot;friendly staff was saving grace&quot; and &quot;hot dogs are cooked to perfection.&quot; The result is a transformation of dense text into specific, quotable feedback that the operations team can leverage instantly.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 5 - Generate Executive Summaries\u003C/h4\u003E\n","\u003Cp\u003EFinally, to create concise summaries of customer feedback, we'll use the \u003Ccode\u003EAI_SUMMARIZE_AGG()\u003C/code\u003E function. This powerful function generates short, coherent summaries from lengthy unstructured text. In this step, our goal is to distill the essence of customer reviews for each truck brand into digestible summaries, providing quick overviews of overall sentiment and key points.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EBusiness Question:\u003C/strong\u003E &ldquo;What are the key themes and overall sentiment for each truck brand?&rdquo;\u003C/p\u003E\n","\u003Cp\u003EExecute the Summarization Query:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT\n  truck_brand_name,\n  AI_SUMMARIZE_AGG (review) AS review_summary\nFROM\n  (\n    SELECT\n      truck_brand_name,\n      review\n    FROM\n      harmonized.truck_reviews_v\n    LIMIT\n      100\n  )\nGROUP BY\n  truck_brand_name;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/summarize.png\" alt=\"assets/vignette-3/summarize.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey Insight\u003C/strong\u003E: The \u003Ccode\u003EAI_SUMMARIZE_AGG()\u003C/code\u003E function condenses lengthy reviews into clear, brand-level summaries. These summaries highlight recurring themes and sentiment trends, providing decision-makers with quick overviews of each food truck's performance and enabling faster understanding of customer perception without reading individual reviews.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EConclusion\u003C/h4\u003E\n","\u003Cp\u003EWe've successfully demonstrated the transformative power of AI Functions, shifting customer feedback analysis from individual review processing to systemic, production-scale intelligence. Our journey through these four core functions clearly illustrates how each serves a distinct analytical purpose, transforming raw customer voices into comprehensive business intelligence&mdash;systematic, scalable, and immediately actionable. What once required individual review analysis now processes thousands of reviews in seconds, providing both the emotional context and specific details crucial for data-driven operational improvements.\u003C/p\u003E\n&lt;!-- Uncomment when Copilot is added back --&gt;\n&lt;!-- As our analysis grows in sophistication, combining multiple AI functions in complex queries can become challenging. This is precisely where Snowflake Copilot offers powerful assistance. Let's explore how Copilot can help us create complex queries using natural language and significantly accelerate our work, empowering us to build even more intricate analytical workflows with ease. --&gt;\n&lt;!-- Uncomment when Copilot is added back --&gt;\n&lt;!-- ## Snowflake Copilot --&gt;\n&lt;!-- ![./assets/snowflake_copilot_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/snowflake_copilot_header.png)\n\n### Overview\n\nYou've successfully built powerful AI SQL queries to analyze customer reviews. Now, the challenge is to connect these insights to real business impact: Do negative reviews affect loyalty? Do positive reviews boost orders? This requires **complex queries** joining multiple data sources and correlating AI results.\n\nThis lab introduces **Snowflake Copilot**, an LLM-powered assistant designed to simplify this challenge. Running securely within Snowflake Cortex, Copilot helps you construct sophisticated analytical workflows, translating complex business questions into powerful SQL.\n\n### Get the SQL and paste it into your SQL File\n\n**Copy and paste the SQL from this [file](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-3-copilot.sql) into a new SQL File in Snowflake to follow along.**\n\n**Snowflake Copilot is designed to be used directly within the SQL File environment.** Please ensure you are executing the SQL in a SQL File.\n\n**Note: Once you've reached the end of the SQL File, you can skip to Step 20 - Cortex Search.**\n\n### Step 1 - Setting Context\n\nFirst, let's set our session context. We will assume the role of a TastyBytes data analyst with the intention of leveraging Snowflake Copilot to build sophisticated queries and gain deeper business insights.\n\n```sql\nALTER SESSION SET query_tag = '{&quot;origin&quot;:&quot;sf_sit-is&quot;,&quot;name&quot;:&quot;tb_zts&quot;,&quot;version&quot;:{&quot;major&quot;:1, &quot;minor&quot;:1},&quot;attributes&quot;:{&quot;is_quickstart&quot;:1, &quot;source&quot;:&quot;tastybytes&quot;, &quot;vignette&quot;: &quot;snowflake_copilot&quot;}}';\n\nUSE ROLE tb_analyst;\nUSE WAREHOUSE tb_de_wh;\nUSE DATABASE tb_101;\nUSE SCHEMA harmonized;\n```\n\n![assets/vignette-3/copilot.gif](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/copilot.gif)\n\n### Step 2 - Translate Requirements with Copilot\n\nTo begin, let&rsquo;s explore what types of analysis questions we can ask about our Tasty Bytes dataset using Copilot&rsquo;s natural language understanding capabilities.\n\nType the following question in the Copilot message box and click RUN to see the result of the query:\n\n**Prompt 1:** `How do I structure a query that correlates customer review sentiment with customer loyalty metrics and order behavior? I have a review sentiment data and customer loyalty metrics tables with order information. I need to understand the relationship between what customers say and their actual purchasing pattern.`\n\n![assets/vignette-3/copilot-prompt1.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/copilot-prompt1.png)\n\n&gt; **Key Insight**: Copilot provides schema-aware business intelligence, directly analyzing your specific Tasty Bytes tables and suggesting strategic analysis using your actual column names. This isn't generic AI; it's purpose-built intelligence that profoundly understands your data structure.\n\n### Step 3 - Build Complex Queries \n\nNow let&rsquo;s use Copilot to generate complex SQL with multiple table joins from a simple business question.\n\nIn the same Copilot panel, paste the following business question and click RUN to see the result:\n\n**Prompt 2:** `Show me high-value customers who have been leaving negative reviews. I want to understand which customers spend a lot of money with us but seem unhappy based on their feedback`\n\n![assets/vignette-3/copilot-prompt2.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/copilot-prompt2.png)\n\n&gt; **Key Insight**: Notice how Copilot transforms a simple business question into production-ready customer intelligence with complex analytical logic and actionable results&mdash;all without requiring SQL expertise. This showcases Copilot's core value: you can ask strategic questions in plain English and instantly receive the enterprise-grade analytics that typically demand data engineering skills.\n\n### Conclusion\n\nSnowflake Copilot profoundly transforms business intelligence by enabling users to effortlessly translate complex business questions into sophisticated SQL queries. As demonstrated with Tasty Bytes, it empowers both technical and non-technical users to derive actionable insights from their data without deep SQL expertise. This LLM-powered assistant delivers schema-aware, purpose-built intelligence, ensuring robust data governance and keeping all enterprise data securely within Snowflake. Copilot isn't just generic AI; it's a strategic tool that bridges operational insights with business intelligence. --&gt;\n","\u003Ch3\u003EOptional: Cortex Search\u003C/h3\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/cortex_search_header.png\" alt=\"./assets/cortex_search_header.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n&lt;!-- Uncomment when Copilot is added back --&gt;\n&lt;!-- While Copilot excels at generating complex analytical queries, a common daily challenge for customer service teams is quickly finding specific customer reviews for complaints or compliments. Traditional keyword search often falls short, missing the nuances of natural language. --&gt;\n&lt;!-- Remove when Copilot is added back --&gt;\n","\u003Cp\u003EWhile AI-powered tools excel at generating complex analytical queries, a common daily challenge for customer service teams is quickly finding specific customer reviews for complaints or compliments. Traditional keyword search often falls short, missing the nuances of natural language.\u003C/p\u003E\n&lt;!-- End Remove --&gt;\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-search/cortex-search-overview\"\u003ESnowflake Cortex Search\u003C/a\u003E\u003C/strong\u003E solves this by providing low-latency, high-quality &quot;fuzzy&quot; search over your Snowflake text data. It quickly sets up hybrid (vector and keyword) search engines, handling embeddings, infrastructure, and tuning for you. Under the hood, Cortex Search combines semantic (meaning-based) and lexical (keyword-based) retrieval with intelligent re-ranking to deliver the most relevant results. In this lab, you will configure a search service, connect it to customer review data, and run semantic queries to proactively identify key customer feedback.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Access Cortex Search\u003C/h4\u003E\n\u003Col\u003E\u003Cli\u003EOpen Snowsight and navigate to the AI &amp; ML Studio, then select \u003Cstrong\u003ECortex Search\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ECreate\u003C/strong\u003E to begin setup.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003EThis opens the search service configuration interface, where you&rsquo;ll define how Snowflake indexes and interprets your text data.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-access.png\" alt=\"assets/vignette-3/cortex-search-access.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EStep 2 - Configure the Search Service\u003C/h4\u003E\n","\u003Cp\u003EIn the \u003Cstrong\u003ENew service\u003C/strong\u003E configuration screen:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003ESelect \u003Cstrong\u003EDatabase\u003C/strong\u003E and \u003Cstrong\u003ESchema\u003C/strong\u003E:\n\u003Cul\u003E\u003Cli\u003EChoose \u003Cstrong\u003ETB_101\u003C/strong\u003E from the Databases dropdown\u003C/li\u003E\u003Cli\u003EChoose \u003Cstrong\u003EHARMONIZED\u003C/strong\u003E from the Schemas dropdown\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EEnter the \u003Cstrong\u003EService name\u003C/strong\u003E: \u003Ccode\u003Ecustomer_feedback_intelligence\u003C/code\u003E\u003C/li\u003E\u003Cli\u003EClick the \u003Cstrong\u003ENext\u003C/strong\u003E button at the bottom right to proceed.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-new-service.png\" alt=\"assets/vignette-3/cortex-search-new-service.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EStep 3 - Connect to Review Data\u003C/h4\u003E\n","\u003Cp\u003EThe wizard will now guide you through several configuration screens. Follow these steps:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESelect data screen:\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EFrom the Views dropdown, select \u003Ccode\u003ETRUCK_REVIEWS_V\u003C/code\u003E\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ENext\u003C/strong\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESelect search column screen:\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EChoose \u003Ccode\u003EREVIEW\u003C/code\u003E (this is the text column that will be semantically searched)\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ENext\u003C/strong\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESelect attributes screen:\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003ESelect columns for filtering results: \u003Ccode\u003ETRUCK_BRAND_NAME\u003C/code\u003E, \u003Ccode\u003EPRIMARY_CITY\u003C/code\u003E, \u003Ccode\u003EREVIEW_ID\u003C/code\u003E\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ENext\u003C/strong\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESelect columns screen:\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EChoose other columns to include in search results such as \u003Ccode\u003EDATE\u003C/code\u003E, \u003Ccode\u003ELANGUAGE\u003C/code\u003E, etc.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ENext\u003C/strong\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003EConfigure indexing screen:\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EWarehouse\u003C/strong\u003E: Select \u003Ccode\u003ECOMPUTE_WH\u003C/code\u003E from the dropdown\u003C/li\u003E\u003Cli\u003EAccept the other default settings\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ECreate\u003C/strong\u003E to build the search service\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-walkthrough.gif\" alt=\"assets/vignette-3/cortex-search-walkthrough.gif\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote\u003C/strong\u003E: Creating the search service includes building the index, so the initial setup may take a little longer. If the creation process is taking an extended period, you can seamlessly continue the lab by using a pre-configured search service:\u003C/p\u003E\n\u003C/blockquote\u003E\n\u003Col\u003E\u003Cli\u003EFrom the left-hand menu in Snowsight, navigate to \u003Cstrong\u003EAI &amp; ML\u003C/strong\u003E, then click on \u003Cstrong\u003ECortex Search\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EIn the Cortex Search view, locate the dropdown filter (as highlighted in the image below, showing \u003Ccode\u003ETB_101 / HARMONIZED\u003C/code\u003E). Select or ensure this filter is set to \u003Ccode\u003ETB_101 / HARMONIZED\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003EIn the list of &quot;Search services&quot; that appears, click on the pre-built service named \u003Cstrong\u003E\u003Ccode\u003ETASTY_BYTES_REVIEW_SEARCH\u003C/code\u003E\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EOnce inside the service's details page, click on \u003Cstrong\u003EPlayground\u003C/strong\u003E in the top right corner to begin using the search service for the lab.\u003C/li\u003E\u003C/ol\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EOnce any search service is active (either your new one or the pre-configured one), queries will run with low latency and scale seamlessly.\u003C/strong\u003E\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-existing-service.png\" alt=\"assets/vignette-3/cortex-search-existing-service.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003EBehind this simple UI, Cortex Search is performing a complex task. It analyzes the text in your &quot;REVIEW&quot; column, using an AI model to generate semantic embeddings, which are numerical representations of the text's meaning. These embeddings are then indexed, allowing for high-speed conceptual searches later on. In just a few clicks, you have taught Snowflake to understand the intent behind your reviews.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 4 - Run Semantic Query\u003C/h4\u003E\n","\u003Cp\u003EWhen the service shows as &quot;Active&quot;, click on \u003Cstrong\u003EPlayground\u003C/strong\u003E and enter the natural language prompt in the search bar:\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EPrompt - 1:\u003C/strong\u003E \u003Ccode\u003ECustomers getting sick\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-prompt1.png\" alt=\"assets/vignette-3/cortex-search-prompt1.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey Insight\u003C/strong\u003E: Notice Cortex Search isn&rsquo;t just finding customers - it&rsquo;s finding CONDITIONS that could MAKE customers sick. That is the difference between reactive keyword search and proactive semantic understanding.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003ENow try another query:\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EPrompt - 2:\u003C/strong\u003E \u003Ccode\u003EAngry customers\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-prompt2.png\" alt=\"assets/vignette-3/cortex-search-prompt2.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey Insight\u003C/strong\u003E: These customers are about to churn, but they never said &ldquo;I&rsquo;m angry.&rdquo; They expressed frustration in their own words. Cortex Search understands the emotion behind the language, helping you identify and save at-risk customers before they leave.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EConclusion\u003C/h4\u003E\n","\u003Cp\u003EUltimately, Cortex Search transforms how Tasty Bytes analyzes customer feedback. It empowers the customer service manager to move beyond simply sifting through reviews, to truly understand and proactively act upon the voice of the customer at scale, driving better operational decisions and enhancing customer loyalty.\u003C/p\u003E\n","\u003Cp\u003EIn the next module - Cortex Analyst - you'll use natural language to query structured data.\u003C/p\u003E\n","\u003Ch3\u003EOptional: Cortex Analyst\u003C/h3\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/cortex_analyst_header.png\" alt=\"./assets/cortex_analyst_header.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EA business analyst at Tasty Bytes needs to enable self-service analytics, allowing the business team to ask complex questions in natural language and get instant insights without relying on data analysts to write SQL. While previous AI tools helped with finding reviews and complex query generation, the demand now is for \u003Cstrong\u003Econversational analytics\u003C/strong\u003E that directly transforms structured business data into immediate insights.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst\"\u003ESnowflake Cortex Analyst\u003C/a\u003E\u003C/strong\u003E empowers business users to ask sophisticated questions directly, seamlessly extracting value from their analytics data through natural language interaction. This lab will guide you through designing a semantic model, connecting it to your business data, configuring relationships and synonyms, and then executing advanced business intelligence queries using natural language.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 -  Design Semantic Model\u003C/h4\u003E\n","\u003Cp\u003ELet's begin by navigating to Cortex Analyst in Snowsight and configuring our semantic model foundations.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003ENavigate to \u003Cstrong\u003ECortex Analyst\u003C/strong\u003E under \u003Cstrong\u003EAI &amp; ML Studio\u003C/strong\u003E in Snowsight.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-nav.png\" alt=\"assets/vignette-3/cortex-analyst-nav.png\"\u003E\u003C/p\u003E\n\u003Col start=\"2\"\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESet Role and Warehouse:\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EChange role to \u003Ccode\u003ETB_DEV\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003ESet Warehouse to \u003Ccode\u003ETB_CORTEX_WH\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ECreate new model\u003C/strong\u003E.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-setup.png\" alt=\"assets/vignette-3/cortex-analyst-setup.png\"\u003E\u003C/p\u003E\n\u003Col start=\"3\"\u003E\u003Cli\u003E\n","\u003Cp\u003EOn the \u003Cstrong\u003EGetting Started\u003C/strong\u003E page, configure the following:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EDATABASE\u003C/strong\u003E: \u003Ccode\u003ETB_101\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ESCHEMA\u003C/strong\u003E: \u003Ccode\u003ESEMANTIC_LAYER\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EName\u003C/strong\u003E: \u003Ccode\u003Etasty_bytes_business_analytics\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EDescription\u003C/strong\u003E: \u003Ccode\u003ESemantic model for Tasty Bytes executive analytics, covering customer loyalty and order performance data for natural language querying\u003C/code\u003E\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ENext\u003C/strong\u003E.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-getting-started.png\" alt=\"assets/vignette-3/cortex-analyst-getting-started.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EStep 2 - Select &amp; Configure Tables and Columns\u003C/h4\u003E\n","\u003Cp\u003EIn the \u003Cstrong\u003ESelect tables\u003C/strong\u003E step, let's choose our analytics views.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003ESelect the core business tables:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EDATABASE\u003C/strong\u003E: \u003Ccode\u003ETB_101\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ESCHEMA\u003C/strong\u003E: \u003Ccode\u003ESEMANTIC_LAYER\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EVIEWS\u003C/strong\u003E: Select \u003Ccode\u003ECustomer_Loyalty_Metrics_v\u003C/code\u003E and \u003Ccode\u003EOrders_v\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ENext\u003C/strong\u003E.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EOn the \u003Cstrong\u003ESelect columns\u003C/strong\u003E page, ensure both selected tables are active, then click \u003Cstrong\u003ECreate and Save\u003C/strong\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch4\u003EStep 3 - Edit Logical Table &amp; Add Synonyms\u003C/h4\u003E\n","\u003Cp\u003ENow, let's add table synonyms and a primary key for better natural language understanding.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EIn the \u003Ccode\u003Ecustomer_loyalty_metrics_v\u003C/code\u003E table, copy and paste the following synonyms into the \u003Ccode\u003ESynonyms\u003C/code\u003E box:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003ECustomers, customer_data, loyalty, customer_metrics, customer_info\n\u003C/code\u003E\u003C/pre\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ESet the \u003Cstrong\u003EPrimary Key\u003C/strong\u003E to \u003Ccode\u003Ecustomer_id\u003C/code\u003E from the dropdown.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EFor the \u003Ccode\u003Eorders_v\u003C/code\u003E table, copy and paste the following synonyms:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003EOrders, transactions, sales, purchases, order_data\n\u003C/code\u003E\u003C/pre\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EAfter making these changes, click \u003Cstrong\u003ESave\u003C/strong\u003E in the top right corner.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch4\u003EStep 4 - Configure Table Relationships\u003C/h4\u003E\n","\u003Cp\u003EAfter creating the semantic model, let's establish the relationship between our logical tables.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EClick \u003Cstrong\u003ERelationships\u003C/strong\u003E in the left-hand navigation.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EClick \u003Cstrong\u003EAdd relationship\u003C/strong\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EConfigure the relationship as follows:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ERelationship name\u003C/strong\u003E: \u003Ccode\u003Eorders_to_customer_loyalty_metrics\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ELeft table\u003C/strong\u003E: \u003Ccode\u003EORDERS_V\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ERight table\u003C/strong\u003E: \u003Ccode\u003ECUSTOMER_LOYALTY_METRICS_V\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EJoin columns\u003C/strong\u003E: Set \u003Ccode\u003ECUSTOMER_ID\u003C/code\u003E = \u003Ccode\u003ECUSTOMER_ID\u003C/code\u003E.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EClick \u003Cstrong\u003EAdd relationship\u003C/strong\u003E\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-table-relationship.png\" alt=\"assets/vignette-3/cortex-analyst-table-relationship.png\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EUpon completion\u003C/strong\u003E, simply use the \u003Cstrong\u003ESave\u003C/strong\u003E option at the top of the UI. This will finalize your semantic view, making your semantic model ready for sophisticated natural language queries.\u003C/p\u003E\n","\u003Cp\u003ETo access the \u003Cstrong\u003ECortex Analyst chat interface\u003C/strong\u003E in fullscreen mode, you would:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EClick the \u003Cstrong\u003Ethree-dot menu (ellipsis)\u003C/strong\u003E next to the &quot;Share&quot; button at the top right.\u003C/li\u003E\u003Cli\u003EFrom the dropdown menu, select \u003Cstrong\u003E&quot;Enter fullscreen mode.&quot;\u003C/strong\u003E\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-interface.png\" alt=\"assets/vignette-3/cortex-analyst-interface.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EStep 5 - Execute Customer Segmentation Intelligence\u003C/h4\u003E\n","\u003Cp\u003EWith our semantic model and relationships active, let's demonstrate sophisticated natural language analysis by running our first complex business query.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003ENavigate to the Cortex Analyst query interface.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EEnter the following prompt:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003EShow customer groups by marital status and gender, with their total spending per customer and average order value. Break this down by city and region, and also include the year of the orders so I can see when the spending occurred. In addition to the yearly breakdown, calculate each group&rsquo;s total lifetime spending and their average order value across all years. Rank the groups to highlight which demographics spend the most per year and which spend the most overall.\n\u003C/code\u003E\u003C/pre\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-prompt1.png\" alt=\"assets/vignette-3/cortex-analyst-prompt1.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey Insight\u003C/strong\u003E: Instantly delivers comprehensive intelligence by combining multi-table joins, demographic segmentation, geographic insights, and lifetime value analysis - insights that would require 40+ lines of SQL and hours of analyst effort.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 6 - Generate Advanced Business Intelligence\u003C/h4\u003E\n","\u003Cp\u003EHaving seen basic segmentation, let's now demonstrate enterprise-grade SQL that showcases the full power of conversational business intelligence.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EClear the context by clicking the refresh icon.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EEnter the following prompt:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003EI want to understand our customer base better. Can you group customers by their total spending (high, medium, low spenders), then show me their ordering patterns differ? Also compare how our franchise locations perform versus company-owned stores for each spending group.\n\u003C/code\u003E\u003C/pre\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-prompt2.png\" alt=\"assets/vignette-3/cortex-analyst-prompt2.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey Insight\u003C/strong\u003E: Notice how Cortex Analyst seamlessly bridges the gap between a business user's simple, natural language question and the sophisticated, multi-faceted SQL query required to answer it. It automatically constructs the complex logic, including CTEs, window functions, and detailed aggregations, that would typically demand a skilled data analyst.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EConclusion\u003C/h4\u003E\n","\u003Cp\u003EThrough these rigorous steps, we've forged a robust Cortex Analyst semantic model. This isn't just an improvement; it's a transformative tool designed to liberate users across various industries from the constraints of SQL, enabling them to surface profound business intelligence through intuitive natural language queries. Our multi-layered analyses, while showcased through the Tasty Bytes use case, powerfully illustrate how this model drastically cuts down on the time and effort traditionally needed for deep insights, thereby democratizing access to data and fueling a culture of informed, agile decision-making on a broad scale.\u003C/p\u003E\n","\u003Ch3\u003ESnowflake CoWork\u003C/h3\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/si_header.png\" alt=\"./assets/si_header.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EThe Chief Operating Officer at Tasty Bytes receives dozens of fragmented reports each week: customer satisfaction dashboards, revenue analytics, operational performance metrics, and market analysis. Critical business insights remain buried across separate systems: customer sentiment lives in review platforms, sales data sits in financial dashboards, and operational metrics exist in isolated performance tools.\u003C/p\u003E\n","\u003Cp\u003EWhen the COO needs to understand why Q3 revenue dropped, connecting customer feedback sentiment with actual financial performance requires hours of manual analysis, SQL expertise, and cross-referencing multiple data sources. This is a significant hurdle for executives and other non-technical roles.\u003C/p\u003E\n","\u003Cp\u003EIn this section, we'll demonstrate how \u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/snowflake-intelligence\"\u003ESnowflake CoWork\u003C/a\u003E\u003C/strong\u003E tackles this challenge by combining the capabilities of Cortex Search and Cortex Analyst, which are made available through the setup. This integration allows for a single conversational AI agent. You'll see how executives and other non-technical roles can ask natural language questions and receive immediate answers with visualizations. This kind of insight would normally take weeks of analyst work across multiple teams.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EPrerequisites:\u003C/strong\u003E\u003C/p\u003E\n","\u003Cp\u003EBefore starting this module, your environment includes pre-configured AI services that power Snowflake CoWork:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ECortex Search Service:\u003C/strong\u003E \u003Ccode\u003Etasty_bytes_review_search\u003C/code\u003E - analyzing customer reviews and feedback\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cem\u003ENote for Advanced Users:\u003C/em\u003E If you want to build your own Cortex Search from scratch, an optional setup module is available. For a detailed guide, click the link to the: \u003Ca href=\"/en/developers/guides/zero-to-snowflake/\"\u003ECortex Search Module\u003C/a\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ECortex Analyst Service:\u003C/strong\u003E \u003Ccode\u003ETASTY_BYTES_BUSINESS_ANALYTICS\u003C/code\u003E - for translating natural language questions into SQL and providing insights from structured data, enabling self-service analytics.\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cem\u003ENote for Advanced Users:\u003C/em\u003E If you prefer to build your own Cortex Analyst semantic model from scratch, you can access the detailed setup module for guidance. Access the detailed setup by clicking on the: \u003Ca href=\"/en/developers/guides/zero-to-snowflake/\"\u003ECortex Analyst Module\u003C/a\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ul\u003E\n\u003Chr\u003E\n","\u003Ch4\u003EStep 1 - Upload Semantic Model\u003C/h4\u003E\n","\u003Cp\u003ETo enable business analytics capabilities in Snowflake CoWork, you need to upload the pre-built semantic model file to your Snowflake stage. You can \u003Cstrong\u003Edownload the necessary YAML file directly by clicking this link:\u003C/strong\u003E \u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/semantic_models/TASTY_BYTES_BUSINESS_ANALYTICS.yaml\"\u003ECortex Analyst Semantic Model\u003C/a\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EImportant:\u003C/strong\u003E If clicking the link opens the file in your browser instead of downloading it, please right-click on the link and select \u003Cstrong\u003E&quot;Save Link As&quot;\u003C/strong\u003E to download the YAML file to your local machine.\u003C/p\u003E\n","\u003Cp\u003EHere's how to upload the semantic model:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENavigate to Cortex Analyst\u003C/strong\u003E: In Snowsight, go to \u003Cstrong\u003EAI &amp; ML Studio\u003C/strong\u003E and then select \u003Cstrong\u003ECortex Analyst\u003C/strong\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESet Role and Warehouse\u003C/strong\u003E:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EChange your role to \u003Ccode\u003ETB_DEV\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003ESet the warehouse to \u003Ccode\u003ETB_CORTEX_WH\u003C/code\u003E.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003EUpload your YAML file\u003C/strong\u003E: Click the \u003Cstrong\u003EUpload your yaml file\u003C/strong\u003E button.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003EConfigure Upload Details\u003C/strong\u003E: In the upload file screen, set the following:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EDatabase\u003C/strong\u003E: \u003Ccode\u003ETb_101\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ESchema\u003C/strong\u003E: \u003Ccode\u003Esemantic_layer\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EStage\u003C/strong\u003E: \u003Ccode\u003Esemantic_model_stage\u003C/code\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003EClick Upload\u003C/strong\u003E: This YAML file contains the pre-configured semantic model that defines the business analytics layer, including customer loyalty metrics and order data.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESave the YAML file\u003C/strong\u003E: After clicking upload, save the YAML file. The semantic model will then appear in the Cortex Analyst panel, in the semantic models section.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-yaml-file-upload.gif\" alt=\"snowflake-intelligence-yaml-file-upload\"\u003E\u003C/p\u003E\n\u003Chr\u003E\n","\u003Ch4\u003EStep 2: Create a Unified Agent\u003C/h4\u003E\n","\u003Cp\u003EWith your AI services pre-configured, you can now create a Cortex Agent that combines these capabilities into a single, unified intelligence interface.\u003C/p\u003E\n","\u003Ch3\u003ECreate the Agent\u003C/h3\u003E\n\u003Col\u003E\u003Cli\u003EIn \u003Cstrong\u003ESnowsight\u003C/strong\u003E, navigate to the \u003Cstrong\u003EAI &amp; ML Studio\u003C/strong\u003E, then select \u003Cstrong\u003EAgents\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ECreate Agent\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EIn the &quot;Create New Agent&quot; window, click \u003Cstrong\u003ECreate agent\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EInitial Configuration\u003C/strong\u003E:\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EPlatform integration\u003C/strong\u003E: Ensure &quot;Create this agent for Snowflake CoWork&quot; is checked.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EDatabase and schema\u003C/strong\u003E: This will default to \u003Ccode\u003ESNOWFLAKE_INTELLIGENCE.AGENTS\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EAgent object name\u003C/strong\u003E: Enter \u003Ccode\u003Etasty_bytes_intelligence_agent\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EDisplay name\u003C/strong\u003E: Enter \u003Ccode\u003ETasty Bytes Business Intelligence Agent\u003C/code\u003E.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003ECreate agent\u003C/strong\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-create-agent.png\" alt=\"snowflake-intelligence-create-agent\"\u003E\u003C/p\u003E\n\u003Chr\u003E\n","\u003Ch3\u003EConfigure the Agent\u003C/h3\u003E\n","\u003Cp\u003EAfter creating the agent, click on its name from the agent list to open the details page, then click \u003Cstrong\u003EEdit\u003C/strong\u003E to begin configuring it.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-edit-agent.gif\" alt=\"snowflake-intelligence-edit-agent\"\u003E\u003C/p\u003E\n","\u003Ch4\u003E\u003Cstrong\u003E1. About Tab\u003C/strong\u003E\u003C/h4\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EDisplay name\u003C/strong\u003E: \u003Ccode\u003ETasty Bytes Business Intelligence Agent\u003C/code\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EDescription\u003C/strong\u003E:\u003C/li\u003E\u003C/ul\u003E\n\u003Cpre\u003E\u003Ccode\u003EThis agent analyzes customer feedback and business performance data for Tasty Bytes food trucks. It identifies operational issues, competitive threats, and growth opportunities by connecting customer reviews with revenue and loyalty metrics to provide actionable business insights.\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003E\u003Cstrong\u003E2. Tools Tab\u003C/strong\u003E\u003C/h4\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote\u003C/strong\u003E: This lab primarily uses a pre-built \u003Cstrong\u003Esemantic model\u003C/strong\u003E uploaded in Step 1. However, if you built your Cortex Analyst semantic view from scratch using the \u003Ca href=\"vignette-3-cortex-analyst.md\"\u003ECortex Analyst Module\u003C/a\u003E, you will select your \u003Cstrong\u003Esemantic view\u003C/strong\u003E here instead of a semantic model. After setting the \u003Cstrong\u003EDatabase\u003C/strong\u003E to \u003Ccode\u003ETB_101\u003C/code\u003E and \u003Cstrong\u003ESchema\u003C/strong\u003E to \u003Ccode\u003Esemantic_layer\u003C/code\u003E, your semantic view will be listed and selectable under that schema.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003ENow, let's add the semantic model we uploaded in Step 1:\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EAdd the Cortex Analyst Tool:\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EClick \u003Cstrong\u003EAdd\u003C/strong\u003E next to &quot;Cortex Analyst.&quot;\u003C/li\u003E\u003Cli\u003ESelect the \u003Cstrong\u003ESemantic model file\u003C/strong\u003E radio button.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EConfigure the semantic model location\u003C/strong\u003E:\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ESchema\u003C/strong\u003E: Choose \u003Ccode\u003ETB_101.SEMANTIC_LAYER\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EStage\u003C/strong\u003E: Choose \u003Ccode\u003ESEMANTIC_MODEL_STAGE\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EFile Selection\u003C/strong\u003E: Pick your uploaded YAML file from the list.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EConfigure tool details\u003C/strong\u003E:\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EName\u003C/strong\u003E: Enter \u003Ccode\u003Etasty_bytes_business_analytics\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EDescription\u003C/strong\u003E:\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ol\u003E\n\u003Cpre\u003E\u003Ccode\u003ESearches customer reviews and feedback to identify sentiment, operational issues, and customer satisfaction insights\n\u003C/code\u003E\u003C/pre\u003E\n\u003Col start=\"5\"\u003E\u003Cli\u003E\u003Cstrong\u003EConfigure execution settings\u003C/strong\u003E:\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EWarehouse\u003C/strong\u003E: Select \u003Cstrong\u003ECustom\u003C/strong\u003E and choose \u003Ccode\u003ETB_CORTEX_WH\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EQuery timeout\u003C/strong\u003E: Enter \u003Ccode\u003E300\u003C/code\u003E.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003EAdd\u003C/strong\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-add-analyst.gif\" alt=\"snowflake-intelligence-add-analyst\"\u003E\u003C/p\u003E\n\u003Chr\u003E\n","\u003Cp\u003E\u003Cstrong\u003EAdd the Cortex Search Services Tool:\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EClick \u003Cstrong\u003EAdd\u003C/strong\u003E next to &quot;Cortex Search Services.&quot;\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EConfigure tool details\u003C/strong\u003E:\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EName\u003C/strong\u003E: \u003Ccode\u003Etasty_bytes_review_search\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EDescription\u003C/strong\u003E:\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ol\u003E\n\u003Cpre\u003E\u003Ccode\u003ESearches customer reviews and feedback to identify sentiment, operational issues, and customer satisfaction insights\n\u003C/code\u003E\u003C/pre\u003E\n\u003Col start=\"3\"\u003E\u003Cli\u003E\u003Cstrong\u003EConfigure data source location\u003C/strong\u003E:\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ESchema\u003C/strong\u003E: Choose \u003Ccode\u003ETB_101.HARMONIZED\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ESearch service\u003C/strong\u003E: Choose \u003Ccode\u003ETB_101.HARMONIZED.TASTY_BYTES_REVIEW_SEARCH\u003C/code\u003E.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EConfigure search result columns\u003C/strong\u003E:\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EID column\u003C/strong\u003E: Select \u003Cstrong\u003EReview\u003C/strong\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ETitle column\u003C/strong\u003E: Select \u003Cstrong\u003ETRUCK_BRAND_NAME\u003C/strong\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EConfigure search filters (optional)\u003C/strong\u003E:\n\u003Cul\u003E\u003Cli\u003EClick \u003Cstrong\u003EAdd filter\u003C/strong\u003E to add up to 5 optional filters.\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003EAdd\u003C/strong\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-add-search.gif\" alt=\"snowflake-intelligence-add-search\"\u003E\u003C/p\u003E\n","\u003Ch4\u003E\u003Cstrong\u003E3. Orchestration Tab\u003C/strong\u003E\u003C/h4\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EOrchestration Instruction\u003C/strong\u003E:\u003C/li\u003E\u003C/ul\u003E\n\u003Cpre\u003E\u003Ccode\u003EUse both Cortex Search and Cortex Analyst to provide unified business intelligence.\nAnalyze customer feedback sentiment and operational issues from reviews, then correlate findings with revenue performance, customer loyalty metrics, and market data.\nPresent insights with revenue quantification and strategic recommendations.\n\u003C/code\u003E\u003C/pre\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EResponse Instruction\u003C/strong\u003E:\u003C/li\u003E\u003C/ul\u003E\n\u003Cpre\u003E\u003Ccode\u003EYou are a business intelligence analyst for Tasty Bytes food trucks. When analyzing data:\n1. Combine customer review insights with specific revenue and loyalty data to provide comprehensive business intelligence\n2. Quantify business impact with specific revenue amounts and market sizes\n3. Identify operational risks, competitive threats, and growth opportunities\n4. Provide clear, actionable recommendations for executive decision-making\n5. Use visualizations when helpful to illustrate business insights\n6. Explain the correlation between customer feedback and business performance\n7. Focus on strategic insights that drive business outcomes\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003E\u003Cstrong\u003E4. Access Tab\u003C/strong\u003E\u003C/h4\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003ETo control who can use your agent in this lab, you'll simply keep the default ACCOUNTADMIN access, which is sufficient for testing, with no extra configuration needed; however, you have the option to add more roles, such as TB_ADMIN, by clicking Add role.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003E\u003Cstrong\u003E5. Save Configuration\u003C/strong\u003E\u003C/h4\u003E\n\u003Cul\u003E\u003Cli\u003EClick \u003Cstrong\u003ESave\u003C/strong\u003E in the top right corner to finalize your agent's configuration.\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003EYour unified intelligence agent is now ready to provide conversational business intelligence through the Snowflake CoWork interface.\u003C/p\u003E\n\u003Chr\u003E\n","\u003Ch4\u003EStep 3 - Access Snowflake CoWork Interface\u003C/h4\u003E\n","\u003Cp\u003EWith your intelligence agent created, we can now access the Snowflake CoWork interface that provides unified natural language business intelligence.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EAccess the interface:\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EOpen Snowsight and navigate to the AI &amp; ML Studio, then select \u003Cstrong\u003ESnowflake CoWork\u003C/strong\u003E\u003C/li\u003E\u003Cli\u003ESelect our created agent: \u003Ccode\u003Etasty_bytes_intelligence_agent\u003C/code\u003E\u003C/li\u003E\u003Cli\u003ESelect the sources: select \u003Ccode\u003Etasty_bytes_review_search\u003C/code\u003E and \u003Ccode\u003Etasty_bytes_business_analytics\u003C/code\u003E\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003EYou are now ready to demonstrate unified business intelligence through natural language.\u003C/p\u003E\n","\u003Ch2\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-interface.gif\" alt=\"snowflake-intelligence-interface\"\u003E\u003C/h2\u003E\n","\u003Ch4\u003EStep 4 - Correlate Revenue &amp; Customer Themes\u003C/h4\u003E\n","\u003Cp\u003ELet's deep dive into our highest-earning markets by mapping their financial success to the voice of their customers.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EPrompt:\u003C/strong\u003E\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003EGenerate a bar chart displaying the top 5 cities by total revenue. For each of these top-performing cities, analyze their customer reviews to identify the 3 most frequently discussed topics or common themes (e.g., related to service, product, or facilities). Provide these topics alongside the chart\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-prompt1.png\" alt=\"snowflake-intelligence-prompt2\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey insight:\u003C/strong\u003E This analysis really shows off what Snowflake CoWork can do! It helps us connect the dots between how much money our top cities are making and what our customers in those cities are actually saying. We can quickly see our best-performing markets by revenue, and right alongside, get a clear picture of the most common things people are talking about in their reviews. This gives us a much richer, more human understanding of what's truly driving success &ndash; or perhaps what subtle issues might be brewing &ndash; even in our strongest areas. It's all about making smarter, more informed decisions, and we get these powerful insights just by asking a simple question.\u003C/p\u003E\n","\u003Ch4\u003EStep 5 - Analyze Underperforming Markets\u003C/h4\u003E\n","\u003Cp\u003ENow let's explore strategies to address these key customer pain points and develop targeted action plans to improve performance in these cities.\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EPrompt:\u003C/strong\u003E\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003EIdentify the 5 cities with the lowest total revenue. For each of these cities, analyze their customer reviews to identify the 3 most frequently mentioned pain points or areas of dissatisfaction. Please present this as a table, showing the city, its total revenue, and the identified customer pain points.\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-prompt2.png\" alt=\"snowflake-intelligence-prompt2\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003EKey insight:\u003C/strong\u003E This analysis from Snowflake CoWork gives us a clear picture of our lowest-earning cities and, crucially, shines a light on the exact customer pain points that are holding them back. By directly connecting raw revenue numbers with specific feedback from customer reviews, we can pinpoint where we need to focus our efforts to improve service, product, or support. This provides actionable intelligence to drive targeted growth and customer satisfaction in these challenged markets, all by simply asking a natural language question.\u003C/p\u003E\n\u003Chr\u003E\n","\u003Ch4\u003EConclusion\u003C/h4\u003E\n","\u003Cp\u003EWhat we've just experienced with Tasty Bytes showcases a fundamental shift in how businesses can truly understand their data. By seamlessly integrating Snowflake Cortex Search for deep dives into unstructured customer feedback and Cortex Analyst for conversational insights from structured business metrics, we've brought a truly unified business intelligence to life.\u003C/p\u003E\n","\u003Cp\u003EYou saw firsthand the power of this integration: users of all technical levels can now simply ask natural language questions and immediately receive visually rich, actionable answers. This direct and intuitive access to insights fundamentally transforms how organizations can swiftly identify operational risks, precisely quantify financial impact, and pinpoint new growth opportunities. It's clear that Snowflake CoWork empowers rapid, data-driven decision-making, converting what was once fragmented data into clear, compelling business advantage for everyone.\u003C/p\u003E\n","\u003Ch2\u003EGovernance with Horizon\u003C/h2\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/governance_header.png\" alt=\"./assets/governance_header.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EOverview\u003C/h3\u003E\n","\u003Cp\u003EWithin this vignette, we will explore some of the powerful governance features within Snowflake Horizon. We will begin with a look at Role-Based Access Control (RBAC), before diving into features like automated data classification, tag-based masking policies for column-level security, row-access policies, data quality monitoring, and finally, account-wide security monitoring with the Trust Center.\u003C/p\u003E\n","\u003Ch3\u003EWhat You Will Learn\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EThe fundamentals of Role-Based Access Control (RBAC) in Snowflake.\u003C/li\u003E\u003Cli\u003EHow to automatically classify and tag sensitive data.\u003C/li\u003E\u003Cli\u003EHow to implement column-level security with Dynamic Data Masking.\u003C/li\u003E\u003Cli\u003EHow to implement row-level security with Row Access Policies.\u003C/li\u003E\u003Cli\u003EHow to monitor data quality with Data Metric Functions.\u003C/li\u003E\u003Cli\u003EHow to monitor account security with the Trust Center.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You Will Build\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EA custom, privileged role.\u003C/li\u003E\u003Cli\u003EA data classification profile for auto-tagging PII.\u003C/li\u003E\u003Cli\u003ETag-based masking policies for string and date columns.\u003C/li\u003E\u003Cli\u003EA row access policy to restrict data visibility by country.\u003C/li\u003E\u003Cli\u003EA custom Data Metric Function to check data integrity.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EGet the SQL code and paste it into your SQL File.\u003C/h3\u003E\n","\u003Cp\u003E\u003Cstrong\u003ECopy and paste the SQL from this \u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-4.sql\"\u003Efile\u003C/a\u003E in a new SQL File to follow along in Snowflake.\u003C/strong\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENote that once you've reached the end of the SQL File you can skip to \u003Ca href=\"/en/developers/guides/zero-to-snowflake/\"\u003EStep 29 - Apps &amp; Collaboration\u003C/a\u003E.\u003C/strong\u003E\u003C/p\u003E\n","\u003Ch3\u003ERoles and Access Control\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003ESnowflake's security model is built on a framework of Role-based Access Control (RBAC) and Discretionary Access Control (DAC). Access privileges are assigned to roles, which are then assigned to users. This creates a powerful and flexible hierarchy for securing objects.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/security-access-control-overview\"\u003EAccess Control Overview\u003C/a\u003E\u003C/strong\u003E: To learn more about the key concepts of access control in Snowflake, including securable objects, roles, privileges, and users.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 1 - Set Context and View Existing Roles\u003C/h4\u003E\n","\u003Cp\u003EFirst, let's set our context for this exercise and view the roles that already exist in the account.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE useradmin;\nUSE DATABASE tb_101;\nUSE WAREHOUSE tb_dev_wh;\n\nSHOW ROLES;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Create a Custom Role\u003C/h4\u003E\n","\u003Cp\u003EWe will now create a custom \u003Ccode\u003Etb_data_steward\u003C/code\u003E role. This role will be responsible for managing and protecting our customer data.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE ROLE tb_data_steward\n    COMMENT = 'Custom Role';\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThe typical hierarchy of system and custom roles might look something like this:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003E                                +---------------+\n                                | ACCOUNTADMIN  |\n                                +---------------+\n                                  ^    ^     ^\n                                  |    |     |\n                    +-------------+-+  |    ++-------------+\n                    | SECURITYADMIN |  |    |   SYSADMIN   |&lt;------------+\n                    +---------------+  |    +--------------+             |\n                            ^          |     ^        ^                  |\n                            |          |     |        |                  |\n                    +-------+-------+  |     |  +-----+-------+  +-------+-----+\n                    |   USERADMIN   |  |     |  | CUSTOM ROLE |  | CUSTOM ROLE |\n                    +---------------+  |     |  +-------------+  +-------------+\n                            ^          |     |      ^              ^      ^\n                            |          |     |      |              |      |\n                            |          |     |      |              |    +-+-----------+\n                            |          |     |      |              |    | CUSTOM ROLE |\n                            |          |     |      |              |    +-------------+\n                            |          |     |      |              |           ^\n                            |          |     |      |              |           |\n                            +----------+-----+---+--+--------------+-----------+\n                                                 |\n                                            +----+-----+\n                                            |  PUBLIC  |\n                                            +----------+\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ESnowflake System Defined Role Definitions:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EORGADMIN\u003C/strong\u003E: Role that manages operations at the organization level.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EACCOUNTADMIN\u003C/strong\u003E: This is the top-level role in the system and should be granted only to a limited/controlled number of users in your account.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ESECURITYADMIN\u003C/strong\u003E: Role that can manage any object grant globally, as well as create, monitor, and manage users and roles.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EUSERADMIN\u003C/strong\u003E: Role that is dedicated to user and role management only.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ESYSADMIN\u003C/strong\u003E: Role that has privileges to create warehouses and databases in an account.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EPUBLIC\u003C/strong\u003E: PUBLIC is a pseudo-role automatically granted to all users and roles. It can own securable objects, and anything it owns becomes available to every other user and role in the account.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch4\u003EStep 3 - Grant Privileges to the Custom Role\u003C/h4\u003E\n","\u003Cp\u003EWe can't do much with our role without granting privileges to it. Let's switch to the \u003Ccode\u003Esecurityadmin\u003C/code\u003E role to grant our new \u003Ccode\u003Etb_data_steward\u003C/code\u003E role the necessary permissions to use a warehouse and access our database schemas and tables.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE securityadmin;\n\n-- Grant warehouse usage\nGRANT OPERATE, USAGE ON WAREHOUSE tb_dev_wh TO ROLE tb_data_steward;\n\n-- Grant database and schema usage\nGRANT USAGE ON DATABASE tb_101 TO ROLE tb_data_steward;\nGRANT USAGE ON ALL SCHEMAS IN DATABASE tb_101 TO ROLE tb_data_steward;\n\n-- Grant table-level privileges\nGRANT SELECT ON ALL TABLES IN SCHEMA raw_customer TO ROLE tb_data_steward;\nGRANT ALL ON SCHEMA governance TO ROLE tb_data_steward;\nGRANT ALL ON ALL TABLES IN SCHEMA governance TO ROLE tb_data_steward;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 4 - Grant and Use the New Role\u003C/h4\u003E\n","\u003Cp\u003EFinally, we grant the new role to our own user. Then we can switch to the \u003Ccode\u003Etb_data_steward\u003C/code\u003E role and run a query to see what data we can access.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- Grant role to your user\nSET my_user = CURRENT_USER();\nGRANT ROLE tb_data_steward TO USER IDENTIFIER($my_user);\n\n-- Switch to the new role\nUSE ROLE tb_data_steward;\n\n-- Run a test query\nSELECT TOP 100 * FROM raw_customer.customer_loyalty;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ELooking at the query results, it's clear this table contains a lot of Personally Identifiable Information (PII). In the next sections, we'll learn how to protect it.\u003C/p\u003E\n","\u003Ch3\u003EClassification and Auto Tagging\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EA key first step in data governance is identifying and classifying sensitive data. Snowflake Horizon's auto-tagging capability can automatically discover sensitive information by monitoring columns in your schemas. We can then use these tags to apply security policies.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/classify-auto\"\u003EAutomatic Classification\u003C/a\u003E\u003C/strong\u003E: Learn how Snowflake can automatically classify sensitive data based on a schedule, simplifying governance at scale.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 1 - Create PII Tag and Grant Privileges\u003C/h4\u003E\n","\u003Cp\u003EUsing the \u003Ccode\u003Eaccountadmin\u003C/code\u003E role, we'll create a \u003Ccode\u003Epii\u003C/code\u003E tag in our \u003Ccode\u003Egovernance\u003C/code\u003E schema. We will also grant the necessary privileges to our \u003Ccode\u003Etb_data_steward\u003C/code\u003E role to perform classification.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE accountadmin;\n\nCREATE OR REPLACE TAG governance.pii;\nGRANT APPLY TAG ON ACCOUNT TO ROLE tb_data_steward;\n\nGRANT EXECUTE AUTO CLASSIFICATION ON SCHEMA raw_customer TO ROLE tb_data_steward;\nGRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN TO ROLE tb_data_steward;\nGRANT CREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE ON SCHEMA governance TO ROLE tb_data_steward;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Create a Classification Profile\u003C/h4\u003E\n","\u003Cp\u003ENow, as the \u003Ccode\u003Etb_data_steward\u003C/code\u003E, we'll create a classification profile. This profile defines how auto-tagging will behave.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE tb_data_steward;\n\nCREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE\n  governance.tb_classification_profile(\n    {\n      'minimum_object_age_for_classification_days': 0,\n      'maximum_classification_validity_days': 30,\n      'auto_tag': true\n    });\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 3 - Map Semantic Categories to the PII Tag\u003C/h4\u003E\n","\u003Cp\u003ENext, we'll define a mapping that tells the classification profile to apply our \u003Ccode\u003Egovernance.pii\u003C/code\u003E tag to any column whose \u003Ccode\u003ESEMANTIC_CATEGORY\u003C/code\u003E matches common PII types like \u003Ccode\u003ENAME\u003C/code\u003E, \u003Ccode\u003EPHONE_NUMBER\u003C/code\u003E, \u003Ccode\u003EEMAIL\u003C/code\u003E, etc.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECALL governance.tb_classification_profile!SET_TAG_MAP(\n  {'column_tag_map':[\n    {\n      'tag_name':'tb_101.governance.pii',\n      'tag_value':'pii',\n      'semantic_categories':['NAME', 'PHONE_NUMBER', 'POSTAL_CODE', 'DATE_OF_BIRTH', 'CITY', 'EMAIL']\n    }]});\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 4 - Run Classification and View Results\u003C/h4\u003E\n","\u003Cp\u003ELet's manually trigger the classification process on our \u003Ccode\u003Ecustomer_loyalty\u003C/code\u003E table. Then, we can query the \u003Ccode\u003EINFORMATION_SCHEMA\u003C/code\u003E to see the tags that were automatically applied.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- Trigger classification\nCALL SYSTEM$CLASSIFY('tb_101.raw_customer.customer_loyalty', 'tb_101.governance.tb_classification_profile');\n\n-- View applied tags\nSELECT \n    column_name,\n    tag_database,\n    tag_schema,\n    tag_name,\n    tag_value,\n    apply_method\nFROM TABLE(INFORMATION_SCHEMA.TAG_REFERENCES_ALL_COLUMNS('raw_customer.customer_loyalty', 'table'));\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ENotice that columns identified as PII now have our custom \u003Ccode\u003Egovernance.pii\u003C/code\u003E tag applied.\u003C/p\u003E\n","\u003Ch3\u003EMasking Policies\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003ENow that our sensitive columns are tagged, we can use Dynamic Data Masking to protect them. A masking policy is a schema-level object that determines whether a user sees the original data or a masked version at query time. We can apply these policies directly to our \u003Ccode\u003Epii\u003C/code\u003E tag.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/security-column-intro\"\u003EColumn-level Security\u003C/a\u003E\u003C/strong\u003E: Column-level Security includes Dynamic Data Masking and External Tokenization to protect sensitive data.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 1 - Create Masking Policies\u003C/h4\u003E\n","\u003Cp\u003EWe'll create two policies: one to mask string data and one to mask date data. The logic is simple: if the user's role is not privileged (i.e., not \u003Ccode\u003EACCOUNTADMIN\u003C/code\u003E or \u003Ccode\u003ETB_ADMIN\u003C/code\u003E), return a masked value. Otherwise, return the original value.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- Create the masking policy for sensitive string data\nCREATE OR REPLACE MASKING POLICY governance.mask_string_pii AS (original_value STRING)\nRETURNS STRING -&gt;\n  CASE WHEN\n    CURRENT_ROLE() NOT IN ('ACCOUNTADMIN', 'TB_ADMIN')\n    THEN '****MASKED****'\n    ELSE original_value\n  END;\n\n-- Now create the masking policy for sensitive DATE data\nCREATE OR REPLACE MASKING POLICY governance.mask_date_pii AS (original_value DATE)\nRETURNS DATE -&gt;\n  CASE WHEN\n    CURRENT_ROLE() NOT IN ('ACCOUNTADMIN', 'TB_ADMIN')\n    THEN DATE_TRUNC('year', original_value)\n    ELSE original_value\n  END;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Apply Masking Policies to the Tag\u003C/h4\u003E\n","\u003Cp\u003EThe power of tag-based governance comes from applying the policy once to the tag. This action automatically protects all columns that have that tag, now and in the future.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER TAG governance.pii SET\n    MASKING POLICY governance.mask_string_pii,\n    MASKING POLICY governance.mask_date_pii;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 3 - Test the Policies\u003C/h4\u003E\n","\u003Cp\u003ELet's test our work. First, switch to the unprivileged \u003Ccode\u003Epublic\u003C/code\u003E role and query the table. The PII columns should be masked.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE public;\nSELECT TOP 100 * FROM raw_customer.customer_loyalty;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ENow, switch to a privileged role, \u003Ccode\u003Etb_admin\u003C/code\u003E. The data should now be fully visible.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE tb_admin;\nSELECT TOP 100 * FROM raw_customer.customer_loyalty;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003ERow Access Policies\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EIn addition to masking columns, Snowflake allows you to filter which rows are visible to a user with Row Access Policies. The policy evaluates each row against rules you define, often based on the user's role or other session attributes.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/security-row-intro\"\u003ERow-level Security\u003C/a\u003E\u003C/strong\u003E: Row Access Policies determine which rows are visible in a query result, enabling fine-grained access control.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 1 - Create a Policy Mapping Table\u003C/h4\u003E\n","\u003Cp\u003EA common pattern for row access policies is to use a mapping table that defines which roles can see which data. We'll create a table that maps roles to the \u003Ccode\u003Ecountry\u003C/code\u003E values they are permitted to see.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE tb_data_steward;\n\nCREATE OR REPLACE TABLE governance.row_policy_map\n    (role STRING, country_permission STRING);\n\n-- Map the tb_data_engineer role to only see 'United States' data\nINSERT INTO governance.row_policy_map\n    VALUES('tb_data_engineer', 'United States');\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Create the Row Access Policy\u003C/h4\u003E\n","\u003Cp\u003ENow we create the policy itself. This policy returns \u003Ccode\u003ETRUE\u003C/code\u003E (allowing the row to be seen) if the user's role is an admin role OR if the user's role exists in our mapping table and matches the \u003Ccode\u003Ecountry\u003C/code\u003E value of the current row.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE ROW ACCESS POLICY governance.customer_loyalty_policy\n    AS (country STRING) RETURNS BOOLEAN -&gt;\n        CURRENT_ROLE() IN ('ACCOUNTADMIN', 'SYSADMIN') \n        OR EXISTS \n            (\n            SELECT 1 FROM governance.row_policy_map rp\n            WHERE\n                UPPER(rp.role) = CURRENT_ROLE()\n                AND rp.country_permission = country\n            );\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 3 - Apply and Test the Policy\u003C/h4\u003E\n","\u003Cp\u003EApply the policy to the \u003Ccode\u003Ecountry\u003C/code\u003E column of our \u003Ccode\u003Ecustomer_loyalty\u003C/code\u003E table. Then, switch to the \u003Ccode\u003Etb_data_engineer\u003C/code\u003E role and query the table.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- Apply the policy\nALTER TABLE raw_customer.customer_loyalty\n    ADD ROW ACCESS POLICY governance.customer_loyalty_policy ON (country);\n\n-- Switch role to test the policy\nUSE ROLE tb_data_engineer;\n\n-- Query the table\nSELECT TOP 100 * FROM raw_customer.customer_loyalty;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThe result set should now only contain rows where the \u003Ccode\u003Ecountry\u003C/code\u003E is 'United States'.\u003C/p\u003E\n","\u003Ch3\u003EData Metric Functions\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EData governance isn't just about security; it's also about trust and reliability. Snowflake helps maintain data integrity with Data Metric Functions (DMFs). You can use system-defined DMFs or create your own to run automated quality checks on your tables.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/data-quality-intro\"\u003EData Quality Monitoring\u003C/a\u003E\u003C/strong\u003E: Learn how to ensure data consistency and reliability using built-in and custom Data Metric Functions.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 1 - Use System DMFs\u003C/h4\u003E\n","\u003Cp\u003ELet's use a few of Snowflake's built-in DMFs to check the quality of our \u003Ccode\u003Eorder_header\u003C/code\u003E table.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE tb_data_steward;\n\n-- This will return the percentage of null customer IDs.\nSELECT SNOWFLAKE.CORE.NULL_PERCENT(SELECT customer_id FROM raw_pos.order_header);\n\n-- We can use DUPLICATE_COUNT to check for duplicate order IDs.\nSELECT SNOWFLAKE.CORE.DUPLICATE_COUNT(SELECT order_id FROM raw_pos.order_header); \n\n-- Average order total amount for all orders.\nSELECT SNOWFLAKE.CORE.AVG(SELECT order_total FROM raw_pos.order_header);\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Create a Custom DMF\u003C/h4\u003E\n","\u003Cp\u003EWe can also create custom DMFs for our specific business logic. Let's create one that checks for orders where the \u003Ccode\u003Eorder_total\u003C/code\u003E does not equal \u003Ccode\u003Eunit_price * quantity\u003C/code\u003E.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE DATA METRIC FUNCTION governance.invalid_order_total_count(\n    order_prices_t table(\n        order_total NUMBER,\n        unit_price NUMBER,\n        quantity INTEGER\n    )\n)\nRETURNS NUMBER\nAS\n'SELECT COUNT(*)\n FROM order_prices_t\n WHERE order_total != unit_price * quantity';\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 3 - Test and Schedule the DMF\u003C/h4\u003E\n","\u003Cp\u003ELet's insert a bad record to test our DMF. Then, we'll call the function to see if it catches the error. The record we will be inserting is ordering 2 items with a unit price of $5, and a total price of $5 instead of the correct total $10.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- Insert a record with an incorrect total price\nINSERT INTO raw_pos.order_detail\nSELECT 904745311, 459520442, 52, null, 0, 2, 5.0, 5.0, null;\n\n-- Call the custom DMF on the order detail table.\nSELECT governance.invalid_order_total_count(\n    SELECT price, unit_price, quantity FROM raw_pos.order_detail\n) AS num_orders_with_incorrect_price;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ETo automate this check, we can associate the DMF with the table and set a schedule to have it run automatically whenever the data changes, then add it to the \u003Ccode\u003Eorder_detail\u003C/code\u003E table.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EALTER TABLE raw_pos.order_detail\n    SET DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';\n\nALTER TABLE raw_pos.order_detail\n    ADD DATA METRIC FUNCTION governance.invalid_order_total_count\n    ON (price, unit_price, quantity);\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003ETrust Center\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EThe Trust Center provides a centralized dashboard for monitoring security risks across your entire Snowflake account. It uses scheduled scanners to check for issues like missing Multi-Factor Authentication (MFA), over-privileged roles, or inactive users, and then provides recommended actions.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/trust-center/overview\"\u003ETrust Center Overview\u003C/a\u003E\u003C/strong\u003E: The Trust Center enables automatic checks to evaluate and monitor security risks on your account.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 1 - Grant Privileges and Navigate to the Trust Center\u003C/h4\u003E\n","\u003Cp\u003EFirst, an \u003Ccode\u003EACCOUNTADMIN\u003C/code\u003E needs to grant the \u003Ccode\u003ETRUST_CENTER_ADMIN\u003C/code\u003E application role to a user or role. We'll grant it to our \u003Ccode\u003Etb_admin\u003C/code\u003E role.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE accountadmin;\nGRANT APPLICATION ROLE SNOWFLAKE.TRUST_CENTER_ADMIN TO ROLE tb_admin;\nUSE ROLE tb_admin; \n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ENow, navigate to the Trust Center in the Snowsight UI:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EClick the \u003Cstrong\u003EMonitoring\u003C/strong\u003E tab in the left navigation bar.\u003C/li\u003E\u003Cli\u003EClick on \u003Cstrong\u003ETrust Center\u003C/strong\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch4\u003EStep 2 - Enable Scanner Packages\u003C/h4\u003E\n","\u003Cp\u003EBy default, most scanner packages are disabled. Let's enable them to get a comprehensive view of our account's security posture.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EIn the Trust Center, click the \u003Cstrong\u003EScanner Packages\u003C/strong\u003E tab.\u003C/li\u003E\u003Cli\u003EClick on \u003Cstrong\u003ECIS Benchmarks\u003C/strong\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-4/trust_center_scanner_packages.png\" alt=\"assets/vignette-4/trust_center_scanner_packages.png\"\u003E\u003C/p\u003E\n\u003Col start=\"3\"\u003E\u003Cli\u003EClick the \u003Cstrong\u003EEnable Package\u003C/strong\u003E button.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-4/trust_center_cis_scanner_package.png\" alt=\"assets/vignette-4/trust_center_cis_scanner_package.png\"\u003E\u003C/p\u003E\n\u003Col start=\"4\"\u003E\u003Cli\u003EIn the modal, set the \u003Cstrong\u003EFrequency\u003C/strong\u003E to \u003Ccode\u003EMonthly\u003C/code\u003E and click \u003Cstrong\u003EContinue\u003C/strong\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-4/enable_scanner_package.png\" alt=\"assets/vignette-4/enable_scanner_package.png\"\u003E\u003C/p\u003E\n\u003Col start=\"5\"\u003E\u003Cli\u003ERepeat this process for the \u003Cstrong\u003EThreat Intelligence\u003C/strong\u003E scanner package.\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch4\u003EStep 3 - Review Findings\u003C/h4\u003E\n","\u003Cp\u003EAfter the scanners have had a moment to run, navigate back to the \u003Cstrong\u003EFindings\u003C/strong\u003E tab.\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EYou will see a dashboard summarizing violations by severity.\u003C/li\u003E\u003Cli\u003EThe list below details each violation, its severity, and the scanner that found it.\u003C/li\u003E\u003Cli\u003EClicking on any violation will open a details pane with a summary and recommended remediation steps.\u003C/li\u003E\u003Cli\u003EYou can filter the list by severity, status, or scanner package to focus on the most critical issues.\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-4/trust_center_violation_detail_pane.png\" alt=\"assets/vignette-4/trust_center_violation_detail_pane.png\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThis powerful tool gives you a continuous, actionable overview of your Snowflake account's security health.\u003C/p\u003E\n","\u003Ch2\u003EApps &amp; Collaboration\u003C/h2\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/appscollab_header.png\" alt=\"./assets/appscollab_header.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EOverview\u003C/h3\u003E\n","\u003Cp\u003EIn this vignette, we will explore how Snowflake facilitates seamless data collaboration through the Snowflake Marketplace. We will see how easy it is to acquire live, ready-to-query third-party datasets and immediately join them with our own internal data to unlock new insights&mdash;all without the need for traditional ETL pipelines.\u003C/p\u003E\n","\u003Ch3\u003EWhat You Will Learn\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EHow to discover and acquire data from the Snowflake Marketplace.\u003C/li\u003E\u003Cli\u003EHow to instantly query live, shared data.\u003C/li\u003E\u003Cli\u003EHow to join Marketplace data with your own account data to create enriched views.\u003C/li\u003E\u003Cli\u003EHow to leverage third-party Point-of-Interest (POI) data for deeper analysis.\u003C/li\u003E\u003Cli\u003EHow to use Common Table Expressions (CTEs) to structure complex queries.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You Will Build\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EEnriched analytical Views that combine internal sales data with external weather and POI data.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EGet the SQL code and paste it into your SQL File.\u003C/h3\u003E\n","\u003Cp\u003E\u003Cstrong\u003ECopy and paste the SQL code from this \u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-5.sql\"\u003Efile\u003C/a\u003E in a new SQL File to follow along in Snowflake.\u003C/strong\u003E\u003C/p\u003E\n","\u003Ch3\u003EAcquire Data from Snowflake Marketplace\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EOne of our analysts wants to see how weather impacts food truck sales. To do this, they'll use the Snowflake Marketplace to get live weather data from Weather Source, which can then be joined directly with our own sales data. The Marketplace allows us to access live, ready-to-query data from third-party providers without any data duplication or ETL.\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/data-sharing-intro\"\u003EIntroduction to the Snowflake Marketplace\u003C/a\u003E\u003C/strong\u003E: The Marketplace provides a centralized hub to discover and access a wide variety of third-party data, applications, and AI products.\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch4\u003EStep 1 - Set Initial Context\u003C/h4\u003E\n","\u003Cp\u003EFirst, let's set our context to use the \u003Ccode\u003Eaccountadmin\u003C/code\u003E role, which is required to acquire data from the Marketplace.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE DATABASE tb_101;\nUSE ROLE accountadmin;\nUSE WAREHOUSE tb_de_wh;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Acquire Weather Source Data\u003C/h4\u003E\n","\u003Cp\u003EFollow these steps in the Snowsight UI to get the Weather Source data:\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EMake sure you are using the \u003Ccode\u003EACCOUNTADMIN\u003C/code\u003E role.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENavigate to \u003Cstrong\u003EData Products\u003C/strong\u003E &raquo; \u003Cstrong\u003EMarketplace\u003C/strong\u003E from the left-hand navigation menu.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EIn the search bar, enter: \u003Ccode\u003EWeather Source frostbyte\u003C/code\u003E.\n\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-5/weather_source_search.png\" alt=\"assets/vignette-5/weather_source_search.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EClick on the \u003Cstrong\u003EWeather Source LLC: frostbyte\u003C/strong\u003E listing.\n\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-5/weather_source_listing.png\" alt=\"assets/vignette-5/weather_source_listing.png\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EClick the \u003Cstrong\u003EGet\u003C/strong\u003E button.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EClick to expand the Options, then change the \u003Cstrong\u003EDatabase name\u003C/strong\u003E to \u003Ccode\u003EZTS_WEATHERSOURCE\u003C/code\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EGrant access to the \u003Cstrong\u003EPUBLIC\u003C/strong\u003E role.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EClick \u003Cstrong\u003EGet\u003C/strong\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n&lt;!-- TODO add picture with settings --&gt;\n","\u003Cp\u003EThis process makes the Weather Source data instantly available in our account as a new database, ready to be queried.\u003C/p\u003E\n","\u003Ch3\u003EIntegrate Account Data with Shared Data\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EWith the Weather Source data now in our account, our analyst can immediately begin joining it with our existing Tasty Bytes data. There's no need to wait for an ETL job to run.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Explore the Shared Data\u003C/h4\u003E\n","\u003Cp\u003ELet's switch to the \u003Ccode\u003Etb_analyst\u003C/code\u003E role and begin exploring the new weather data. We'll start by getting a list of all distinct US cities available in the share, along with some average weather metrics.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EUSE ROLE tb_analyst;\n\nSELECT \n    DISTINCT city_name,\n    AVG(max_wind_speed_100m_mph) AS avg_wind_speed_mph,\n    AVG(avg_temperature_air_2m_f) AS avg_temp_f,\n    AVG(tot_precipitation_in) AS avg_precipitation_in,\n    MAX(tot_snowfall_in) AS max_snowfall_in\nFROM zts_weathersource.onpoint_id.history_day\nWHERE country = 'US'\nGROUP BY city_name;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 2 - Create an Enriched View\u003C/h4\u003E\n","\u003Cp\u003ENow, let's create a view that joins our raw \u003Ccode\u003Ecountry\u003C/code\u003E data with the historical daily weather data from the Weather Source share. This gives us a unified view of weather metrics for the cities where Tasty Bytes operates.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE VIEW harmonized.daily_weather_v\nCOMMENT = 'Weather Source Daily History filtered to Tasty Bytes supported Cities'\n    AS\nSELECT\n    hd.*,\n    TO_VARCHAR(hd.date_valid_std, 'YYYY-MM') AS yyyy_mm,\n    pc.city_name AS city,\n    c.country AS country_desc\nFROM zts_weathersource.onpoint_id.history_day hd\nJOIN zts_weathersource.onpoint_id.postal_codes pc\n    ON pc.postal_code = hd.postal_code\n    AND pc.country = hd.country\nJOIN raw_pos.country c\n    ON c.iso_country = hd.country\n    AND c.city = hd.city_name;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 3 - Analyze and Visualize Enriched Data\u003C/h4\u003E\n","\u003Cp\u003EUsing our new view, the analyst can query for the average daily temperature in Hamburg, Germany for February 2022. Run the query below, then we'll visualize this as a line chart directly in Snowsight.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT\n    dw.country_desc,\n    dw.city_name,\n    dw.date_valid_std,\n    AVG(dw.avg_temperature_air_2m_f) AS average_temp_f\nFROM harmonized.daily_weather_v dw\nWHERE dw.country_desc = 'Germany'\n    AND dw.city_name = 'Hamburg'\n    AND YEAR(date_valid_std) = 2022\n    AND MONTH(date_valid_std) = 2\nGROUP BY dw.country_desc, dw.city_name, dw.date_valid_std\nORDER BY dw.date_valid_std DESC;\n\u003C/code\u003E\u003C/pre\u003E\n\u003Col\u003E\u003Cli\u003ERun the query above.\u003C/li\u003E\u003Cli\u003EIn the \u003Cstrong\u003EResults\u003C/strong\u003E pane, click \u003Cstrong\u003EChart\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003ESet the \u003Cstrong\u003EChart Type\u003C/strong\u003E to \u003Ccode\u003ELine\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003ESet the \u003Cstrong\u003EX-Axis\u003C/strong\u003E to \u003Ccode\u003EDATE_VALID_STD\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003ESet the \u003Cstrong\u003EY-Axis\u003C/strong\u003E to \u003Ccode\u003EAVERAGE_TEMP_F\u003C/code\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake//vignette-5/line_chart.png\" alt=\"./assets//vignette-5/line_chart.png\"\u003E\u003C/p\u003E\n","\u003Ch4\u003EStep 4 - Create a Sales and Weather View\u003C/h4\u003E\n","\u003Cp\u003ELet's take it a step further and combine our \u003Ccode\u003Eorders_v\u003C/code\u003E view with our new \u003Ccode\u003Edaily_weather_v\u003C/code\u003E to see how sales correlate with weather conditions.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE VIEW analytics.daily_sales_by_weather_v\nCOMMENT = 'Daily Weather Metrics and Orders Data'\nAS\nWITH daily_orders_aggregated AS (\n    SELECT DATE(o.order_ts) AS order_date, o.primary_city, o.country,\n        o.menu_item_name, SUM(o.price) AS total_sales\n    FROM harmonized.orders_v o\n    GROUP BY ALL\n)\nSELECT\n    dw.date_valid_std AS date, dw.city_name, dw.country_desc,\n    ZEROIFNULL(doa.total_sales) AS daily_sales, doa.menu_item_name,\n    ROUND(dw.avg_temperature_air_2m_f, 2) AS avg_temp_fahrenheit,\n    ROUND(dw.tot_precipitation_in, 2) AS avg_precipitation_inches,\n    ROUND(dw.tot_snowdepth_in, 2) AS avg_snowdepth_inches,\n    dw.max_wind_speed_100m_mph AS max_wind_speed_mph\nFROM harmonized.daily_weather_v dw\nLEFT JOIN daily_orders_aggregated doa\n    ON dw.date_valid_std = doa.order_date\n    AND dw.city_name = doa.primary_city\n    AND dw.country_desc = doa.country\nORDER BY date ASC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 5 - Answer a Business Question\u003C/h4\u003E\n","\u003Cp\u003EOur analyst can now answer complex business questions, such as: &quot;How does significant precipitation impact our sales figures in the Seattle market?&quot;\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT * EXCLUDE (city_name, country_desc, avg_snowdepth_inches, max_wind_speed_mph)\nFROM analytics.daily_sales_by_weather_v\nWHERE \n    country_desc = 'United States'\n    AND city_name = 'Seattle'\n    AND avg_precipitation_inches &gt;= 1.0\nORDER BY date ASC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ELet's also visualize the results again in Snowsight, but as a bar chart this time.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003ERun the query above.\u003C/li\u003E\u003Cli\u003EIn the \u003Cstrong\u003EResults\u003C/strong\u003E pane, click \u003Cstrong\u003EChart\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003ESet the \u003Cstrong\u003EChart Type\u003C/strong\u003E to \u003Ccode\u003EBar\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003ESet the \u003Cstrong\u003EX-Axis\u003C/strong\u003E to \u003Ccode\u003EMENU_ITEM_NAME\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003ESet the \u003Cstrong\u003EY-Axis\u003C/strong\u003E to \u003Ccode\u003EDAILY_SALES\u003C/code\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-5/bar_chart.png\" alt=\"./assets/vignette-5/bar_chart.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EExplore Point-of-Interest Data\u003C/h3\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003EOur analyst now wants more insight into the specific locations of our food trucks. We can get Point-of-Interest (POI) data from Safegraph, another provider on the Snowflake Marketplace, to enrich our analysis even further.\u003C/p\u003E\n","\u003Ch4\u003EStep 1 - Acquire Safegraph POI Data\u003C/h4\u003E\n","\u003Cp\u003EFollow the same procedure as before to acquire the Safegraph data from the Marketplace.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003EEnsure you are using the \u003Ccode\u003EACCOUNTADMIN\u003C/code\u003E role.\u003C/li\u003E\u003Cli\u003ENavigate to \u003Cstrong\u003EData Products\u003C/strong\u003E &raquo; \u003Cstrong\u003EMarketplace\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EIn the search bar, enter: \u003Ccode\u003Esafegraph frostbyte\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003ESelect the \u003Cstrong\u003ESafegraph: frostbyte\u003C/strong\u003E listing and click \u003Cstrong\u003EGet\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EClick to expand the Options, then set the \u003Cstrong\u003EDatabase name\u003C/strong\u003E to \u003Ccode\u003EZTS_SAFEGRAPH\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003EGrant access to the \u003Cstrong\u003EPUBLIC\u003C/strong\u003E role.\u003C/li\u003E\u003Cli\u003EClick \u003Cstrong\u003EGet\u003C/strong\u003E.\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch4\u003EStep 2 - Create a POI View\u003C/h4\u003E\n","\u003Cp\u003ELet's create a view that joins our internal \u003Ccode\u003Elocation\u003C/code\u003E data with the Safegraph POI data.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE VIEW harmonized.tastybytes_poi_v\nAS \nSELECT \n    l.location_id, sg.postal_code, sg.country, sg.city, sg.iso_country_code,\n    sg.location_name, sg.top_category, sg.category_tags,\n    sg.includes_parking_lot, sg.open_hours\nFROM raw_pos.location l\nJOIN zts_safegraph.public.frostbyte_tb_safegraph_s sg \n    ON l.location_id = sg.location_id\n    AND l.iso_country_code = sg.iso_country_code;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 3 - Combine POI and Weather Data\u003C/h4\u003E\n","\u003Cp\u003ENow we can combine all three datasets: our internal data, the weather data, and the POI data. Let's find our top 3 windiest truck locations in the US in 2022.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT TOP 3\n    p.location_id, p.city, p.postal_code,\n    AVG(hd.max_wind_speed_100m_mph) AS average_wind_speed\nFROM harmonized.tastybytes_poi_v AS p\nJOIN zts_weathersource.onpoint_id.history_day AS hd\n    ON p.postal_code = hd.postal_code\nWHERE\n    p.country = 'United States'\n    AND YEAR(hd.date_valid_std) = 2022\nGROUP BY p.location_id, p.city, p.postal_code\nORDER BY average_wind_speed DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch4\u003EStep 4 - Analyze Brand Resilience to Weather\u003C/h4\u003E\n","\u003Cp\u003EFinally, let's conduct a more complex analysis to determine brand resilience. We'll use a Common Table Expression (CTE) to first find the windiest locations, and then compare sales on &quot;calm&quot; vs. &quot;windy&quot; days for each truck brand at those locations. This can help inform operational decisions, like offering &quot;Windy Day&quot; promotions for brands that are less resilient.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EWITH TopWindiestLocations AS (\n    SELECT TOP 3\n        p.location_id\n    FROM harmonized.tastybytes_poi_v AS p\n    JOIN zts_weathersource.onpoint_id.history_day AS hd ON p.postal_code = hd.postal_code\n    WHERE p.country = 'United States' AND YEAR(hd.date_valid_std) = 2022\n    GROUP BY p.location_id, p.city, p.postal_code\n    ORDER BY AVG(hd.max_wind_speed_100m_mph) DESC\n)\nSELECT\n    o.truck_brand_name,\n    ROUND(AVG(CASE WHEN hd.max_wind_speed_100m_mph &lt;= 20 THEN o.order_total END), 2) AS avg_sales_calm_days,\n    ZEROIFNULL(ROUND(AVG(CASE WHEN hd.max_wind_speed_100m_mph &gt; 20 THEN o.order_total END), 2)) AS avg_sales_windy_days\nFROM analytics.orders_v AS o\nJOIN zts_weathersource.onpoint_id.history_day AS hd\n    ON o.primary_city = hd.city_name AND DATE(o.order_ts) = hd.date_valid_std\nWHERE o.location_id IN (SELECT location_id FROM TopWindiestLocations)\nGROUP BY o.truck_brand_name\nORDER BY o.truck_brand_name;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003EIntroduction to Streamlit in Snowflake\u003C/h3\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/streamlit-logo.png\" alt=\"./assets/streamlit-logo.png\"\u003E\u003C/p\u003E\n","\u003Cp\u003EStreamlit is an open-source Python library designed for easily creating and sharing web applications for machine learning and data science. It allows for the rapid development and deployment of data-driven apps.\u003C/p\u003E\n","\u003Cp\u003EStreamlit in Snowflake empowers developers to securely build, deploy, and share applications directly within Snowflake. This integration allows you to build apps that process and utilize data stored in Snowflake without the need of moving the data or application code to an external system.\u003C/p\u003E\n\u003Chr\u003E\n","\u003Ch4\u003EStep 1 - Create Streamlit App\u003C/h4\u003E\n","\u003Cp\u003E\u003Cstrong\u003ELet's create our first Streamlit app, an app that will display and chart sales data for each menu item in Japan for February 2022.\u003C/strong\u003E\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EFirst, navigate to \u003Cstrong\u003EProjects\u003C/strong\u003E &raquo; \u003Cstrong\u003EStreamlit\u003C/strong\u003E, then click on the blue '+ Streamlit App' button in the top right to create a new app.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EEnter these values in the 'Create Streamlit App' pop-up:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EApp title: Menu Item Sales\u003C/li\u003E\u003Cli\u003EApp location:\n\u003Cul\u003E\u003Cli\u003EDatabase: tb_101\u003C/li\u003E\u003Cli\u003ESchema: Analytics\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EApp warehouse: tb_dev_wh\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENow click 'Create'.\nWhen the app first loads, you'll see a sample app on the right pane and the app's code in the editor pane to the left.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ESelect all of the code and remove it.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ENext copy + paste this \u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/streamlit/streamlit_app.py\"\u003Ecode\u003C/a\u003E in the blank editor window, then click 'Run' in the top right.\u003C/strong\u003E\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-5/create_streamlit_app.gif\" alt=\"./assets/vignette-5/create_streamlit_app.gif\"\u003E\u003C/p\u003E\n","\u003Ch2\u003EConclusion and Resources\u003C/h2\u003E\n","\u003Ch4\u003EOverview\u003C/h4\u003E\n","\u003Cp\u003ECongratulations! You have successfully completed the entire Tasty Bytes - Zero to Snowflake journey.\u003C/p\u003E\n","\u003Cp\u003EYou have now built and configured warehouses, cloned and transformed data, recovered a dropped table with Time Travel, and built an automated data pipeline for semi-structured data. You've also unlocked insights using AI by generating analysis with simple AISQL functions and accelerating your workflow with Snowflake Copilot. Furthermore, you have implemented a robust governance framework with roles and policies and seamlessly enriched your own data with live datasets from the Snowflake Marketplace.\u003C/p\u003E\n","\u003Cp\u003EIf you would like to re-run this Quickstart, please run the complete \u003Ccode\u003ERESET\u003C/code\u003E script located at the bottom of your SQL file.\u003C/p\u003E\n","\u003Ch4\u003EWhat You Learned\u003C/h4\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EWarehousing and Performance:\u003C/strong\u003E How to create, manage, and scale virtual warehouses, and leverage Snowflake's results cache.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EData Transformation:\u003C/strong\u003E How to use Zero-Copy Cloning for safe development, transform data, and instantly recover from errors using Time Travel and \u003Ccode\u003EUNDROP\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EData Pipelines:\u003C/strong\u003E How to ingest data from external stages, process semi-structured \u003Ccode\u003EVARIANT\u003C/code\u003E data, and build automated ELT pipelines with Dynamic Tables.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003ESnowflake Cortex AI\u003C/strong\u003E How to leverage Snowflake Cortex AI to build a customer analytics platform.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EData Governance:\u003C/strong\u003E How to implement a security framework using Role-Based Access Control, automated PII classification, tag-based Data Masking, and Row Access Policies.\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003EData Collaboration:\u003C/strong\u003E How to discover and acquire live, third-party datasets from the Snowflake Marketplace and seamlessly join them with your own data to generate new insights.\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch4\u003EResources\u003C/h4\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/warehouses-overview\"\u003EVirtual Warehouses &amp; Settings\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/resource-monitors\"\u003EResource Monitors\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/budgets\"\u003EBudgets\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/ui-snowsight-universal-search\"\u003EUniversal Search\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/sql-reference/sql/copy-into-table\"\u003EIngestion from External Stage\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/sql-reference/data-types-semistructured\"\u003ESemi-Structured Data\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/dynamic-tables-about\"\u003EDynamic Tables\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/security-access-control-overview\"\u003ERoles &amp; Access Control\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/classify-auto\"\u003ETag-Based Classification\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/security-column-intro\"\u003EColumn Level Security with Masking Policies\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/security-row-intro\"\u003ERow Level Security with Row Access Policies\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/data-quality-intro\"\u003EData Metric Functions\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/trust-center/overview\"\u003ETrust Center\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/data-sharing-intro\"\u003EData Sharing\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-playground\"\u003ESnowflake Cortex Playground\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/aisql\"\u003EAI SQL Functions in Snowflake Cortex\u003C/a\u003E\u003C/li\u003E\u003C/ul\u003E\n&lt;!-- - [Snowflake Copilot](https://docs.snowflake.com/en/user-guide/snowflake-copilot) --&gt;\n\u003Cul\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-search/cortex-search-overview\"\u003ESnowflake Cortex Search Overview\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst\"\u003ESnowflake Cortex Analyst\u003C/a\u003E\u003C/li\u003E\u003C/ul\u003E"],"description":"","title":"Zero to Snowflake","isDeveloperGuidesPage":false,":type":"snowflake-site/components/contentfragment","elements":{"quickstartArticleBody":{"dataType":"string","title":"Quickstart Article Body","value":"## Overview\n\n![./assets/zts_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/zts_header.png)\n\n### Overview\n\nWelcome to the Zero to Snowflake Quickstart! This guide is a consolidated journey through key areas of the Snowflake AI Data Cloud. You will start with the fundamentals of warehousing and data transformation, build an automated data pipeline, then see how you can experiment with LLMs using the Cortex Playground to compare different models for summarizing text, use AISQL Functions to instantly analyze customer review sentiment with a simple SQL command, and harness Cortex Search for intelligent text discovery, and utilize Cortex Analyst for conversational business intelligence. Finally, you will learn to secure your data with powerful governance controls and enrich your analysis through seamless data collaboration.\n\nWe'll apply these concepts using a sample dataset from our fictitious food truck, Tasty Bytes, to improve and streamline their data operations. We'll explore this dataset through several workload-specific scenarios, demonstrating the benefits Snowflake provides to businesses.\n\n### Who is Tasty Bytes?\n\n![./assets/whoistb.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/whoistb.png)\n\nOur mission is to provide unique, high-quality food options in a convenient and cost-effective manner, emphasizing the use of fresh ingredients from local vendors. Their vision is to become the largest food truck network in the world with a zero carbon footprint.\n\n### Prerequisites\n\n - A Supported Snowflake [Browser](https://docs.snowflake.com/en/user-guide/setup?_fsi=6tNBra0z&_fsi=6tNBra0z#browser-requirements)\n - An Enterprise or Business Critical Snowflake Account\n - If you do not have a Snowflake Account, please [sign up for a Free 30 Day Trial Account](https://signup.snowflake.com/?utm_source=snowflake-devrel&utm_medium=developer-guides&utm_cta=developer-guides&_fsi=6tNBra0z&_fsi=6tNBra0z). When signing up, please make sure to select  Enterprise edition. You are welcome to choose any [Snowflake Cloud/Region](https://docs.snowflake.com/en/user-guide/intro-regions?_fsi=6tNBra0z&_fsi=6tNBra0z).\n - After registering, you will receive an email with an activation link and your Snowflake Account URL.\n\n### What You Will Learn\n\n  - **Vignette 1: Getting Started with Snowflake:** The fundamentals of Snowflake warehouses, caching, cloning, and Time Travel.\n  - **Vignette 2: Simple Data Pipelines:** How to ingest and transform semi-structured data using Dynamic Tables.\n  - **Vignette 3: Snowflake Cortex AI:** How to leverage Snowflake's comprehensive AI capabilities for experimentation, scalable analysis, AI-assisted development, and conversational business intelligence.\n  - **Vignette 4: Governance with Horizon:** How to protect your data with roles, classification, masking, and row-access policies.\n  - **Vignette 5: Apps & Collaboration:** How to leverage the Snowflake Marketplace to enrich your internal data with third-party datasets.\n\n### What You Will Build\n\n  - A comprehensive understanding of the core Snowflake platform.\n  - Configured Virtual Warehouses.\n  - An automated ELT pipeline with Dynamic Tables.\n  - A complete intelligence customer analytics platform leveraging Snowflake AI.\n  - A robust data governance framework with roles and policies.\n  - Enriched analytical views combining first- and third-party data.\n\n## Setup\n\n### **Overview**\n\nIn this guide, we will use \u003Ca href=\"https://app.snowflake.com/_deeplink/#/workspaces?utm_source=snowflake-devrel&utm_medium=developer-guides&utm_content=zero-to-snowflake&utm_cta=developer-guides-deeplink\" class=\"_deeplink\"\u003ESnowflake Workspaces\u003C/a\u003E to organize, edit, and run all the SQL scripts required for this course. We will create a dedicated SQL file for the setup and each vignette. This will keep our code organized and easy to manage.\n\nLet's walk through how to create your first SQL file, add the necessary setup code, and run it.\n\n### **Step 1 - Create Your Setup SQL File**\n\nFirst, we need a place to put our setup script.\n\n1. **Navigate to \u003Ca href=\"https://app.snowflake.com/_deeplink/#/workspaces?utm_source=snowflake-devrel&utm_medium=developer-guides&utm_content=zero-to-snowflake&utm_cta=developer-guides-deeplink\" class=\"_deeplink\"\u003EWorkspaces\u003C/a\u003E:** In the left-hand navigation menu of the Snowflake UI, click on **Projects** » **\u003Ca href=\"https://app.snowflake.com/_deeplink/#/workspaces?utm_source=snowflake-devrel&utm_medium=developer-guides&utm_content=zero-to-snowflake-deeplink\" class=\"_deeplink\"\u003EWorkspaces\u003C/a\u003E**. This is the central hub for all your SQL files.  \n2. **Create a New SQL File:** Find and click the **+ Add New** button in the top-left corner of the \u003Ca href=\"https://app.snowflake.com/_deeplink/#/workspaces?utm_source=snowflake-devrel&utm_medium=developer-guides&utm_content=zero-to-snowflake&utm_cta=developer-guides-deeplink\" class=\"_deeplink\"\u003EWorkspaces\u003C/a\u003E area, then select **SQL File**. This will generate a new, blank SQL file.  \n3. **Rename the SQL File:** Your new SQL file will have a name based on the timestamp it was created. Give it a descriptive name like **Zero To Snowflake - Setup**.\n\n### **Step 2 - Add and Run the Setup Script**\n\nNow that you have your SQL file, it's time to add the setup SQL and execute it.\n\n1. **Copy the SQL Code:** Click the link for the **[setup file](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/setup.sql)** and copy it to your clipboard.  \n2. **Paste into your SQL File:** Return to your Zero To Snowflake Setup SQL file in Snowflake and paste the entire script into the editor.  \n3. **Run the Script:** To execute all the commands in the SQL file sequentially, click the **\"Run All\"** button located at the top-left of the editor. This will perform all the necessary setup actions, such as creating roles, schemas, and warehouses that you will need for the upcoming vignettes.\n\n![./assets/create_a_worksheet.gif](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/create_a_worksheet.gif)\n\n### **Looking Ahead**\n\nThe process you just completed for creating a new SQL file is the exact same workflow you will use for every subsequent vignette in this course.\n\nFor each new vignette, you will:\n\n1. Create a **new** SQL file.  \n2. Give it a descriptive name (e.g., Vignette 1 - Getting Started with Snowflake).  \n3. Copy and paste the SQL script for that specific vignette.\n4. Each SQL file has all of the necessary instructions and commands to follow along.\n\n\u003C!-- end list --\u003E\n\n## Get Started with Snowflake\n![./assets/getting_started_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/getting_started_header.png)\n\n### Overview\n\nWithin this Vignette, we will learn about core Snowflake concepts by exploring Virtual Warehouses, using the query results cache, performing basic data transformations, leveraging data recovery with Time Travel, and monitoring our account with Resource Monitors and Budgets.\n\n### What You Will Learn\n- How to create, configure, and scale a Virtual Warehouse.\n- How to leverage the Query Result Cache.\n- How to use Zero-Copy Cloning for development.\n- How to transform and clean data.\n- How to instantly recover a dropped table using UNDROP.\n- How to create and apply a Resource Monitor.\n- How to create a Budget to monitor costs.\n- How to use Universal Search to find objects and information.\n\n### What You Will Build\n- A Snowflake Virtual Warehouse\n- A development copy of a table using Zero-Copy Clone\n- A Resource Monitor\n- A Budget\n\n### Get the SQL code and paste it into your SQL File.\n\n**Copy and paste the SQL code from this [file](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-1.sql) in a new SQL File to follow along in Snowflake. Note that once you've reached the end of the SQL File you can skip to Step 10 - Simple Data Pipeline**\n\n### Virtual Warehouses and Settings\n\n\n#### Overview\n\nVirtual Warehouses are the dynamic, scalable, and cost-effective computing power that lets you perform analysis on your Snowflake data. Their purpose is to handle all your data processing needs without you having to worry about the underlying technical details.\n\n#### Step 1 - Setting Context\n\nFirst, lets set our session context. To run the queries, highlight the three queries at the top of your SQL file and click the \"► Run\" button.\n\n```sql\nALTER SESSION SET query_tag = '{\"origin\":\"sf_sit-is\",\"name\":\"tb_zts,\"version\":{\"major\":1, \"minor\":1},\"attributes\":{\"is_quickstart\":1, \"source\":\"tastybytes\", \"vignette\": \"getting_started_with_snowflake\"}}';\n\nUSE DATABASE tb_101;\nUSE ROLE accountadmin;\n```\n\n#### Step 2 - Creating a Warehouse\n\nLet's create our first warehouse! This command creates a new X-Small warehouse that will initially be suspended.\n\n```sql\nCREATE OR REPLACE WAREHOUSE my_wh\n    COMMENT = 'My TastyBytes warehouse'\n    WAREHOUSE_TYPE = 'standard'\n    WAREHOUSE_SIZE = 'xsmall'\n    MIN_CLUSTER_COUNT = 1\n    MAX_CLUSTER_COUNT = 2\n    SCALING_POLICY = 'standard'\n    AUTO_SUSPEND = 60\n    INITIALLY_SUSPENDED = true\n    AUTO_RESUME = false;\n```\n\n\u003E **Virtual Warehouses**: A virtual warehouse, often referred to simply as a “warehouse”, is a cluster of compute resources in Snowflake. Warehouses are required for queries, DML operations, and data loading. For more information, see the [Warehouse Overview](https://docs.snowflake.com/en/user-guide/warehouses-overview).\n\n#### Step 3 - Using and Resuming a Warehouse\n\nNow that we have a warehouse, we must set it as the active warehouse for our session. Execute the next statement.\n\n```sql\nUSE WAREHOUSE my_wh;\n```\n\nIf you try to run the query below, it will fail, because the warehouse is suspended and does not have `AUTO_RESUME` enabled. \n```sql\nSELECT * FROM raw_pos.truck_details;\n```\n\nLet's resume it and set it to auto-resume in the future.\n```sql\nALTER WAREHOUSE my_wh RESUME;\nALTER WAREHOUSE my_wh SET AUTO_RESUME = TRUE;\n```\n\nNow, try the query again. It should execute successfully.\n\n```sql\nSELECT * FROM raw_pos.truck_details;\n```\n\n#### Step 4 - Scaling a Warehouse\n\nWarehouses in Snowflake are designed for elasticity. We can scale our warehouse up on the fly to handle a more intensive workload. Let's scale our warehouse to an X-Large.\n\n```sql\nALTER WAREHOUSE my_wh SET warehouse_size = 'XLarge';\n```\n\nWith our larger warehouse, let's run a query to calculate total sales per truck brand.\n\n```sql\nSELECT\n    o.truck_brand_name,\n    COUNT(DISTINCT o.order_id) AS order_count,\n    SUM(o.price) AS total_sales\nFROM analytics.orders_v o\nGROUP BY o.truck_brand_name\nORDER BY total_sales DESC;\n```\n\n### Query Result Cache\n\n\n#### Overview\n\nThis is a great place to demonstrate another powerful feature in Snowflake: the Query Result Cache. When you first ran the 'sales per truck' query, it likely took several seconds. If you run the exact same query again, the result will be nearly instantaneous. This is because the query results were cached in Snowflake's Query Result Cache.\n\n#### Step 1 - Re-running a Query\n\nRun the same 'sales per truck' query from the previous step. Note the execution time in the query details pane. It should be much faster.\n\n```sql\nSELECT\n    o.truck_brand_name,\n    COUNT(DISTINCT o.order_id) AS order_count,\n    SUM(o.price) AS total_sales\nFROM analytics.orders_v o\nGROUP BY o.truck_brand_name\nORDER BY total_sales DESC;\n```\n![assets/vignette-1/query_result_cache.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/query_result_cache.png)\n\n\u003E **Query Result Cache**: Results are retained for any query for 24 hours. Hitting the result cache requires almost no compute resources, making it ideal for frequently run reports or dashboards. The cache resides in the Cloud Services Layer, making it globally accessible to all users and warehouses in the account. For more information, please visit the [documentation on using persisted query results](https://docs.snowflake.com/en/user-guide/querying-persisted-results).\n\n#### Step 2 - Scaling Down\n\nWe will now be working with smaller datasets, so we can scale our warehouse back down to an X-Small to conserve credits.\n\n```sql\nALTER WAREHOUSE my_wh SET warehouse_size = 'XSmall';\n```\n\n### Basic Transformation Techniques\n\n\n#### Overview\n\nIn this section, we will see some basic transformation techniques to clean our data and use Zero-Copy Cloning to create development environments. Our goal is to analyze the manufacturers of our food trucks, but this data is currently nested inside a `VARIANT` column.\n\n#### Step 1 - Creating a Development Table with Zero-Copy Clone\n\nFirst, let's take a look at the `truck_build` column. \n```sql\nSELECT truck_build FROM raw_pos.truck_details;\n```\nThis table contains data about the make, model and year of each truck, but it is nested, or embedded in a special data type called a VARIANT. We can perform operations on this column to extract these values, but first we'll create a development copy of the table.\n\nLet's create a development copy of our `truck_details` table. Snowflake's Zero-Copy Cloning lets us create an identical, fully independent copy of the table instantly, without using additional storage.\n\n```sql\nCREATE OR REPLACE TABLE raw_pos.truck_dev CLONE raw_pos.truck_details;\n```\n\n\u003E **[Zero-Copy Cloning](https://docs.snowflake.com/en/user-guide/object-clone)**: Cloning creates a copy of a database object without duplicating the storage. Changes made to either the original or the clone are stored as new micro-partitions, leaving the other object untouched.\n\n#### Step 2 - Adding New Columns and Transforming Data\n\nNow that we have a safe development table, let's add columns for `year`, `make`, and `model`. Then, we will extract the data from the `truck_build` `VARIANT` column and populate our new columns.\n\n```sql\n-- Add new columns\nALTER TABLE raw_pos.truck_dev ADD COLUMN IF NOT EXISTS year NUMBER;\nALTER TABLE raw_pos.truck_dev ADD COLUMN IF NOT EXISTS make VARCHAR(255);\nALTER TABLE raw_pos.truck_dev ADD COLUMN IF NOT EXISTS model VARCHAR(255);\n\n-- Extract and update data\nUPDATE raw_pos.truck_dev\nSET \n    year = truck_build:year::NUMBER,\n    make = truck_build:make::VARCHAR,\n    model = truck_build:model::VARCHAR;\n```\n\n#### Step 3 - Cleaning the Data\n\nLet's run a query to see the distribution of truck makes.\n\n```sql\nSELECT \n    make,\n    COUNT(*) AS count\nFROM raw_pos.truck_dev\nGROUP BY make\nORDER BY make ASC;\n```\n\nDid you notice anything odd about the results from the last query? We can see a data quality issue: 'Ford' and 'Ford_' are being treated as separate manufacturers. Let's easily fix this with a simple `UPDATE` statement.\n\n```sql\nUPDATE raw_pos.truck_dev\n    SET make = 'Ford'\n    WHERE make = 'Ford_';\n```\nHere we're saying we want to set the row's make value to `Ford` wherever it is `Ford_`. This will ensure none of the Ford makes have the underscore, giving us a unified make count.\n\n#### Step 4 - Promoting to Production with SWAP\n\nOur development table is now cleaned and correctly formatted. We can instantly promote it to be the new production table using the `SWAP WITH` command. This atomically swaps the two tables.\n\n```sql\nALTER TABLE raw_pos.truck_details SWAP WITH raw_pos.truck_dev;\n```\n\n#### Step 5 - Cleanup\n\nNow that the swap is complete, we can drop the unnecessary `truck_build` column from our new production table. We also need to drop the old production table, which is now named `truck_dev`. But for the sake of the next lesson, we will \"accidentally\" drop the main table.\n\n```sql\nALTER TABLE raw_pos.truck_details DROP COLUMN truck_build;\n\n-- Accidentally drop the production table!\nDROP TABLE raw_pos.truck_details;\n```\n\n#### Step 6 - Data Recovery with UNDROP\n\nOh no! We accidentally dropped the production `truck_details` table. Luckily, Snowflake's Time Travel feature allows us to recover it instantly. The `UNDROP` command restores dropped objects.\n\n#### Step 7 - Verify the Drop\n\nIf you run a `DESCRIBE` command on the table, you will get an error stating it does not exist.\n\n```sql\nDESCRIBE TABLE raw_pos.truck_details;\n```\n\n#### Step 8 - Restore the Table with UNDROP\n\nLet's restore the `truck_details` table to the exact state it was in before being dropped.\n\n```sql\nUNDROP TABLE raw_pos.truck_details;\n```\n\n\u003E **[Time Travel & UNDROP](https://docs.snowflake.com/en/user-guide/data-time-travel)**: Snowflake Time Travel enables accessing historical data at any point within a defined period. This allows for restoring data that has been modified or deleted. `UNDROP` is a feature of Time Travel that makes recovery from accidental drops trivial.\n\n#### Step 9 - Verify Restoration and Clean Up\n\nVerify the table was successfully restored by selecting from it. Then, we can safely drop the actual development table, `truck_dev`.\n\n```sql\n-- Verify the table was restored\nSELECT * from raw_pos.truck_details;\n\n-- Now drop the real truck_dev table\nDROP TABLE raw_pos.truck_dev;\n```\n\n### Resource Monitors\n\n\n#### Overview\n\nMonitoring compute usage is critical. Snowflake provides Resource Monitors to track warehouse credit usage. You can define credit quotas and trigger actions (like notifications or suspension) when thresholds are reached.\n\n#### Step 1 - Creating a Resource Monitor\n\nLet's create a resource monitor for `my_wh`. This monitor has a monthly quota of 100 credits and will send notifications at 75% and suspend the warehouse at 90% and 100% of the quota. First, ensure your role is `accountadmin`.\n\n```sql\nUSE ROLE accountadmin;\n\nCREATE OR REPLACE RESOURCE MONITOR my_resource_monitor\n    WITH CREDIT_QUOTA = 100\n    FREQUENCY = MONTHLY\n    START_TIMESTAMP = IMMEDIATELY\n    TRIGGERS ON 75 PERCENT DO NOTIFY\n             ON 90 PERCENT DO SUSPEND\n             ON 100 PERCENT DO SUSPEND_IMMEDIATE;\n```\n\n\u003C!-- ![assets/create_rm.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/create_rm.png) --\u003E\n\n#### Step 2 - Applying the Resource Monitor\n\nWith the monitor created, apply it to `my_wh`.\n\n```sql\nALTER WAREHOUSE my_wh \n    SET RESOURCE_MONITOR = my_resource_monitor;\n```\n\n\u003E For more information on what each configuration handles, please visit the documentation for [Working with Resource Monitors](https://docs.snowflake.com/en/user-guide/resource-monitors).\n\n### Create a Budget\n\n\n#### Overview\n\nWhile Resource Monitors track warehouse usage, Budgets provide a more flexible approach to managing all Snowflake costs. Budgets can track spend on any Snowflake object and notify users when a dollar amount threshold is reached.\n\n#### Step 1 - Creating a Budget via SQL\n\nLet's first create the budget object in SQL.\n\n```sql\nCREATE OR REPLACE SNOWFLAKE.CORE.BUDGET my_budget()\n    COMMENT = 'My Tasty Bytes Budget';\n```\n\n#### Step 2 - Budget Page in Snowsight\nLet's take a look at the Budget Page on Snowsight.\n\nNavigate to **Admin** » **Cost Management** » **Budgets**.\n\n![assets/vignette-1/budget_page.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/budget_page.png)\n\n**Key:**\n1. Warehouse Context\n2. Cost Management Navigation\n3. Time Period Filter\n4. Key Metrics Summary\n5. Spend and Forecast Trend Chart\n6. Budget Details\n\n#### Step 3 - Configuring the Budget in Snowsight\n\nConfiguring a budget is done through the Snowsight UI.\n\n1.  Make sure your account role is set to `ACCOUNTADMIN`. You can change this in the bottom left corner.\n2.  Click on the **MY_BUDGET** budget we created.\n3.  Click **Budget Details** to open the Budget details panel, then click **Edit** in the Budget Details panel on the right.\n4.  Set the **Spending Limit** to `100`.\n5.  Enter a verified notification email address.\n6.  Click **+ Tags & Resources** and add the **TB_101.ANALYTICS** schema and the **TB_DE_WH** warehouse to be monitored.\n7.  Click **Save Changes**.\n![assets/vignette-1/edit_budget.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/edit_budget.png)\n\n\u003E For a detailed guide on Budgets, please see the [Snowflake Budgets Documentation](https://docs.snowflake.com/en/user-guide/budgets).\n\n### Universal Search\n\n\n#### Overview\n\nUniversal Search allows you to easily find any object in your account, plus explore data products in the Marketplace, relevant Snowflake Documentation, and Community Knowledge Base articles.\n\n#### Step 1 - Searching for an Object\n\nLet's try it now.\n\n1.  Click **Search** in the Navigation Menu on the left.\n2.  Enter `truck` into the search bar.\n3.  Observe the results. You will see categories of objects on your account, such as tables and views, as well as relevant documentation.\n\n![assets/vignette-1/universal_search_truck.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/universal_search_truck.png)\n\n#### Step 2 - Using Natural Language Search\n\nYou can also use natural language. For example, search for: `Which truck franchise has the most loyal customer base?`\nUniversal search will return relevant tables and views, even highlighting columns that might help answer your question, providing an excellent starting point for analysis.\n\n![assets/vignette-1/universal_search_natural_language_query.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-1/universal_search_natural_language_query.png)\n\n## Simple Data Pipeline\n![./assets/data_pipeline_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/data_pipeline_header.png)\n\n### Overview\n\nWithin this vignette, we will learn how to build a simple, automated data pipeline in Snowflake. We will start by ingesting raw, semi-structured data from an external stage, and then use the power of Snowflake's Dynamic Tables to transform and enrich that data, creating a pipeline that automatically stays up-to-date as new data arrives.\n\n### What You Will Learn\n- How to ingest data from an external S3 stage.\n- How to query and transform semi-structured VARIANT data.\n- How to use the FLATTEN function to parse arrays.\n- How to create and chain Dynamic Tables.\n- How an ELT pipeline automatically processes new data.\n- How to visualize a pipeline using the Directed Acyclic Graph (DAG).\n\n### What You Will Build\n- An external Stage for data ingestion.\n- A staging table for raw data.\n- A multi-step data pipeline using three chained Dynamic Tables.\n\n### Get the SQL and paste it into your SQL File.\n\n**Copy and paste the SQL from this [file](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-2.sql) in a new SQL File to follow along in Snowflake. Note that once you've reached the end of the SQL File you can skip to Step 16 - Snowflake Cortex AI.**\n\n### External Stage Ingestion\n\n\n#### Overview\n\nOur raw menu data currently sits in an Amazon S3 bucket as CSV files. To begin our pipeline, we first need to ingest this data into Snowflake. We will do this by creating a Stage to point to the S3 bucket and then using the `COPY` command to load the data into a staging table.\n\n#### Step 1 - Set Context\n\nFirst, let's set our session context to use the correct database, role, and warehouse. Execute the first few queries in your SQL file.\n\n```sql\nALTER SESSION SET query_tag = '{\"origin\":\"sf_sit-is\",\"name\":\"tb_zts\",\"version\":{\"major\":1, \"minor\":1},\"attributes\":{\"is_quickstart\":1, \"source\":\"tastybytes\", \"vignette\": \"data_pipeline\"}}';\n\nUSE DATABASE tb_101;\nUSE ROLE tb_data_engineer;\nUSE WAREHOUSE tb_de_wh;\n```\n\n#### Step 2 - Create Stage and Staging Table\n\nA Stage is a Snowflake object that specifies an external location where data files are stored. We'll create a stage that points to our public S3 bucket. Then, we'll create the table that will hold this raw data.\n\n```sql\n-- Create the menu stage\nCREATE OR REPLACE STAGE raw_pos.menu_stage\nCOMMENT = 'Stage for menu data'\nURL = 's3://sfquickstarts/frostbyte_tastybytes/raw_pos/menu/'\nFILE_FORMAT = public.csv_ff;\n\nCREATE OR REPLACE TABLE raw_pos.menu_staging\n(\n    menu_id NUMBER(19,0),\n    menu_type_id NUMBER(38,0),\n    menu_type VARCHAR(16777216),\n    truck_brand_name VARCHAR(16777216),\n    menu_item_id NUMBER(38,0),\n    menu_item_name VARCHAR(16777216),\n    item_category VARCHAR(16777216),\n    item_subcategory VARCHAR(16777216),\n    cost_of_goods_usd NUMBER(38,4),\n    sale_price_usd NUMBER(38,4),\n    menu_item_health_metrics_obj VARIANT\n);\n```\n\n#### Step 3 - Copy Data into Staging Table\n\nWith the stage and table in place, let's load the data from the stage into our `menu_staging` table using the `COPY INTO` command.\n\n```sql\nCOPY INTO raw_pos.menu_staging\nFROM @raw_pos.menu_stage;\n```\n\n\u003E \n\u003E **[COPY INTO TABLE](https://docs.snowflake.com/en/sql-reference/sql/copy-into-table)**: This powerful command loads data from a staged file into a Snowflake table. It is the primary method for bulk data ingestion.\n\n### Semi-Structured Data\n\n\n#### Overview\n\nSnowflake excels at handling semi-structured data like JSON using its native `VARIANT` data type. One of the columns we ingested, `menu_item_health_metrics_obj`, contains JSON. Let's explore how to query it.\n\n#### Step 1 - Querying VARIANT Data\n\nLet's look at the raw JSON. Notice it contains nested objects and arrays.\n\n```sql\nSELECT menu_item_health_metrics_obj FROM raw_pos.menu_staging;\n```\n\nWe can use special syntax to navigate the JSON structure. The colon (`:`) accesses keys by name, and square brackets (`[]`) access array elements by index. We can also cast results to explicit data types using the `CAST` function or the double-colon shorthand (`::`).\n\n```sql\nSELECT\n    menu_item_name,\n    CAST(menu_item_health_metrics_obj:menu_item_id AS INTEGER) AS menu_item_id, -- Casting using 'AS'\n    menu_item_health_metrics_obj:menu_item_health_metrics[0]:ingredients::ARRAY AS ingredients -- Casting using double colon (::) syntax\nFROM raw_pos.menu_staging;\n```\n\n#### Step 2 - Parsing Arrays with FLATTEN\n\nThe `FLATTEN` function is a powerful tool for un-nesting arrays. It produces a new row for each element in an array. Let's use it to create a list of every ingredient for every menu item.\n\n```sql\nSELECT\n    i.value::STRING AS ingredient_name,\n    m.menu_item_health_metrics_obj:menu_item_id::INTEGER AS menu_item_id\nFROM\n    raw_pos.menu_staging m,\n    LATERAL FLATTEN(INPUT =\u003E m.menu_item_health_metrics_obj:menu_item_health_metrics[0]:ingredients::ARRAY) i;\n```\n\n\u003E \n\u003E **[Semi-Structured Data Types](https://docs.snowflake.com/en/sql-reference/data-types-semistructured)**: Snowflake's VARIANT, OBJECT, and ARRAY types allow you to store and query semi-structured data directly, without needing to define a rigid schema upfront.\n\n### Dynamic Tables\n\n\n#### Overview\n\nOur franchises are constantly adding new menu items. We need a way to process this new data automatically. For this, we can use Dynamic Tables, a powerful tool designed to simplify data transformation pipelines by declaratively defining the result of a query and letting Snowflake handle the refreshes.\n\n#### Step 1 - Creating the First Dynamic Table\n\nWe'll start by creating a dynamic table that extracts all unique ingredients from our staging table. We set a `LAG` of '1 minute', which tells Snowflake the maximum amount of time this table's data can be behind the source data.\n\n```sql\nCREATE OR REPLACE DYNAMIC TABLE harmonized.ingredient\n    LAG = '1 minute'\n    WAREHOUSE = 'TB_DE_WH'\nAS\n    SELECT\n    ingredient_name,\n    menu_ids\nFROM (\n    SELECT DISTINCT\n        i.value::STRING AS ingredient_name, \n        ARRAY_AGG(m.menu_item_id) AS menu_ids\n    FROM\n        raw_pos.menu_staging m,\n        LATERAL FLATTEN(INPUT =\u003E menu_item_health_metrics_obj:menu_item_health_metrics[0]:ingredients::ARRAY) i\n    GROUP BY i.value::STRING\n);\n```\n\n\u003E \n\u003E **[Dynamic Tables](https://docs.snowflake.com/en/user-guide/dynamic-tables-about)**: Dynamic Tables automatically refresh as their underlying source data changes, simplifying ELT pipelines and ensuring data freshness without manual intervention or complex scheduling.\n\n#### Step 2 - Testing the Automatic Refresh\n\nLet's see the automation in action. One of our trucks has added a Banh Mi sandwich, which contains new ingredients for French Baguette and Pickled Daikon. Let's insert this new menu item into our staging table.\n\n```sql\nINSERT INTO raw_pos.menu_staging \nSELECT \n    10101, 15, 'Sandwiches', 'Better Off Bread', 157, 'Banh Mi', 'Main', 'Cold Option', 9.0, 12.0,\n    PARSE_JSON('{\"menu_item_health_metrics\": [{\"ingredients\": [\"French Baguette\",\"Mayonnaise\",\"Pickled Daikon\",\"Cucumber\",\"Pork Belly\"],\"is_dairy_free_flag\": \"N\",\"is_gluten_free_flag\": \"N\",\"is_healthy_flag\": \"Y\",\"is_nut_free_flag\": \"Y\"}],\"menu_item_id\": 157}');\n```\n\nNow, query the `harmonized.ingredient` table. Within a minute, you should see the new ingredients appear automatically.\n\n```sql\n-- You may need to wait up to 1 minute and re-run this query\nSELECT * FROM harmonized.ingredient \nWHERE ingredient_name IN ('French Baguette', 'Pickled Daikon');\n```\n\n### Build Out the Pipeline\n\n\n#### Overview\n\nNow we can build a multi-step pipeline by creating more dynamic tables that read from other dynamic tables. This creates a chain, or a Directed Acyclic Graph (DAG), where updates automatically flow from the source to the final output.\n\n#### Step 1 - Creating a Lookup Table\n\nLet's create a lookup table that maps ingredients to the menu items they are used in. This dynamic table reads from our `harmonized.ingredient` dynamic table.\n\n```sql\nCREATE OR REPLACE DYNAMIC TABLE harmonized.ingredient_to_menu_lookup\n    LAG = '1 minute'\n    WAREHOUSE = 'TB_DE_WH'   \nAS\nSELECT\n    i.ingredient_name,\n    m.menu_item_health_metrics_obj:menu_item_id::INTEGER AS menu_item_id\nFROM\n    raw_pos.menu_staging m,\n    LATERAL FLATTEN(INPUT =\u003E m.menu_item_health_metrics_obj:menu_item_health_metrics[0]:ingredients) f\nJOIN harmonized.ingredient i ON f.value::STRING = i.ingredient_name;\n```\n\n#### Step 2 - Adding Transactional Data\n\nLet's simulate an order of two Banh Mi sandwiches by inserting records into our order tables.\n\n```sql\nINSERT INTO raw_pos.order_header\nSELECT \n    459520441, 15, 1030, 101565, null, 200322900,\n    TO_TIMESTAMP_NTZ('08:00:00', 'hh:mi:ss'),\n    TO_TIMESTAMP_NTZ('14:00:00', 'hh:mi:ss'),\n    null, TO_TIMESTAMP_NTZ('2022-01-27 08:21:08.000'),\n    null, 'USD', 14.00, null, null, 14.00;\n    \nINSERT INTO raw_pos.order_detail\nSELECT\n    904745311, 459520441, 157, null, 0, 2, 14.00, 28.00, null;\n```\n\n#### Step 3 - Creating the Final Pipeline Table\n\nFinally, let's create our final dynamic table. This one joins our order data with our ingredient lookup tables to create a summary of monthly ingredient usage per truck. This table depends on the other dynamic tables, completing our pipeline.\n\n```sql\nCREATE OR REPLACE DYNAMIC TABLE harmonized.ingredient_usage_by_truck \n    LAG = '2 minute'\n    WAREHOUSE = 'TB_DE_WH'  \n    AS \n    SELECT\n        oh.truck_id,\n        EXTRACT(YEAR FROM oh.order_ts) AS order_year,\n        MONTH(oh.order_ts) AS order_month,\n        i.ingredient_name,\n        SUM(od.quantity) AS total_ingredients_used\n    FROM\n        raw_pos.order_detail od\n        JOIN raw_pos.order_header oh ON od.order_id = oh.order_id\n        JOIN harmonized.ingredient_to_menu_lookup iml ON od.menu_item_id = iml.menu_item_id\n        JOIN harmonized.ingredient i ON iml.ingredient_name = i.ingredient_name\n        JOIN raw_pos.location l ON l.location_id = oh.location_id\n    WHERE l.country = 'United States'\n    GROUP BY\n        oh.truck_id,\n        order_year,\n        order_month,\n        i.ingredient_name\n    ORDER BY\n        oh.truck_id,\n        total_ingredients_used DESC;\n```\n\n#### Step 4 - Querying the Final Output\n\nNow, let's query the final table in our pipeline. After a few minutes for the refreshes to complete, you will see the ingredient usage for two Banh Mis from the order we inserted in a previous step. The entire pipeline updated automatically.\n\n```sql\n-- You may need to wait up to 2 minutes and re-run this query\nSELECT\n    truck_id,\n    ingredient_name,\n    SUM(total_ingredients_used) AS total_ingredients_used\nFROM\n    harmonized.ingredient_usage_by_truck\nWHERE\n    order_month = 1\n    AND truck_id = 15\nGROUP BY truck_id, ingredient_name\nORDER BY total_ingredients_used DESC;\n```\n\n### Visualize the Pipeline\n\n\n#### Overview\n\nFinally, let's visualize our pipeline's Directed Acyclic Graph, or DAG. The DAG shows how our data flows through the tables, and it can be used to monitor the health and lag of our pipeline.\n\n#### Step 1 - Accessing the Graph View\n\nTo access the DAG in Snowsight:\n\n1.  Navigate to **Data** » **Database**.\n2.  In the database object explorer, expand your database **TB_101** and the schema **HARMONIZED**.\n3.  Click on **Dynamic Tables**.\n4.  Select any of the dynamic tables you created (e.g., `INGREDIENT_USAGE_BY_TRUCK`).\n5.  Click on the **Graph** tab in the main window.\n\nYou will now see a visualization of your pipeline, showing how the base tables flow into your dynamic tables.\n\n![assets/vignette-2/dag.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-2/dag.png)\n\n## Snowflake Cortex AI\n\n\n### Overview\n\nWelcome to the Zero to Snowflake guide focused on Snowflake Cortex AI!\n\nWithin this guide, we will explore Snowflake's complete AI platform through a progressive journey from experimentation into unified business intelligence. We'll learn AI capabilities by building a comprehensive customer intelligence system using Cortex Playground for AI experimentation, Cortex AI Functions for production-scale analysis, \u003C!-- Snowflake Copilot for AI-assisted SQL development, --\u003E Cortex Search for semantic text searching, and Cortex Analyst for natural language analytics.\n\n- For more detail on Snowflake Cortex AI, please visit the [Snowflake AI and ML Overview documentation](https://docs.snowflake.com/en/guides-overview-ai-features).\n\n### What You Will Learn\n\n* How to Experiment with AI Using AI Cortex Playground for model testing and prompt optimization.\n* How to Scale AI Analysis with Cortex AI Functions for production-scale customer review processing.\n\u003C!-- * How to optimize development with Snowflake’s Copilot for AI-assisted SQL query generation. --\u003E\n* How to enable semantic discovery with Cortex Search for intelligent text and review finding.\n* How to create conversational analytics with Cortex Analyst for natural language business intelligence.\n\n### What You Will Build\n\nThrough this journey, you’ll construct a complete intelligence customer analytics platform:\n\n**Phase 1: AI Foundation**\n* AI Experimentation Environment using Cortex Playground for model testing and optimization.\n* Production-scale Review Analysis pipeline using Cortex AI Functions for systematic customer feedback processing.\n\n**Phase 2: Intelligent Development & Discovery**\n\u003C!-- * AI-Assisted SQL Development Workflow using Copilot for complex query generation. --\u003E\n* Semantic Search Engine using Cortex Search for instant customer feedback discovery and operational intelligence.\n\n**Phase 3: Conversational Intelligence**\n* Natural Language Business Analytics Interface using Cortex Analyst for conversational data exploration.\n* Unified AI Business Intelligence Platform using Snowflake CoWork that connects customer voice with business performance\n\n### Cortex Playground\n\n\n![./assets/cortex_playground_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/cortex_playground_header.png)\n\n#### Overview\n\nAs a data analyst at Tasty Bytes, you need to rapidly explore customer feedback using AI models to identify service improvement opportunities. Traditionally, AI experimentation is complex and time-consuming. **[Snowflake Cortex Playground](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-playground)** solves this by offering a quick, secure environment directly within Snowflake's UI to experiment with diverse AI models, compare their performance on real business data, and export successful approaches as production-ready SQL. This module guides you through using Cortex Playground for rapid prototyping and seamless integration of AI into your data workflows.\n\n\n#### Step 1 - Connect Data & Filter\n\nLet's begin by connecting directly to customer review data within Cortex Playground. This keeps your data secure within Snowflake while allowing you to analyze feedback using AI models.\n\n**Navigation steps:**\n\n1.  Navigate to **AI & ML → Studio → Cortex Playground**.\n2.  Select **Role: TB_DEV** and **Warehouse: TB_DEV_WH**.\n3.  Click \"**+Connect your data**\" in the prompt box.\n4.  Select data source:\n      * **Database: TB_101**\n      * **Schema: HARMONIZED**\n      * **Table: TRUCK_REVIEWS_V**\n5.  Click **Let's go**\n6.  Select text column: **REVIEW**.\n7.  Select filter column: **TRUCK_BRAND_NAME**.\n8.  Click **Done**.\n9.  In the system prompt box, apply a filter using the **TRUCK_BRAND_NAME** dropdown. There are multiple reviews available for each truck brand. For instance, you can select \"**Better Of Bread**\" to narrow down the reviews. If \"**Better Of Bread**\" isn't available, please choose any other truck brand from the dropdown and proceed with one of its reviews.\n\n![assets/vignette-3/cortex-playground-connect.gif](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-connect.gif)\n\n\u003E **What you've accomplished:** You now have direct access to customer review data within the AI interface. The filter allows you to focus your analysis on specific truck brands, making your experiment more targeted and relevant.\n#### Step 2 - Compare AI Models for Insights\n\nNow, let's analyze customer reviews to extract specific operational insights and compare how different AI models perform on this business task.\n\n**Setup Model Comparison:**\n\n1.  Click \"**Compare**\" to enable side-by-side model comparison.\n2.  Set the left panel to \"**claude-3-5-sonnet**\" and the right panel to \"**snowflake-llama-3.3-70b**\".\n\n\u003E **Note:** Snowflake Cortex provides access to leading AI models from multiple providers, including Anthropic, OpenAI, Meta, and others, giving you choice and flexibility without vendor lock-in.\n\n**Enter this strategic prompt:**\n\n `Analyze this customer review across multiple dimensions: sentiment score with confidence level, key theme extraction, competitive positioning insights, operational impact assessment, and priority ranking for management action`\n\n![assets/vignette-3/cortex-playground-compare-two-model.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-compare-two-model.png)\n\n\u003E **Key Insight:** Notice the distinct strengths: Claude provides structured, executive-ready analysis with clear confidence. In contrast, Snowflake’s Llama model, optimized specifically for robust business intelligence, delivers comprehensive operational intelligence enriched with strategic context and detailed competitive analysis. This highlights the power of leveraging multiple AI providers, empowering you to choose the ideal approach for your specific business needs.\n\nWith our optimal model identified, we now need to fine-tune its behavior for different business scenarios. The same model can produce vastly different results depending on its settings—let’s optimize this for our specific analytical requirements.\n\n#### Step 3 - Fine-Tune Model Behavior \n\nWe want to observe how adjusting parameters, especially \"**temperature**,\" affects the AI model's responses. Does it lead to more consistent or more creative answers?\n\n**How to Set Up This Temperature Test:**\n\n1.  First, make sure both panels are set to \"**claude-3-5-sonnet**.\" We're comparing the same model, just with different settings.\n2.  Next, click \"**Change Settings**\" right next to where it says \"**Compare**.\"\n3.  Now, let's adjust those parameters for each side:\n      * **Left Panel:**\n          * Set **Temperature** to **0.1**. This will generally make the model give you really consistent, predictable answers.\n          * Set **Max-tokens** to **200**. This just keeps the responses from getting too long.\n      * **Right Panel:**\n          * Set **Temperature** to **0.8**. This should make the model's answers a bit more creative and varied.\n          * Set **top_p** to **0.8**. This is another setting that helps encourage a wider range of words in the response.\n          * Set **Max-tokens** to **200**. Again, keeping the length in check.\n4.  Finally, use the exact same strategic prompt you used in Step 2.\n\nGive that a try and see how the responses differ! It's pretty cool to see how these small tweaks can change the AI's \"personality.\"\n\n![assets/vignette-3/cortex-playground-model-setting.gif](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-model-setting.gif)\n\n![assets/vignette-3/cortex-playground-same-model.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-same-model.png)\n\n**Observe the Impact:**\n\nNotice how adjusting the temperature parameter fundamentally changes the analytical output, even with the same AI model and data.\n\n  * **Temperature 0.1:** Produces deterministic, focused output. Ideal for structured, consistent analysis and standardized reporting.\n  * **Temperature 0.8:** Results in diverse, varied output. Perfect for generating explanatory insights or exploring less obvious connections.\n\nWhile temperature influences token choice, **top_p** (set to 0.8 on the right) restricts possible tokens. **max_tokens** simply sets the maximum response length; be mindful small values can truncate results. This gives you precise control over AI creativity versus consistency, letting you match the AI’s behavior to your analytical objectives.\n\nNow that we’ve mastered model selection and parameter optimization, let's examine the technology foundation that makes this experimentation possible. Understanding this will help us transition from playground testing to production deployment.\n\n#### Step 4 - Understanding the Underlying Technology\n\nIn this section, let's explore the core technology that takes your AI insights from the playground to production.\n\n#### The Foundation: SQL at Its Core\n\nEvery AI insight you generate in Cortex Playground isn't just magic; it's backed by SQL. Click \"**View Code**\" after any model response, and you'll see the exact SQL query, complete with your specified settings like temperature. This isn't just for show—this code is ready for action! You can run it directly in a Workspace SQL file, automate it with streams and tasks, or integrate it with a dynamic table for live data processing. It's also worth noting that the functionalities of this Cortex Complete can be accessed programmatically via Python or a REST API, offering flexible integration options.\n\n#### The AI_COMPLETE Function\n\nBehind every prompt you've run, the **[AI_COMPLETE](https://docs.snowflake.com/en/sql-reference/functions/ai_complete)** function is hard at work. This is Snowflake Cortex AI's powerful function providing direct access to industry-leading large language models for text completion. The Cortex Playground simply offers an intuitive interface to test and compare these models before you embed them directly into your SQL. (Heads up: AI_COMPLETE is the updated version of SNOWFLAKE.CORTEX.COMPLETE)\n\n![assets/vignette-3/cortex-playground-view-code.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-playground-view-code.png)\n\nThis seamless integration means your AI experimentation directly translates into production-ready workflows within Snowflake.\n\n#### Conclusion\n\nThe Cortex Playground is an invaluable tool for experimenting with individual reviews, but true large-scale customer feedback analysis demands specialized AI functions. The prompt patterns and model selections you've refined here lay the groundwork for building scalable solutions. Our next step involves processing thousands of reviews using purpose-built AI Functions like **SENTIMENT()**, **CLASSIFY()**, **EXTRACT_ANSWER()**, and **AI_SUMMARIZE_AGG()**. This systematic approach ensures that AI-driven insights seamlessly become a core part of our operational strategy.\n\n### AI Functions\n\n![./assets/ai_functions_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/ai_functions_header.png)\n\n\n#### Overview\n\nYou've successfully experimented with AI models in Cortex Playground to analyze individual customer reviews. Now, it's time to scale! This guide shows you how to use **[AI Functions](https://docs.snowflake.com/en/user-guide/snowflake-cortex/aisql)** to process thousands of reviews, turning experimental insights into production-ready intelligence. You'll learn to:\n\n1.  **USE SENTIMENT()** to score and label truck customer reviews.\n2.  **Use AI_CLASSIFY()** to categorize reviews by themes.\n3.  **Use EXTRACT_ANSWER()** to pull specific complaints or praise.\n4.  **Use AI_SUMMARIZE_AGG()** to generate quick summaries per truck brand.\n\n### Get the SQL code and paste it into your SQL File.\n\nCopy and paste the SQL from this [file](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-3-aisql.sql) in a new SQL File to follow along in Snowflake.\n\u003C!-- Uncomment when Copilot is added back --\u003E\n\u003C!-- **Note that once you've reached the end of the SQL File you can skip to [Step 19 - Snowflake Copilot](/en/developers/guides/zero-to-snowflake/).** --\u003E\n\n\u003C!-- Remove when Copilot is added back --\u003E\n\n\u003C!-- End remove --\u003E\n\n### Step 1 - Setting Context\n\nFirst, let's set our session context. We will assume the role of a TastyBytes data analyst with the intention of leveraging AISQL functions to gain insights from customer reviews.\n\n```sql\nALTER SESSION SET query_tag = '{\"origin\":\"sf_sit-is\",\"name\":\"tb_zts\",\"version\":{\"major\":1, \"minor\":1},\"attributes\":{\"is_quickstart\":1, \"source\":\"tastybytes\", \"vignette\": \"aisql_functions\"}}';\n\nUSE ROLE tb_analyst;\nUSE DATABASE tb_101;\nUSE WAREHOUSE tb_de_wh;\n```\n\n#### Step 2 - Sentiment Analysis at Scale\n\nAnalyze customer sentiment across all food truck brands to identify which trucks are performing best and create fleet-wide customer satisfaction metrics. In Cortex Playground, we analyzed individual reviews manually. Now we’ll use the `SENTIMENT()` function to automatically score customer reviews from -1 (negative) to +1 (positive), following Snowflake's official sentiment ranges.\n\n**Business Question:** “How do customers feel about each of our truck brands overall?”\n\nPlease execute this query to analyze customer sentiment across our food truck network and categorize feedback.\n\n```sql\nSELECT\n    truck_brand_name,\n    COUNT(*) AS total_reviews,\n    AVG(CASE WHEN sentiment \u003E= 0.5 THEN sentiment END) AS avg_positive_score,\n    AVG(CASE WHEN sentiment BETWEEN -0.5 AND 0.5 THEN sentiment END) AS avg_neutral_score,\n    AVG(CASE WHEN sentiment \u003C= -0.5 THEN sentiment END) AS avg_negative_score\nFROM (\n    SELECT\n        truck_brand_name,\n        SNOWFLAKE.CORTEX.SENTIMENT (review) AS sentiment\n    FROM harmonized.truck_reviews_v\n    WHERE\n        language ILIKE '%en%'\n        AND review IS NOT NULL\n    LIMIT 10000\n)\nGROUP BY\n    truck_brand_name\nORDER BY total_reviews DESC;\n```\n\n![assets/vignette-3/sentiment.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/sentiment.png)\n\n\n\u003E **Key Insight**: Notice how we transitioned from analyzing reviews one at a time in Cortex Playground to systematically processing thousands. The `SENTIMENT()` function automatically scored every review and categorized them into Positive, Negative, and Neutral - giving us instant fleet-wide customer satisfaction metrics.\n\u003E\n\u003E **Sentiment Score Ranges**:\n\u003E\n\u003E   * Positive: 0.5 to 1\n\u003E   * Neutral: -0.5 to 0.5\n\u003E   * Negative: -0.5 to -1\n\n#### Step 3 - Categorize Customer Feedback\n\nNow, let's categorize all reviews to understand what aspects of our service customers are talking about most. We'll use the `AI_CLASSIFY()` function, which automatically categorizes reviews into user-defined categories based on AI understanding, rather than simple keyword matching. In this step, we will categorize customer feedback into business-relevant operational areas and analyze their distribution patterns.\n\n**Business Question:** “What are customers primarily commenting on - food quality, service, or delivery experience?\"\n\nExecute the Classification Query:\n\n```sql\nWITH classified_reviews AS (\n  SELECT\n    truck_brand_name,\n    AI_CLASSIFY(\n      review,\n      ['Food Quality', 'Pricing', 'Service Experience', 'Staff Behavior']\n    ):labels[0] AS feedback_category\n  FROM\n    harmonized.truck_reviews_v\n  WHERE\n    language ILIKE '%en%'\n    AND review IS NOT NULL\n    AND LENGTH(review) \u003E 30\n  LIMIT\n    10000\n)\nSELECT\n  truck_brand_name,\n  feedback_category,\n  COUNT(*) AS number_of_reviews\nFROM\n  classified_reviews\nGROUP BY\n  truck_brand_name,\n  feedback_category\nORDER BY\n  truck_brand_name,\n  number_of_reviews DESC;\n```\n\n![assets/vignette-3/classify.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/classify.png)\n\n\n\u003E **Key Insight**: Observe how `AI_CLASSIFY()` automatically categorized thousands of reviews into business-relevant themes such as Food Quality, Service Experience, and more. We can instantly see that Food Quality is the most discussed topic across our truck brands, providing the operations team with clear, actionable insight into customer priorities.\n\n#### Step 4 - Extract Specific Insights\n\nNext, to gain precise answers from unstructured text, we'll utilize the `EXTRACT_ANSWER()` function. This powerful function enables us to ask specific business questions about customer feedback and receive direct answers. In this step, our goal is to identify precise operational issues mentioned in customer reviews, highlighting specific problems that require immediate attention.\n\n**Business question:** “What specific improvement or complaint is mentioned in this review?\"\n\nLet's execute the next query:\n\n```sql\n  SELECT\n    truck_brand_name,\n    primary_city,\n    LEFT(review, 100) || '...' AS review_preview,\n    SNOWFLAKE.CORTEX.EXTRACT_ANSWER(\n        review,\n        'What specific improvement or complaint is mentioned in this review?'\n    ) AS specific_feedback\nFROM\n    harmonized.truck_reviews_v\nWHERE\n    language = 'en'\n    AND review IS NOT NULL\n    AND LENGTH(review) \u003E 50\nORDER BY truck_brand_name, primary_city ASC\nLIMIT 10000;\n```\n\n![assets/vignette-3/extract.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/extract.png)\n\n\n\u003E **Key Insight**: Notice how `EXTRACT_ANSWER()` distills specific, actionable insights from long customer reviews. Rather than manual review, this function automatically identifies concrete feedback like \"friendly staff was saving grace\" and \"hot dogs are cooked to perfection.\" The result is a transformation of dense text into specific, quotable feedback that the operations team can leverage instantly.\n\n#### Step 5 - Generate Executive Summaries\n\nFinally, to create concise summaries of customer feedback, we'll use the `AI_SUMMARIZE_AGG()` function. This powerful function generates short, coherent summaries from lengthy unstructured text. In this step, our goal is to distill the essence of customer reviews for each truck brand into digestible summaries, providing quick overviews of overall sentiment and key points.\n\n**Business Question:** “What are the key themes and overall sentiment for each truck brand?”\n\nExecute the Summarization Query:\n\n```sql\nSELECT\n  truck_brand_name,\n  AI_SUMMARIZE_AGG (review) AS review_summary\nFROM\n  (\n    SELECT\n      truck_brand_name,\n      review\n    FROM\n      harmonized.truck_reviews_v\n    LIMIT\n      100\n  )\nGROUP BY\n  truck_brand_name;\n```\n\n![assets/vignette-3/summarize.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/summarize.png)\n\n\u003E **Key Insight**: The `AI_SUMMARIZE_AGG()` function condenses lengthy reviews into clear, brand-level summaries. These summaries highlight recurring themes and sentiment trends, providing decision-makers with quick overviews of each food truck's performance and enabling faster understanding of customer perception without reading individual reviews.\n\n#### Conclusion\n\nWe've successfully demonstrated the transformative power of AI Functions, shifting customer feedback analysis from individual review processing to systemic, production-scale intelligence. Our journey through these four core functions clearly illustrates how each serves a distinct analytical purpose, transforming raw customer voices into comprehensive business intelligence—systematic, scalable, and immediately actionable. What once required individual review analysis now processes thousands of reviews in seconds, providing both the emotional context and specific details crucial for data-driven operational improvements.\n\n\u003C!-- Uncomment when Copilot is added back --\u003E\n\u003C!-- As our analysis grows in sophistication, combining multiple AI functions in complex queries can become challenging. This is precisely where Snowflake Copilot offers powerful assistance. Let's explore how Copilot can help us create complex queries using natural language and significantly accelerate our work, empowering us to build even more intricate analytical workflows with ease. --\u003E\n\n\u003C!-- Uncomment when Copilot is added back --\u003E\n\u003C!-- ## Snowflake Copilot --\u003E\n\n\u003C!-- ![./assets/snowflake_copilot_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/snowflake_copilot_header.png)\n\n\n### Overview\n\nYou've successfully built powerful AI SQL queries to analyze customer reviews. Now, the challenge is to connect these insights to real business impact: Do negative reviews affect loyalty? Do positive reviews boost orders? This requires **complex queries** joining multiple data sources and correlating AI results.\n\nThis lab introduces **Snowflake Copilot**, an LLM-powered assistant designed to simplify this challenge. Running securely within Snowflake Cortex, Copilot helps you construct sophisticated analytical workflows, translating complex business questions into powerful SQL.\n\n### Get the SQL and paste it into your SQL File\n\n**Copy and paste the SQL from this [file](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-3-copilot.sql) into a new SQL File in Snowflake to follow along.**\n\n**Snowflake Copilot is designed to be used directly within the SQL File environment.** Please ensure you are executing the SQL in a SQL File.\n\n**Note: Once you've reached the end of the SQL File, you can skip to Step 20 - Cortex Search.**\n\n### Step 1 - Setting Context\n\nFirst, let's set our session context. We will assume the role of a TastyBytes data analyst with the intention of leveraging Snowflake Copilot to build sophisticated queries and gain deeper business insights.\n\n```sql\nALTER SESSION SET query_tag = '{\"origin\":\"sf_sit-is\",\"name\":\"tb_zts\",\"version\":{\"major\":1, \"minor\":1},\"attributes\":{\"is_quickstart\":1, \"source\":\"tastybytes\", \"vignette\": \"snowflake_copilot\"}}';\n\nUSE ROLE tb_analyst;\nUSE WAREHOUSE tb_de_wh;\nUSE DATABASE tb_101;\nUSE SCHEMA harmonized;\n```\n\n![assets/vignette-3/copilot.gif](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/copilot.gif)\n\n\n### Step 2 - Translate Requirements with Copilot\n\nTo begin, let’s explore what types of analysis questions we can ask about our Tasty Bytes dataset using Copilot’s natural language understanding capabilities.\n\nType the following question in the Copilot message box and click RUN to see the result of the query:\n\n**Prompt 1:** `How do I structure a query that correlates customer review sentiment with customer loyalty metrics and order behavior? I have a review sentiment data and customer loyalty metrics tables with order information. I need to understand the relationship between what customers say and their actual purchasing pattern.`\n\n![assets/vignette-3/copilot-prompt1.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/copilot-prompt1.png)\n\n\n\u003E **Key Insight**: Copilot provides schema-aware business intelligence, directly analyzing your specific Tasty Bytes tables and suggesting strategic analysis using your actual column names. This isn't generic AI; it's purpose-built intelligence that profoundly understands your data structure.\n\n### Step 3 - Build Complex Queries \n\nNow let’s use Copilot to generate complex SQL with multiple table joins from a simple business question.\n\nIn the same Copilot panel, paste the following business question and click RUN to see the result:\n\n**Prompt 2:** `Show me high-value customers who have been leaving negative reviews. I want to understand which customers spend a lot of money with us but seem unhappy based on their feedback`\n\n![assets/vignette-3/copilot-prompt2.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/copilot-prompt2.png)\n\n\u003E **Key Insight**: Notice how Copilot transforms a simple business question into production-ready customer intelligence with complex analytical logic and actionable results—all without requiring SQL expertise. This showcases Copilot's core value: you can ask strategic questions in plain English and instantly receive the enterprise-grade analytics that typically demand data engineering skills.\n\n### Conclusion\n\nSnowflake Copilot profoundly transforms business intelligence by enabling users to effortlessly translate complex business questions into sophisticated SQL queries. As demonstrated with Tasty Bytes, it empowers both technical and non-technical users to derive actionable insights from their data without deep SQL expertise. This LLM-powered assistant delivers schema-aware, purpose-built intelligence, ensuring robust data governance and keeping all enterprise data securely within Snowflake. Copilot isn't just generic AI; it's a strategic tool that bridges operational insights with business intelligence. --\u003E\n\n### Optional: Cortex Search\n\n![./assets/cortex_search_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/cortex_search_header.png)\n\n#### Overview\n\u003C!-- Uncomment when Copilot is added back --\u003E\n\u003C!-- While Copilot excels at generating complex analytical queries, a common daily challenge for customer service teams is quickly finding specific customer reviews for complaints or compliments. Traditional keyword search often falls short, missing the nuances of natural language. --\u003E\n\n\u003C!-- Remove when Copilot is added back --\u003E\nWhile AI-powered tools excel at generating complex analytical queries, a common daily challenge for customer service teams is quickly finding specific customer reviews for complaints or compliments. Traditional keyword search often falls short, missing the nuances of natural language.\n\u003C!-- End Remove --\u003E\n\n**[Snowflake Cortex Search](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-search/cortex-search-overview)** solves this by providing low-latency, high-quality \"fuzzy\" search over your Snowflake text data. It quickly sets up hybrid (vector and keyword) search engines, handling embeddings, infrastructure, and tuning for you. Under the hood, Cortex Search combines semantic (meaning-based) and lexical (keyword-based) retrieval with intelligent re-ranking to deliver the most relevant results. In this lab, you will configure a search service, connect it to customer review data, and run semantic queries to proactively identify key customer feedback.\n\n#### Step 1 - Access Cortex Search \n\n1.  Open Snowsight and navigate to the AI & ML Studio, then select **Cortex Search**.\n2.  Click **Create** to begin setup.\n\nThis opens the search service configuration interface, where you’ll define how Snowflake indexes and interprets your text data.\n\n![assets/vignette-3/cortex-search-access.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-access.png)\n\n#### Step 2 - Configure the Search Service\n\nIn the **New service** configuration screen:\n\n1. Select **Database** and **Schema**:\n   * Choose **TB_101** from the Databases dropdown\n   * Choose **HARMONIZED** from the Schemas dropdown\n2. Enter the **Service name**: `customer_feedback_intelligence`\n3. Click the **Next** button at the bottom right to proceed.\n\n![assets/vignette-3/cortex-search-new-service.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-new-service.png)\n\n\n#### Step 3 - Connect to Review Data\n\nThe wizard will now guide you through several configuration screens. Follow these steps:\n\n1. **Select data screen:**\n   * From the Views dropdown, select `TRUCK_REVIEWS_V`\n   * Click **Next**\n\n2. **Select search column screen:**\n   * Choose `REVIEW` (this is the text column that will be semantically searched)\n   * Click **Next**\n\n3. **Select attributes screen:**\n   * Select columns for filtering results: `TRUCK_BRAND_NAME`, `PRIMARY_CITY`, `REVIEW_ID`\n   * Click **Next**\n\n4. **Select columns screen:**\n   * Choose other columns to include in search results such as `DATE`, `LANGUAGE`, etc.\n   * Click **Next**\n\n5. **Configure indexing screen:**\n   * **Warehouse**: Select `COMPUTE_WH` from the dropdown\n   * Accept the other default settings\n   * Click **Create** to build the search service\n\n![assets/vignette-3/cortex-search-walkthrough.gif](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-walkthrough.gif)\n\n\u003E **Note**: Creating the search service includes building the index, so the initial setup may take a little longer. If the creation process is taking an extended period, you can seamlessly continue the lab by using a pre-configured search service:\n\u003E\n\n1.  From the left-hand menu in Snowsight, navigate to **AI & ML**, then click on **Cortex Search**.\n2.  In the Cortex Search view, locate the dropdown filter (as highlighted in the image below, showing `TB_101 / HARMONIZED`). Select or ensure this filter is set to `TB_101 / HARMONIZED`.\n3.  In the list of \"Search services\" that appears, click on the pre-built service named **`TASTY_BYTES_REVIEW_SEARCH`**.\n4.  Once inside the service's details page, click on **Playground** in the top right corner to begin using the search service for the lab.\n\n- **Once any search service is active (either your new one or the pre-configured one), queries will run with low latency and scale seamlessly.**\n\n![assets/vignette-3/cortex-search-existing-service.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-existing-service.png)\n\n\u003E Behind this simple UI, Cortex Search is performing a complex task. It analyzes the text in your \"REVIEW\" column, using an AI model to generate semantic embeddings, which are numerical representations of the text's meaning. These embeddings are then indexed, allowing for high-speed conceptual searches later on. In just a few clicks, you have taught Snowflake to understand the intent behind your reviews.\n\n#### Step 4 - Run Semantic Query\n\nWhen the service shows as \"Active\", click on **Playground** and enter the natural language prompt in the search bar:\n\n**Prompt - 1:** `Customers getting sick`\n\n![assets/vignette-3/cortex-search-prompt1.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-prompt1.png)\n\n\u003E **Key Insight**: Notice Cortex Search isn’t just finding customers - it’s finding CONDITIONS that could MAKE customers sick. That is the difference between reactive keyword search and proactive semantic understanding.\n\nNow try another query:\n\n**Prompt - 2:** `Angry customers`\n\n![assets/vignette-3/cortex-search-prompt2.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-search-prompt2.png)\n\n\u003E **Key Insight**: These customers are about to churn, but they never said “I’m angry.” They expressed frustration in their own words. Cortex Search understands the emotion behind the language, helping you identify and save at-risk customers before they leave.\n\n#### Conclusion\n\nUltimately, Cortex Search transforms how Tasty Bytes analyzes customer feedback. It empowers the customer service manager to move beyond simply sifting through reviews, to truly understand and proactively act upon the voice of the customer at scale, driving better operational decisions and enhancing customer loyalty.\n\nIn the next module - Cortex Analyst - you'll use natural language to query structured data. \n\n### Optional: Cortex Analyst\n\n\n![./assets/cortex_analyst_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/cortex_analyst_header.png)\n\n#### Overview\n\nA business analyst at Tasty Bytes needs to enable self-service analytics, allowing the business team to ask complex questions in natural language and get instant insights without relying on data analysts to write SQL. While previous AI tools helped with finding reviews and complex query generation, the demand now is for **conversational analytics** that directly transforms structured business data into immediate insights.\n\n**[Snowflake Cortex Analyst](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst)** empowers business users to ask sophisticated questions directly, seamlessly extracting value from their analytics data through natural language interaction. This lab will guide you through designing a semantic model, connecting it to your business data, configuring relationships and synonyms, and then executing advanced business intelligence queries using natural language.\n\n#### Step 1 -  Design Semantic Model\n\nLet's begin by navigating to Cortex Analyst in Snowsight and configuring our semantic model foundations.\n\n1. Navigate to **Cortex Analyst** under **AI & ML Studio** in Snowsight.\n\n![assets/vignette-3/cortex-analyst-nav.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-nav.png)\n\n2. **Set Role and Warehouse:**\n\n    * Change role to `TB_DEV`.\n    * Set Warehouse to `TB_CORTEX_WH`.\n    * Click **Create new model**.\n\n![assets/vignette-3/cortex-analyst-setup.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-setup.png)\n\n\n3.  On the **Getting Started** page, configure the following:\n\n      * **DATABASE**: `TB_101`\n      * **SCHEMA**: `SEMANTIC_LAYER`\n      * **Name**: `tasty_bytes_business_analytics`\n      * **Description**: `Semantic model for Tasty Bytes executive analytics, covering customer loyalty and order performance data for natural language querying`\n      * Click **Next**.\n\n![assets/vignette-3/cortex-analyst-getting-started.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-getting-started.png)\n\n#### Step 2 - Select & Configure Tables and Columns\n\nIn the **Select tables** step, let's choose our analytics views.\n\n1.  Select the core business tables:\n\n      * **DATABASE**: `TB_101`\n      * **SCHEMA**: `SEMANTIC_LAYER`\n      * **VIEWS**: Select `Customer_Loyalty_Metrics_v` and `Orders_v`.\n      * Click **Next**.\n\n2.  On the **Select columns** page, ensure both selected tables are active, then click **Create and Save**.\n\n#### Step 3 - Edit Logical Table & Add Synonyms\n\nNow, let's add table synonyms and a primary key for better natural language understanding.\n\n1.  In the `customer_loyalty_metrics_v` table, copy and paste the following synonyms into the `Synonyms` box:\n\n    ```\n    Customers, customer_data, loyalty, customer_metrics, customer_info\n    ```\n\n2.  Set the **Primary Key** to `customer_id` from the dropdown.\n\n3.  For the `orders_v` table, copy and paste the following synonyms:\n\n    ```\n    Orders, transactions, sales, purchases, order_data\n    ```\n\n4.  After making these changes, click **Save** in the top right corner.\n\n#### Step 4 - Configure Table Relationships\n\nAfter creating the semantic model, let's establish the relationship between our logical tables.\n\n1.  Click **Relationships** in the left-hand navigation.\n\n2.  Click **Add relationship**.\n\n3.  Configure the relationship as follows:\n\n      * **Relationship name**: `orders_to_customer_loyalty_metrics`\n      * **Left table**: `ORDERS_V`\n      * **Right table**: `CUSTOMER_LOYALTY_METRICS_V`\n      * **Join columns**: Set `CUSTOMER_ID` = `CUSTOMER_ID`.\n\n4.  Click **Add relationship**\n\n![assets/vignette-3/cortex-analyst-table-relationship.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-table-relationship.png)\n\n**Upon completion**, simply use the **Save** option at the top of the UI. This will finalize your semantic view, making your semantic model ready for sophisticated natural language queries. \n\nTo access the **Cortex Analyst chat interface** in fullscreen mode, you would:\n\n1.  Click the **three-dot menu (ellipsis)** next to the \"Share\" button at the top right.\n2.  From the dropdown menu, select **\"Enter fullscreen mode.\"**\n\n![assets/vignette-3/cortex-analyst-interface.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-interface.png)\n\n#### Step 5 - Execute Customer Segmentation Intelligence\n\nWith our semantic model and relationships active, let's demonstrate sophisticated natural language analysis by running our first complex business query.\n\n1.  Navigate to the Cortex Analyst query interface.\n\n2.  Enter the following prompt:\n\n    ```\n    Show customer groups by marital status and gender, with their total spending per customer and average order value. Break this down by city and region, and also include the year of the orders so I can see when the spending occurred. In addition to the yearly breakdown, calculate each group’s total lifetime spending and their average order value across all years. Rank the groups to highlight which demographics spend the most per year and which spend the most overall.\n    ```\n![assets/vignette-3/cortex-analyst-prompt1.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-prompt1.png)\n\n\u003E **Key Insight**: Instantly delivers comprehensive intelligence by combining multi-table joins, demographic segmentation, geographic insights, and lifetime value analysis - insights that would require 40+ lines of SQL and hours of analyst effort.\n\n#### Step 6 - Generate Advanced Business Intelligence\n\nHaving seen basic segmentation, let's now demonstrate enterprise-grade SQL that showcases the full power of conversational business intelligence.\n\n1.  Clear the context by clicking the refresh icon.\n\n2.  Enter the following prompt:\n\n    ```\n    I want to understand our customer base better. Can you group customers by their total spending (high, medium, low spenders), then show me their ordering patterns differ? Also compare how our franchise locations perform versus company-owned stores for each spending group.\n    ```\n![assets/vignette-3/cortex-analyst-prompt2.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/cortex-analyst-prompt2.png)\n\n\n\u003E **Key Insight**: Notice how Cortex Analyst seamlessly bridges the gap between a business user's simple, natural language question and the sophisticated, multi-faceted SQL query required to answer it. It automatically constructs the complex logic, including CTEs, window functions, and detailed aggregations, that would typically demand a skilled data analyst.\n\n#### Conclusion\n\nThrough these rigorous steps, we've forged a robust Cortex Analyst semantic model. This isn't just an improvement; it's a transformative tool designed to liberate users across various industries from the constraints of SQL, enabling them to surface profound business intelligence through intuitive natural language queries. Our multi-layered analyses, while showcased through the Tasty Bytes use case, powerfully illustrate how this model drastically cuts down on the time and effort traditionally needed for deep insights, thereby democratizing access to data and fueling a culture of informed, agile decision-making on a broad scale.\n\n### Snowflake CoWork\n\n\n![./assets/si_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/si_header.png)\n\n#### Overview\n\nThe Chief Operating Officer at Tasty Bytes receives dozens of fragmented reports each week: customer satisfaction dashboards, revenue analytics, operational performance metrics, and market analysis. Critical business insights remain buried across separate systems: customer sentiment lives in review platforms, sales data sits in financial dashboards, and operational metrics exist in isolated performance tools.\n\nWhen the COO needs to understand why Q3 revenue dropped, connecting customer feedback sentiment with actual financial performance requires hours of manual analysis, SQL expertise, and cross-referencing multiple data sources. This is a significant hurdle for executives and other non-technical roles.\n\nIn this section, we'll demonstrate how **[Snowflake CoWork](https://docs.snowflake.com/en/user-guide/snowflake-cortex/snowflake-intelligence)** tackles this challenge by combining the capabilities of Cortex Search and Cortex Analyst, which are made available through the setup. This integration allows for a single conversational AI agent. You'll see how executives and other non-technical roles can ask natural language questions and receive immediate answers with visualizations. This kind of insight would normally take weeks of analyst work across multiple teams.\n\n**Prerequisites:**\n\nBefore starting this module, your environment includes pre-configured AI services that power Snowflake CoWork:\n\n* **Cortex Search Service:** `tasty_bytes_review_search` - analyzing customer reviews and feedback\n    * *Note for Advanced Users:* If you want to build your own Cortex Search from scratch, an optional setup module is available. For a detailed guide, click the link to the: [Cortex Search Module](/en/developers/guides/zero-to-snowflake/)\n\n* **Cortex Analyst Service:** `TASTY_BYTES_BUSINESS_ANALYTICS` - for translating natural language questions into SQL and providing insights from structured data, enabling self-service analytics.\n    * *Note for Advanced Users:* If you prefer to build your own Cortex Analyst semantic model from scratch, you can access the detailed setup module for guidance. Access the detailed setup by clicking on the: [Cortex Analyst Module](/en/developers/guides/zero-to-snowflake/)\n\n---\n\n#### Step 1 - Upload Semantic Model\n\nTo enable business analytics capabilities in Snowflake CoWork, you need to upload the pre-built semantic model file to your Snowflake stage. You can **download the necessary YAML file directly by clicking this link:** [Cortex Analyst Semantic Model](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/semantic_models/TASTY_BYTES_BUSINESS_ANALYTICS.yaml)\n\n**Important:** If clicking the link opens the file in your browser instead of downloading it, please right-click on the link and select **\"Save Link As\"** to download the YAML file to your local machine.\n\nHere's how to upload the semantic model:\n\n1.  **Navigate to Cortex Analyst**: In Snowsight, go to **AI & ML Studio** and then select **Cortex Analyst**.\n\n2.  **Set Role and Warehouse**:\n\n      * Change your role to `TB_DEV`.\n      * Set the warehouse to `TB_CORTEX_WH`.\n\n3.  **Upload your YAML file**: Click the **Upload your yaml file** button.\n\n4.  **Configure Upload Details**: In the upload file screen, set the following:\n\n      * **Database**: `Tb_101`\n      * **Schema**: `semantic_layer`\n      * **Stage**: `semantic_model_stage`\n\n5.  **Click Upload**: This YAML file contains the pre-configured semantic model that defines the business analytics layer, including customer loyalty metrics and order data.\n\n6.  **Save the YAML file**: After clicking upload, save the YAML file. The semantic model will then appear in the Cortex Analyst panel, in the semantic models section.\n\n![snowflake-intelligence-yaml-file-upload](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-yaml-file-upload.gif)\n\n-----\n\n#### Step 2: Create a Unified Agent\n\nWith your AI services pre-configured, you can now create a Cortex Agent that combines these capabilities into a single, unified intelligence interface.\n\n### Create the Agent\n\n1.  In **Snowsight**, navigate to the **AI & ML Studio**, then select **Agents**.\n2.  Click **Create Agent**.\n3.  In the \"Create New Agent\" window, click **Create agent**.\n4.  **Initial Configuration**:\n      * **Platform integration**: Ensure \"Create this agent for Snowflake CoWork\" is checked.\n      * **Database and schema**: This will default to `SNOWFLAKE_INTELLIGENCE.AGENTS`.\n      * **Agent object name**: Enter `tasty_bytes_intelligence_agent`.\n      * **Display name**: Enter `Tasty Bytes Business Intelligence Agent`.\n5.  Click **Create agent**.\n\n![snowflake-intelligence-create-agent](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-create-agent.png)\n\n-----\n\n### Configure the Agent\n\nAfter creating the agent, click on its name from the agent list to open the details page, then click **Edit** to begin configuring it.\n\n![snowflake-intelligence-edit-agent](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-edit-agent.gif)\n\n#### **1. About Tab**\n\n  * **Display name**: `Tasty Bytes Business Intelligence Agent`\n  * **Description**:\n```\nThis agent analyzes customer feedback and business performance data for Tasty Bytes food trucks. It identifies operational issues, competitive threats, and growth opportunities by connecting customer reviews with revenue and loyalty metrics to provide actionable business insights.\n```\n\n#### **2. Tools Tab**\n\n\u003E **Note**: This lab primarily uses a pre-built **semantic model** uploaded in Step 1. However, if you built your Cortex Analyst semantic view from scratch using the [Cortex Analyst Module](vignette-3-cortex-analyst.md), you will select your **semantic view** here instead of a semantic model. After setting the **Database** to `TB_101` and **Schema** to `semantic_layer`, your semantic view will be listed and selectable under that schema.\n\nNow, let's add the semantic model we uploaded in Step 1:\n\n**Add the Cortex Analyst Tool:**\n\n1.  Click **Add** next to \"Cortex Analyst.\"\n2.  Select the **Semantic model file** radio button.\n3.  **Configure the semantic model location**:\n      * **Schema**: Choose `TB_101.SEMANTIC_LAYER`.\n      * **Stage**: Choose `SEMANTIC_MODEL_STAGE`.\n      * **File Selection**: Pick your uploaded YAML file from the list.\n4.  **Configure tool details**:\n      * **Name**: Enter `tasty_bytes_business_analytics`.\n      * **Description**:\n```\nSearches customer reviews and feedback to identify sentiment, operational issues, and customer satisfaction insights\n```\n5.  **Configure execution settings**:\n      * **Warehouse**: Select **Custom** and choose `TB_CORTEX_WH`.\n      * **Query timeout**: Enter `300`.\n6.  Click **Add**.\n\n![snowflake-intelligence-add-analyst](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-add-analyst.gif)\n\n-----\n\n**Add the Cortex Search Services Tool:**\n\n1.  Click **Add** next to \"Cortex Search Services.\"\n2.  **Configure tool details**:\n      * **Name**: `tasty_bytes_review_search`.\n      * **Description**: \n``` \nSearches customer reviews and feedback to identify sentiment, operational issues, and customer satisfaction insights\n``` \n3.  **Configure data source location**:\n      * **Schema**: Choose `TB_101.HARMONIZED`.\n      * **Search service**: Choose `TB_101.HARMONIZED.TASTY_BYTES_REVIEW_SEARCH`.\n4.  **Configure search result columns**:\n      * **ID column**: Select **Review**\n      * **Title column**: Select **TRUCK_BRAND_NAME**\n5.  **Configure search filters (optional)**:\n      * Click **Add filter** to add up to 5 optional filters.\n6.  Click **Add**.\n\n![snowflake-intelligence-add-search](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-add-search.gif)\n\n#### **3. Orchestration Tab**\n\n* **Orchestration Instruction**:\n\n```\nUse both Cortex Search and Cortex Analyst to provide unified business intelligence.\nAnalyze customer feedback sentiment and operational issues from reviews, then correlate findings with revenue performance, customer loyalty metrics, and market data.\nPresent insights with revenue quantification and strategic recommendations.\n```\n\n* **Response Instruction**:\n```\nYou are a business intelligence analyst for Tasty Bytes food trucks. When analyzing data:\n1. Combine customer review insights with specific revenue and loyalty data to provide comprehensive business intelligence\n2. Quantify business impact with specific revenue amounts and market sizes\n3. Identify operational risks, competitive threats, and growth opportunities\n4. Provide clear, actionable recommendations for executive decision-making\n5. Use visualizations when helpful to illustrate business insights\n6. Explain the correlation between customer feedback and business performance\n7. Focus on strategic insights that drive business outcomes\n```\n\n#### **4. Access Tab**\n\n\u003E To control who can use your agent in this lab, you'll simply keep the default ACCOUNTADMIN access, which is sufficient for testing, with no extra configuration needed; however, you have the option to add more roles, such as TB_ADMIN, by clicking Add role.\n\n#### **5. Save Configuration**\n\n  * Click **Save** in the top right corner to finalize your agent's configuration.\n\nYour unified intelligence agent is now ready to provide conversational business intelligence through the Snowflake CoWork interface.\n\n-----\n\n#### Step 3 - Access Snowflake CoWork Interface\n\nWith your intelligence agent created, we can now access the Snowflake CoWork interface that provides unified natural language business intelligence.\n\n**Access the interface:**\n\n1.  Open Snowsight and navigate to the AI & ML Studio, then select **Snowflake CoWork**\n2.  Select our created agent: `tasty_bytes_intelligence_agent`\n3.  Select the sources: select `tasty_bytes_review_search` and `tasty_bytes_business_analytics`\n\nYou are now ready to demonstrate unified business intelligence through natural language.\n\n![snowflake-intelligence-interface](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-interface.gif)\n-----\n\n#### Step 4 - Correlate Revenue & Customer Themes\n\nLet's deep dive into our highest-earning markets by mapping their financial success to the voice of their customers.\n\n**Prompt:**\n\n```\nGenerate a bar chart displaying the top 5 cities by total revenue. For each of these top-performing cities, analyze their customer reviews to identify the 3 most frequently discussed topics or common themes (e.g., related to service, product, or facilities). Provide these topics alongside the chart\n```\n![snowflake-intelligence-prompt2](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-prompt1.png)\n\n**Key insight:** This analysis really shows off what Snowflake CoWork can do! It helps us connect the dots between how much money our top cities are making and what our customers in those cities are actually saying. We can quickly see our best-performing markets by revenue, and right alongside, get a clear picture of the most common things people are talking about in their reviews. This gives us a much richer, more human understanding of what's truly driving success – or perhaps what subtle issues might be brewing – even in our strongest areas. It's all about making smarter, more informed decisions, and we get these powerful insights just by asking a simple question.\n\n#### Step 5 - Analyze Underperforming Markets\n\nNow let's explore strategies to address these key customer pain points and develop targeted action plans to improve performance in these cities.\n\n**Prompt:**\n\n```\nIdentify the 5 cities with the lowest total revenue. For each of these cities, analyze their customer reviews to identify the 3 most frequently mentioned pain points or areas of dissatisfaction. Please present this as a table, showing the city, its total revenue, and the identified customer pain points.\n```\n![snowflake-intelligence-prompt2](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-3/snowflake-intelligence-prompt2.png)\n\n**Key insight:** This analysis from Snowflake CoWork gives us a clear picture of our lowest-earning cities and, crucially, shines a light on the exact customer pain points that are holding them back. By directly connecting raw revenue numbers with specific feedback from customer reviews, we can pinpoint where we need to focus our efforts to improve service, product, or support. This provides actionable intelligence to drive targeted growth and customer satisfaction in these challenged markets, all by simply asking a natural language question.\n\n-----\n\n#### Conclusion\n\nWhat we've just experienced with Tasty Bytes showcases a fundamental shift in how businesses can truly understand their data. By seamlessly integrating Snowflake Cortex Search for deep dives into unstructured customer feedback and Cortex Analyst for conversational insights from structured business metrics, we've brought a truly unified business intelligence to life.\n\nYou saw firsthand the power of this integration: users of all technical levels can now simply ask natural language questions and immediately receive visually rich, actionable answers. This direct and intuitive access to insights fundamentally transforms how organizations can swiftly identify operational risks, precisely quantify financial impact, and pinpoint new growth opportunities. It's clear that Snowflake CoWork empowers rapid, data-driven decision-making, converting what was once fragmented data into clear, compelling business advantage for everyone.\n\n## Governance with Horizon\n![./assets/governance_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/governance_header.png)\n\n### Overview\n\nWithin this vignette, we will explore some of the powerful governance features within Snowflake Horizon. We will begin with a look at Role-Based Access Control (RBAC), before diving into features like automated data classification, tag-based masking policies for column-level security, row-access policies, data quality monitoring, and finally, account-wide security monitoring with the Trust Center.\n\n### What You Will Learn\n- The fundamentals of Role-Based Access Control (RBAC) in Snowflake.\n- How to automatically classify and tag sensitive data.\n- How to implement column-level security with Dynamic Data Masking.\n- How to implement row-level security with Row Access Policies.\n- How to monitor data quality with Data Metric Functions.\n- How to monitor account security with the Trust Center.\n\n### What You Will Build\n- A custom, privileged role.\n- A data classification profile for auto-tagging PII.\n- Tag-based masking policies for string and date columns.\n- A row access policy to restrict data visibility by country.\n- A custom Data Metric Function to check data integrity.\n\n### Get the SQL code and paste it into your SQL File.\n\n**Copy and paste the SQL from this [file](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-4.sql) in a new SQL File to follow along in Snowflake.**\n\n**Note that once you've reached the end of the SQL File you can skip to [Step 29 - Apps & Collaboration](/en/developers/guides/zero-to-snowflake/).** \n\n### Roles and Access Control\n\n\n#### Overview\n\nSnowflake's security model is built on a framework of Role-based Access Control (RBAC) and Discretionary Access Control (DAC). Access privileges are assigned to roles, which are then assigned to users. This creates a powerful and flexible hierarchy for securing objects.\n\n\u003E \n\u003E **[Access Control Overview](https://docs.snowflake.com/en/user-guide/security-access-control-overview)**: To learn more about the key concepts of access control in Snowflake, including securable objects, roles, privileges, and users.\n\n#### Step 1 - Set Context and View Existing Roles\n\nFirst, let's set our context for this exercise and view the roles that already exist in the account.\n\n```sql\nUSE ROLE useradmin;\nUSE DATABASE tb_101;\nUSE WAREHOUSE tb_dev_wh;\n\nSHOW ROLES;\n```\n\n#### Step 2 - Create a Custom Role\n\nWe will now create a custom `tb_data_steward` role. This role will be responsible for managing and protecting our customer data.\n\n```sql\nCREATE OR REPLACE ROLE tb_data_steward\n    COMMENT = 'Custom Role';\n```\n\nThe typical hierarchy of system and custom roles might look something like this:\n\n```\n                                +---------------+\n                                | ACCOUNTADMIN  |\n                                +---------------+\n                                  ^    ^     ^\n                                  |    |     |\n                    +-------------+-+  |    ++-------------+\n                    | SECURITYADMIN |  |    |   SYSADMIN   |\u003C------------+\n                    +---------------+  |    +--------------+             |\n                            ^          |     ^        ^                  |\n                            |          |     |        |                  |\n                    +-------+-------+  |     |  +-----+-------+  +-------+-----+\n                    |   USERADMIN   |  |     |  | CUSTOM ROLE |  | CUSTOM ROLE |\n                    +---------------+  |     |  +-------------+  +-------------+\n                            ^          |     |      ^              ^      ^\n                            |          |     |      |              |      |\n                            |          |     |      |              |    +-+-----------+\n                            |          |     |      |              |    | CUSTOM ROLE |\n                            |          |     |      |              |    +-------------+\n                            |          |     |      |              |           ^\n                            |          |     |      |              |           |\n                            +----------+-----+---+--+--------------+-----------+\n                                                 |\n                                            +----+-----+\n                                            |  PUBLIC  |\n                                            +----------+\n```\nSnowflake System Defined Role Definitions:\n\n- **ORGADMIN**: Role that manages operations at the organization level.\n- **ACCOUNTADMIN**: This is the top-level role in the system and should be granted only to a limited/controlled number of users in your account.\n- **SECURITYADMIN**: Role that can manage any object grant globally, as well as create, monitor, and manage users and roles.\n- **USERADMIN**: Role that is dedicated to user and role management only.\n- **SYSADMIN**: Role that has privileges to create warehouses and databases in an account.\n- **PUBLIC**: PUBLIC is a pseudo-role automatically granted to all users and roles. It can own securable objects, and anything it owns becomes available to every other user and role in the account.\n\n#### Step 3 - Grant Privileges to the Custom Role\n\nWe can't do much with our role without granting privileges to it. Let's switch to the `securityadmin` role to grant our new `tb_data_steward` role the necessary permissions to use a warehouse and access our database schemas and tables.\n\n```sql\nUSE ROLE securityadmin;\n\n-- Grant warehouse usage\nGRANT OPERATE, USAGE ON WAREHOUSE tb_dev_wh TO ROLE tb_data_steward;\n\n-- Grant database and schema usage\nGRANT USAGE ON DATABASE tb_101 TO ROLE tb_data_steward;\nGRANT USAGE ON ALL SCHEMAS IN DATABASE tb_101 TO ROLE tb_data_steward;\n\n-- Grant table-level privileges\nGRANT SELECT ON ALL TABLES IN SCHEMA raw_customer TO ROLE tb_data_steward;\nGRANT ALL ON SCHEMA governance TO ROLE tb_data_steward;\nGRANT ALL ON ALL TABLES IN SCHEMA governance TO ROLE tb_data_steward;\n```\n\n#### Step 4 - Grant and Use the New Role\n\nFinally, we grant the new role to our own user. Then we can switch to the `tb_data_steward` role and run a query to see what data we can access.\n\n```sql\n-- Grant role to your user\nSET my_user = CURRENT_USER();\nGRANT ROLE tb_data_steward TO USER IDENTIFIER($my_user);\n\n-- Switch to the new role\nUSE ROLE tb_data_steward;\n\n-- Run a test query\nSELECT TOP 100 * FROM raw_customer.customer_loyalty;\n```\n\nLooking at the query results, it's clear this table contains a lot of Personally Identifiable Information (PII). In the next sections, we'll learn how to protect it.\n\n### Classification and Auto Tagging\n\n\n#### Overview\n\nA key first step in data governance is identifying and classifying sensitive data. Snowflake Horizon's auto-tagging capability can automatically discover sensitive information by monitoring columns in your schemas. We can then use these tags to apply security policies.\n\n\u003E \n\u003E **[Automatic Classification](https://docs.snowflake.com/en/user-guide/classify-auto)**: Learn how Snowflake can automatically classify sensitive data based on a schedule, simplifying governance at scale.\n\n#### Step 1 - Create PII Tag and Grant Privileges\n\nUsing the `accountadmin` role, we'll create a `pii` tag in our `governance` schema. We will also grant the necessary privileges to our `tb_data_steward` role to perform classification.\n\n```sql\nUSE ROLE accountadmin;\n\nCREATE OR REPLACE TAG governance.pii;\nGRANT APPLY TAG ON ACCOUNT TO ROLE tb_data_steward;\n\nGRANT EXECUTE AUTO CLASSIFICATION ON SCHEMA raw_customer TO ROLE tb_data_steward;\nGRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN TO ROLE tb_data_steward;\nGRANT CREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE ON SCHEMA governance TO ROLE tb_data_steward;\n```\n\n#### Step 2 - Create a Classification Profile\n\nNow, as the `tb_data_steward`, we'll create a classification profile. This profile defines how auto-tagging will behave.\n\n```sql\nUSE ROLE tb_data_steward;\n\nCREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE\n  governance.tb_classification_profile(\n    {\n      'minimum_object_age_for_classification_days': 0,\n      'maximum_classification_validity_days': 30,\n      'auto_tag': true\n    });\n```\n\n#### Step 3 - Map Semantic Categories to the PII Tag\n\nNext, we'll define a mapping that tells the classification profile to apply our `governance.pii` tag to any column whose `SEMANTIC_CATEGORY` matches common PII types like `NAME`, `PHONE_NUMBER`, `EMAIL`, etc.\n\n```sql\nCALL governance.tb_classification_profile!SET_TAG_MAP(\n  {'column_tag_map':[\n    {\n      'tag_name':'tb_101.governance.pii',\n      'tag_value':'pii',\n      'semantic_categories':['NAME', 'PHONE_NUMBER', 'POSTAL_CODE', 'DATE_OF_BIRTH', 'CITY', 'EMAIL']\n    }]});\n```\n\n#### Step 4 - Run Classification and View Results\n\nLet's manually trigger the classification process on our `customer_loyalty` table. Then, we can query the `INFORMATION_SCHEMA` to see the tags that were automatically applied.\n\n```sql\n-- Trigger classification\nCALL SYSTEM$CLASSIFY('tb_101.raw_customer.customer_loyalty', 'tb_101.governance.tb_classification_profile');\n\n-- View applied tags\nSELECT \n    column_name,\n    tag_database,\n    tag_schema,\n    tag_name,\n    tag_value,\n    apply_method\nFROM TABLE(INFORMATION_SCHEMA.TAG_REFERENCES_ALL_COLUMNS('raw_customer.customer_loyalty', 'table'));\n```\n\nNotice that columns identified as PII now have our custom `governance.pii` tag applied.\n\n### Masking Policies\n\n\n#### Overview\n\nNow that our sensitive columns are tagged, we can use Dynamic Data Masking to protect them. A masking policy is a schema-level object that determines whether a user sees the original data or a masked version at query time. We can apply these policies directly to our `pii` tag.\n\n\u003E \n\u003E **[Column-level Security](https://docs.snowflake.com/en/user-guide/security-column-intro)**: Column-level Security includes Dynamic Data Masking and External Tokenization to protect sensitive data.\n\n#### Step 1 - Create Masking Policies\n\nWe'll create two policies: one to mask string data and one to mask date data. The logic is simple: if the user's role is not privileged (i.e., not `ACCOUNTADMIN` or `TB_ADMIN`), return a masked value. Otherwise, return the original value.\n\n```sql\n-- Create the masking policy for sensitive string data\nCREATE OR REPLACE MASKING POLICY governance.mask_string_pii AS (original_value STRING)\nRETURNS STRING -\u003E\n  CASE WHEN\n    CURRENT_ROLE() NOT IN ('ACCOUNTADMIN', 'TB_ADMIN')\n    THEN '****MASKED****'\n    ELSE original_value\n  END;\n\n-- Now create the masking policy for sensitive DATE data\nCREATE OR REPLACE MASKING POLICY governance.mask_date_pii AS (original_value DATE)\nRETURNS DATE -\u003E\n  CASE WHEN\n    CURRENT_ROLE() NOT IN ('ACCOUNTADMIN', 'TB_ADMIN')\n    THEN DATE_TRUNC('year', original_value)\n    ELSE original_value\n  END;\n```\n\n#### Step 2 - Apply Masking Policies to the Tag\n\nThe power of tag-based governance comes from applying the policy once to the tag. This action automatically protects all columns that have that tag, now and in the future.\n\n```sql\nALTER TAG governance.pii SET\n    MASKING POLICY governance.mask_string_pii,\n    MASKING POLICY governance.mask_date_pii;\n```\n\n#### Step 3 - Test the Policies\n\nLet's test our work. First, switch to the unprivileged `public` role and query the table. The PII columns should be masked.\n\n```sql\nUSE ROLE public;\nSELECT TOP 100 * FROM raw_customer.customer_loyalty;\n```\n\nNow, switch to a privileged role, `tb_admin`. The data should now be fully visible.\n\n```sql\nUSE ROLE tb_admin;\nSELECT TOP 100 * FROM raw_customer.customer_loyalty;\n```\n\n### Row Access Policies\n\n\n#### Overview\n\nIn addition to masking columns, Snowflake allows you to filter which rows are visible to a user with Row Access Policies. The policy evaluates each row against rules you define, often based on the user's role or other session attributes.\n\n\u003E \n\u003E **[Row-level Security](https://docs.snowflake.com/en/user-guide/security-row-intro)**: Row Access Policies determine which rows are visible in a query result, enabling fine-grained access control.\n\n#### Step 1 - Create a Policy Mapping Table\n\nA common pattern for row access policies is to use a mapping table that defines which roles can see which data. We'll create a table that maps roles to the `country` values they are permitted to see.\n\n```sql\nUSE ROLE tb_data_steward;\n\nCREATE OR REPLACE TABLE governance.row_policy_map\n    (role STRING, country_permission STRING);\n\n-- Map the tb_data_engineer role to only see 'United States' data\nINSERT INTO governance.row_policy_map\n    VALUES('tb_data_engineer', 'United States');\n```\n\n#### Step 2 - Create the Row Access Policy\n\nNow we create the policy itself. This policy returns `TRUE` (allowing the row to be seen) if the user's role is an admin role OR if the user's role exists in our mapping table and matches the `country` value of the current row.\n\n```sql\nCREATE OR REPLACE ROW ACCESS POLICY governance.customer_loyalty_policy\n    AS (country STRING) RETURNS BOOLEAN -\u003E\n        CURRENT_ROLE() IN ('ACCOUNTADMIN', 'SYSADMIN') \n        OR EXISTS \n            (\n            SELECT 1 FROM governance.row_policy_map rp\n            WHERE\n                UPPER(rp.role) = CURRENT_ROLE()\n                AND rp.country_permission = country\n            );\n```\n\n#### Step 3 - Apply and Test the Policy\n\nApply the policy to the `country` column of our `customer_loyalty` table. Then, switch to the `tb_data_engineer` role and query the table.\n\n```sql\n-- Apply the policy\nALTER TABLE raw_customer.customer_loyalty\n    ADD ROW ACCESS POLICY governance.customer_loyalty_policy ON (country);\n\n-- Switch role to test the policy\nUSE ROLE tb_data_engineer;\n\n-- Query the table\nSELECT TOP 100 * FROM raw_customer.customer_loyalty;\n```\n\nThe result set should now only contain rows where the `country` is 'United States'.\n\n### Data Metric Functions\n\n\n#### Overview\n\nData governance isn't just about security; it's also about trust and reliability. Snowflake helps maintain data integrity with Data Metric Functions (DMFs). You can use system-defined DMFs or create your own to run automated quality checks on your tables.\n\n\u003E \n\u003E **[Data Quality Monitoring](https://docs.snowflake.com/en/user-guide/data-quality-intro)**: Learn how to ensure data consistency and reliability using built-in and custom Data Metric Functions.\n\n#### Step 1 - Use System DMFs\n\nLet's use a few of Snowflake's built-in DMFs to check the quality of our `order_header` table.\n\n```sql\nUSE ROLE tb_data_steward;\n\n-- This will return the percentage of null customer IDs.\nSELECT SNOWFLAKE.CORE.NULL_PERCENT(SELECT customer_id FROM raw_pos.order_header);\n\n-- We can use DUPLICATE_COUNT to check for duplicate order IDs.\nSELECT SNOWFLAKE.CORE.DUPLICATE_COUNT(SELECT order_id FROM raw_pos.order_header); \n\n-- Average order total amount for all orders.\nSELECT SNOWFLAKE.CORE.AVG(SELECT order_total FROM raw_pos.order_header);\n```\n\n#### Step 2 - Create a Custom DMF\n\nWe can also create custom DMFs for our specific business logic. Let's create one that checks for orders where the `order_total` does not equal `unit_price * quantity`.\n\n```sql\nCREATE OR REPLACE DATA METRIC FUNCTION governance.invalid_order_total_count(\n    order_prices_t table(\n        order_total NUMBER,\n        unit_price NUMBER,\n        quantity INTEGER\n    )\n)\nRETURNS NUMBER\nAS\n'SELECT COUNT(*)\n FROM order_prices_t\n WHERE order_total != unit_price * quantity';\n```\n\n#### Step 3 - Test and Schedule the DMF\n\nLet's insert a bad record to test our DMF. Then, we'll call the function to see if it catches the error. The record we will be inserting is ordering 2 items with a unit price of $5, and a total price of $5 instead of the correct total $10.\n\n```sql\n-- Insert a record with an incorrect total price\nINSERT INTO raw_pos.order_detail\nSELECT 904745311, 459520442, 52, null, 0, 2, 5.0, 5.0, null;\n\n-- Call the custom DMF on the order detail table.\nSELECT governance.invalid_order_total_count(\n    SELECT price, unit_price, quantity FROM raw_pos.order_detail\n) AS num_orders_with_incorrect_price;\n```\n\nTo automate this check, we can associate the DMF with the table and set a schedule to have it run automatically whenever the data changes, then add it to the `order_detail` table.\n\n```sql\nALTER TABLE raw_pos.order_detail\n    SET DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';\n\nALTER TABLE raw_pos.order_detail\n    ADD DATA METRIC FUNCTION governance.invalid_order_total_count\n    ON (price, unit_price, quantity);\n```\n\n### Trust Center\n\n\n#### Overview\n\nThe Trust Center provides a centralized dashboard for monitoring security risks across your entire Snowflake account. It uses scheduled scanners to check for issues like missing Multi-Factor Authentication (MFA), over-privileged roles, or inactive users, and then provides recommended actions.\n\n\u003E \n\u003E **[Trust Center Overview](https://docs.snowflake.com/en/user-guide/trust-center/overview)**: The Trust Center enables automatic checks to evaluate and monitor security risks on your account.\n\n#### Step 1 - Grant Privileges and Navigate to the Trust Center\n\nFirst, an `ACCOUNTADMIN` needs to grant the `TRUST_CENTER_ADMIN` application role to a user or role. We'll grant it to our `tb_admin` role.\n\n```sql\nUSE ROLE accountadmin;\nGRANT APPLICATION ROLE SNOWFLAKE.TRUST_CENTER_ADMIN TO ROLE tb_admin;\nUSE ROLE tb_admin; \n```\n\nNow, navigate to the Trust Center in the Snowsight UI:\n\n1.  Click the **Monitoring** tab in the left navigation bar.\n2.  Click on **Trust Center**.\n\n#### Step 2 - Enable Scanner Packages\n\nBy default, most scanner packages are disabled. Let's enable them to get a comprehensive view of our account's security posture.\n\n1.  In the Trust Center, click the **Scanner Packages** tab.\n2.  Click on **CIS Benchmarks**.\n\n![assets/vignette-4/trust_center_scanner_packages.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-4/trust_center_scanner_packages.png)\n\n3.  Click the **Enable Package** button.\n\n![assets/vignette-4/trust_center_cis_scanner_package.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-4/trust_center_cis_scanner_package.png)\n\n4.  In the modal, set the **Frequency** to `Monthly` and click **Continue**.\n\n![assets/vignette-4/enable_scanner_package.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-4/enable_scanner_package.png)\n\n5.  Repeat this process for the **Threat Intelligence** scanner package.\n\n#### Step 3 - Review Findings\n\nAfter the scanners have had a moment to run, navigate back to the **Findings** tab.\n\n  - You will see a dashboard summarizing violations by severity.\n  - The list below details each violation, its severity, and the scanner that found it.\n  - Clicking on any violation will open a details pane with a summary and recommended remediation steps.\n  - You can filter the list by severity, status, or scanner package to focus on the most critical issues.\n\n![assets/vignette-4/trust_center_violation_detail_pane.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-4/trust_center_violation_detail_pane.png)\n\nThis powerful tool gives you a continuous, actionable overview of your Snowflake account's security health.\n\n## Apps & Collaboration\n\n![./assets/appscollab_header.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/appscollab_header.png)\n\n### Overview\n\nIn this vignette, we will explore how Snowflake facilitates seamless data collaboration through the Snowflake Marketplace. We will see how easy it is to acquire live, ready-to-query third-party datasets and immediately join them with our own internal data to unlock new insights—all without the need for traditional ETL pipelines.\n\n### What You Will Learn\n- How to discover and acquire data from the Snowflake Marketplace.\n- How to instantly query live, shared data.\n- How to join Marketplace data with your own account data to create enriched views.\n- How to leverage third-party Point-of-Interest (POI) data for deeper analysis.\n- How to use Common Table Expressions (CTEs) to structure complex queries.\n\n### What You Will Build\n- Enriched analytical Views that combine internal sales data with external weather and POI data.\n\n### Get the SQL code and paste it into your SQL File.\n\n**Copy and paste the SQL code from this [file](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/scripts/vignette-5.sql) in a new SQL File to follow along in Snowflake.**\n\n### Acquire Data from Snowflake Marketplace\n\n\n#### Overview\n\nOne of our analysts wants to see how weather impacts food truck sales. To do this, they'll use the Snowflake Marketplace to get live weather data from Weather Source, which can then be joined directly with our own sales data. The Marketplace allows us to access live, ready-to-query data from third-party providers without any data duplication or ETL.\n\n\u003E \n\u003E **[Introduction to the Snowflake Marketplace](https://docs.snowflake.com/en/user-guide/data-sharing-intro)**: The Marketplace provides a centralized hub to discover and access a wide variety of third-party data, applications, and AI products.\n\n#### Step 1 - Set Initial Context\n\nFirst, let's set our context to use the `accountadmin` role, which is required to acquire data from the Marketplace.\n\n```sql\nUSE DATABASE tb_101;\nUSE ROLE accountadmin;\nUSE WAREHOUSE tb_de_wh;\n```\n\n#### Step 2 - Acquire Weather Source Data\n\nFollow these steps in the Snowsight UI to get the Weather Source data:\n\n1.  Make sure you are using the `ACCOUNTADMIN` role.\n2.  Navigate to **Data Products** » **Marketplace** from the left-hand navigation menu.\n3.  In the search bar, enter: `Weather Source frostbyte`.\n![assets/vignette-5/weather_source_search.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-5/weather_source_search.png)\n\n4.  Click on the **Weather Source LLC: frostbyte** listing.\n![assets/vignette-5/weather_source_listing.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-5/weather_source_listing.png)\n\n5.  Click the **Get** button.\n6.  Click to expand the Options, then change the **Database name** to `ZTS_WEATHERSOURCE`.\n7.  Grant access to the **PUBLIC** role.\n8.  Click **Get**.\n\u003C!-- TODO add picture with settings --\u003E\n\nThis process makes the Weather Source data instantly available in our account as a new database, ready to be queried.\n\n### Integrate Account Data with Shared Data\n\n\n#### Overview\n\nWith the Weather Source data now in our account, our analyst can immediately begin joining it with our existing Tasty Bytes data. There's no need to wait for an ETL job to run.\n\n#### Step 1 - Explore the Shared Data\n\nLet's switch to the `tb_analyst` role and begin exploring the new weather data. We'll start by getting a list of all distinct US cities available in the share, along with some average weather metrics.\n\n```sql\nUSE ROLE tb_analyst;\n\nSELECT \n    DISTINCT city_name,\n    AVG(max_wind_speed_100m_mph) AS avg_wind_speed_mph,\n    AVG(avg_temperature_air_2m_f) AS avg_temp_f,\n    AVG(tot_precipitation_in) AS avg_precipitation_in,\n    MAX(tot_snowfall_in) AS max_snowfall_in\nFROM zts_weathersource.onpoint_id.history_day\nWHERE country = 'US'\nGROUP BY city_name;\n```\n\n#### Step 2 - Create an Enriched View\n\nNow, let's create a view that joins our raw `country` data with the historical daily weather data from the Weather Source share. This gives us a unified view of weather metrics for the cities where Tasty Bytes operates.\n\n```sql\nCREATE OR REPLACE VIEW harmonized.daily_weather_v\nCOMMENT = 'Weather Source Daily History filtered to Tasty Bytes supported Cities'\n    AS\nSELECT\n    hd.*,\n    TO_VARCHAR(hd.date_valid_std, 'YYYY-MM') AS yyyy_mm,\n    pc.city_name AS city,\n    c.country AS country_desc\nFROM zts_weathersource.onpoint_id.history_day hd\nJOIN zts_weathersource.onpoint_id.postal_codes pc\n    ON pc.postal_code = hd.postal_code\n    AND pc.country = hd.country\nJOIN raw_pos.country c\n    ON c.iso_country = hd.country\n    AND c.city = hd.city_name;\n```\n\n#### Step 3 - Analyze and Visualize Enriched Data\n\nUsing our new view, the analyst can query for the average daily temperature in Hamburg, Germany for February 2022. Run the query below, then we'll visualize this as a line chart directly in Snowsight.\n\n```sql\nSELECT\n    dw.country_desc,\n    dw.city_name,\n    dw.date_valid_std,\n    AVG(dw.avg_temperature_air_2m_f) AS average_temp_f\nFROM harmonized.daily_weather_v dw\nWHERE dw.country_desc = 'Germany'\n    AND dw.city_name = 'Hamburg'\n    AND YEAR(date_valid_std) = 2022\n    AND MONTH(date_valid_std) = 2\nGROUP BY dw.country_desc, dw.city_name, dw.date_valid_std\nORDER BY dw.date_valid_std DESC;\n```\n\n1.  Run the query above.\n2.  In the **Results** pane, click **Chart**.\n3.  Set the **Chart Type** to `Line`.\n4.  Set the **X-Axis** to `DATE_VALID_STD`.\n5.  Set the **Y-Axis** to `AVERAGE_TEMP_F`.\n\n![./assets//vignette-5/line_chart.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake//vignette-5/line_chart.png)\n\n#### Step 4 - Create a Sales and Weather View\n\nLet's take it a step further and combine our `orders_v` view with our new `daily_weather_v` to see how sales correlate with weather conditions.\n\n```sql\nCREATE OR REPLACE VIEW analytics.daily_sales_by_weather_v\nCOMMENT = 'Daily Weather Metrics and Orders Data'\nAS\nWITH daily_orders_aggregated AS (\n    SELECT DATE(o.order_ts) AS order_date, o.primary_city, o.country,\n        o.menu_item_name, SUM(o.price) AS total_sales\n    FROM harmonized.orders_v o\n    GROUP BY ALL\n)\nSELECT\n    dw.date_valid_std AS date, dw.city_name, dw.country_desc,\n    ZEROIFNULL(doa.total_sales) AS daily_sales, doa.menu_item_name,\n    ROUND(dw.avg_temperature_air_2m_f, 2) AS avg_temp_fahrenheit,\n    ROUND(dw.tot_precipitation_in, 2) AS avg_precipitation_inches,\n    ROUND(dw.tot_snowdepth_in, 2) AS avg_snowdepth_inches,\n    dw.max_wind_speed_100m_mph AS max_wind_speed_mph\nFROM harmonized.daily_weather_v dw\nLEFT JOIN daily_orders_aggregated doa\n    ON dw.date_valid_std = doa.order_date\n    AND dw.city_name = doa.primary_city\n    AND dw.country_desc = doa.country\nORDER BY date ASC;\n```\n\n#### Step 5 - Answer a Business Question\n\nOur analyst can now answer complex business questions, such as: \"How does significant precipitation impact our sales figures in the Seattle market?\" \n\n```sql\nSELECT * EXCLUDE (city_name, country_desc, avg_snowdepth_inches, max_wind_speed_mph)\nFROM analytics.daily_sales_by_weather_v\nWHERE \n    country_desc = 'United States'\n    AND city_name = 'Seattle'\n    AND avg_precipitation_inches \u003E= 1.0\nORDER BY date ASC;\n```\n\nLet's also visualize the results again in Snowsight, but as a bar chart this time.\n\n1.  Run the query above.\n2.  In the **Results** pane, click **Chart**.\n3.  Set the **Chart Type** to `Bar`.\n4.  Set the **X-Axis** to `MENU_ITEM_NAME`.\n5.  Set the **Y-Axis** to `DAILY_SALES`.\n\n![./assets/vignette-5/bar_chart.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-5/bar_chart.png)\n\n### Explore Point-of-Interest Data\n\n\n#### Overview\n\nOur analyst now wants more insight into the specific locations of our food trucks. We can get Point-of-Interest (POI) data from Safegraph, another provider on the Snowflake Marketplace, to enrich our analysis even further.\n\n#### Step 1 - Acquire Safegraph POI Data\n\nFollow the same procedure as before to acquire the Safegraph data from the Marketplace.\n\n1.  Ensure you are using the `ACCOUNTADMIN` role.\n2.  Navigate to **Data Products** » **Marketplace**.\n3.  In the search bar, enter: `safegraph frostbyte`.\n4.  Select the **Safegraph: frostbyte** listing and click **Get**.\n5.  Click to expand the Options, then set the **Database name** to `ZTS_SAFEGRAPH`.\n6.  Grant access to the **PUBLIC** role.\n7.  Click **Get**.\n\n#### Step 2 - Create a POI View\n\nLet's create a view that joins our internal `location` data with the Safegraph POI data.\n\n```sql\nCREATE OR REPLACE VIEW harmonized.tastybytes_poi_v\nAS \nSELECT \n    l.location_id, sg.postal_code, sg.country, sg.city, sg.iso_country_code,\n    sg.location_name, sg.top_category, sg.category_tags,\n    sg.includes_parking_lot, sg.open_hours\nFROM raw_pos.location l\nJOIN zts_safegraph.public.frostbyte_tb_safegraph_s sg \n    ON l.location_id = sg.location_id\n    AND l.iso_country_code = sg.iso_country_code;\n```\n\n#### Step 3 - Combine POI and Weather Data\n\nNow we can combine all three datasets: our internal data, the weather data, and the POI data. Let's find our top 3 windiest truck locations in the US in 2022.\n\n```sql\nSELECT TOP 3\n    p.location_id, p.city, p.postal_code,\n    AVG(hd.max_wind_speed_100m_mph) AS average_wind_speed\nFROM harmonized.tastybytes_poi_v AS p\nJOIN zts_weathersource.onpoint_id.history_day AS hd\n    ON p.postal_code = hd.postal_code\nWHERE\n    p.country = 'United States'\n    AND YEAR(hd.date_valid_std) = 2022\nGROUP BY p.location_id, p.city, p.postal_code\nORDER BY average_wind_speed DESC;\n```\n\n#### Step 4 - Analyze Brand Resilience to Weather\n\nFinally, let's conduct a more complex analysis to determine brand resilience. We'll use a Common Table Expression (CTE) to first find the windiest locations, and then compare sales on \"calm\" vs. \"windy\" days for each truck brand at those locations. This can help inform operational decisions, like offering \"Windy Day\" promotions for brands that are less resilient.\n\n```sql\nWITH TopWindiestLocations AS (\n    SELECT TOP 3\n        p.location_id\n    FROM harmonized.tastybytes_poi_v AS p\n    JOIN zts_weathersource.onpoint_id.history_day AS hd ON p.postal_code = hd.postal_code\n    WHERE p.country = 'United States' AND YEAR(hd.date_valid_std) = 2022\n    GROUP BY p.location_id, p.city, p.postal_code\n    ORDER BY AVG(hd.max_wind_speed_100m_mph) DESC\n)\nSELECT\n    o.truck_brand_name,\n    ROUND(AVG(CASE WHEN hd.max_wind_speed_100m_mph \u003C= 20 THEN o.order_total END), 2) AS avg_sales_calm_days,\n    ZEROIFNULL(ROUND(AVG(CASE WHEN hd.max_wind_speed_100m_mph \u003E 20 THEN o.order_total END), 2)) AS avg_sales_windy_days\nFROM analytics.orders_v AS o\nJOIN zts_weathersource.onpoint_id.history_day AS hd\n    ON o.primary_city = hd.city_name AND DATE(o.order_ts) = hd.date_valid_std\nWHERE o.location_id IN (SELECT location_id FROM TopWindiestLocations)\nGROUP BY o.truck_brand_name\nORDER BY o.truck_brand_name;\n```\n\n### Introduction to Streamlit in Snowflake\n\n![./assets/streamlit-logo.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/streamlit-logo.png)\n\nStreamlit is an open-source Python library designed for easily creating and sharing web applications for machine learning and data science. It allows for the rapid development and deployment of data-driven apps.\n\nStreamlit in Snowflake empowers developers to securely build, deploy, and share applications directly within Snowflake. This integration allows you to build apps that process and utilize data stored in Snowflake without the need of moving the data or application code to an external system.\n***\n#### Step 1 - Create Streamlit App\n**Let's create our first Streamlit app, an app that will display and chart sales data for each menu item in Japan for February 2022.**\n\n1. First, navigate to **Projects** » **Streamlit**, then click on the blue '+ Streamlit App' button in the top right to create a new app.\n\n2. Enter these values in the 'Create Streamlit App' pop-up:\n    - App title: Menu Item Sales\n    - App location:\n        - Database: tb_101\n        - Schema: Analytics\n    - App warehouse: tb_dev_wh\n3. Now click 'Create'.\nWhen the app first loads, you'll see a sample app on the right pane and the app's code in the editor pane to the left.\n\n4. Select all of the code and remove it.\n5. **Next copy + paste this [code](https://github.com/Snowflake-Labs/sfguide-getting-started-from-zero-to-snowflake/blob/main/streamlit/streamlit_app.py) in the blank editor window, then click 'Run' in the top right.**\n\n![./assets/vignette-5/create_streamlit_app.gif](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/zero-to-snowflake/vignette-5/create_streamlit_app.gif)\n\n## Conclusion and Resources\n\n#### Overview\n\nCongratulations! You have successfully completed the entire Tasty Bytes - Zero to Snowflake journey.\n\nYou have now built and configured warehouses, cloned and transformed data, recovered a dropped table with Time Travel, and built an automated data pipeline for semi-structured data. You've also unlocked insights using AI by generating analysis with simple AISQL functions and accelerating your workflow with Snowflake Copilot. Furthermore, you have implemented a robust governance framework with roles and policies and seamlessly enriched your own data with live datasets from the Snowflake Marketplace.\n\nIf you would like to re-run this Quickstart, please run the complete `RESET` script located at the bottom of your SQL file.\n\n#### What You Learned\n- **Warehousing and Performance:** How to create, manage, and scale virtual warehouses, and leverage Snowflake's results cache.\n- **Data Transformation:** How to use Zero-Copy Cloning for safe development, transform data, and instantly recover from errors using Time Travel and `UNDROP`.\n- **Data Pipelines:** How to ingest data from external stages, process semi-structured `VARIANT` data, and build automated ELT pipelines with Dynamic Tables.\n- **Snowflake Cortex AI** How to leverage Snowflake Cortex AI to build a customer analytics platform.\n- **Data Governance:** How to implement a security framework using Role-Based Access Control, automated PII classification, tag-based Data Masking, and Row Access Policies.\n- **Data Collaboration:** How to discover and acquire live, third-party datasets from the Snowflake Marketplace and seamlessly join them with your own data to generate new insights.\n\n#### Resources\n- [Virtual Warehouses & Settings](https://docs.snowflake.com/en/user-guide/warehouses-overview)\n- [Resource Monitors](https://docs.snowflake.com/en/user-guide/resource-monitors)\n- [Budgets](https://docs.snowflake.com/en/user-guide/budgets)\n- [Universal Search](https://docs.snowflake.com/en/user-guide/ui-snowsight-universal-search)\n- [Ingestion from External Stage](https://docs.snowflake.com/en/sql-reference/sql/copy-into-table)\n- [Semi-Structured Data](https://docs.snowflake.com/en/sql-reference/data-types-semistructured)\n- [Dynamic Tables](https://docs.snowflake.com/en/user-guide/dynamic-tables-about)\n- [Roles & Access Control](https://docs.snowflake.com/en/user-guide/security-access-control-overview)\n- [Tag-Based Classification](https://docs.snowflake.com/en/user-guide/classify-auto)\n- [Column Level Security with Masking Policies](https://docs.snowflake.com/en/user-guide/security-column-intro)\n- [Row Level Security with Row Access Policies](https://docs.snowflake.com/en/user-guide/security-row-intro)\n- [Data Metric Functions](https://docs.snowflake.com/en/user-guide/data-quality-intro)\n- [Trust Center](https://docs.snowflake.com/en/user-guide/trust-center/overview)\n- [Data Sharing](https://docs.snowflake.com/en/user-guide/data-sharing-intro)\n- [Snowflake Cortex Playground](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-playground)\n- [AI SQL Functions in Snowflake Cortex](https://docs.snowflake.com/en/user-guide/snowflake-cortex/aisql)\n\u003C!-- - [Snowflake Copilot](https://docs.snowflake.com/en/user-guide/snowflake-copilot) --\u003E\n- [Snowflake Cortex Search Overview](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-search/cortex-search-overview)\n- [Snowflake Cortex Analyst](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst)\n","multiValue":false,":type":"text/x-markdown"},"quickstartArticleLogoImage":{"dataType":"string","title":"Quickstart Article Logo Image","multiValue":false,":type":"text/plain"}},"elementsOrder":["quickstartArticleBody","quickstartArticleLogoImage"],":items":{},":itemsOrder":[],"model":"snowflake-site/models/quickstart-article"},"flexible_column_cont":{"id":"flexible-column-container-e4bee13a69","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-859e6872e4",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"quickstart_last_modi":{"id":"quickstart-last-modified-a0d351a434","icon":{"id":"icon","icon":"calendar",":type":"snowflake-site/components/icon","appliedCssClassNames":"snowflake-icon-blue"},"lastModifiedDatePrefix":"Updated","lastModifiedDate":"2025-12-11",":type":"snowflake-site/components/quickstart/quickstart-last-modified","appliedCssClassNames":"snowflake-responsive-component-top-padding-small"},"text":{"id":"text-a5b9da2c63","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"]},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-c57023f935",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{},":itemsOrder":[]},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["contentfragment","flexible_column_cont"]},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-cc0af1c939",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"quickstart_table_of_":{"layout":"SIMPLE","id":"container-2dc12741a1","isDeveloperGuidesPage":false,":type":"snowflake-site/components/quickstart/quickstart-table-of-content/quickstart-table-of-content-container",":items":{"quickstart_table_of_":{"id":"quickstart-table-of-content-ecd9818310","fragmentPath":"/content/dam/snowflake-site/en/content-fragments/quickstarts/zero-to-snowflake",":type":"snowflake-site/components/quickstart/quickstart-table-of-content","headings":["\u003Ch2\u003EOverview\u003C/h2\u003E","\u003Ch2\u003ESetup\u003C/h2\u003E","\u003Ch2\u003EGet Started with Snowflake\u003C/h2\u003E","\u003Ch2\u003ESimple Data Pipeline\u003C/h2\u003E","\u003Ch2\u003ESnowflake Cortex AI\u003C/h2\u003E","\u003Ch2\u003EGovernance with Horizon\u003C/h2\u003E","\u003Ch2\u003EApps & Collaboration\u003C/h2\u003E","\u003Ch2\u003EConclusion and Resources\u003C/h2\u003E"]},"quickstart_button":{"id":"quickstart-button-96b8a8dd10","fragmentPath":"/content/dam/snowflake-site/en/content-fragments/quickstarts/zero-to-snowflake",":type":"snowflake-site/components/quickstart/quickstart-button","appliedCssClassNames":"snowflake-responsive-component-top-padding-none"}},":itemsOrder":["quickstart_table_of_","quickstart_button"]}},":itemsOrder":["quickstart_table_of_"]},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"},"markup_editor":{"id":"markup-editor-ad865f2fd0","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-23d96f6315",":type":"snowflake-site/components/modal/modal-container",":items":{},":itemsOrder":[]},"experiencefragment-footer":{"id":"experiencefragment-8615ebe6bc","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":items":{"root":{"additionalClasses":"sf-footer","layout":"SIMPLE","id":"container-3ab0c84eee",":type":"snowflake-site/components/container",":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-6d50338c0d",":type":"snowflake-site/components/container",":items":{"flexible_column_cont":{"id":"flexible-column-container-eecb4f1ce7","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-d6cec56444",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":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-ab507e650a",":type":"snowflake-site/components/container",":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-32b9fcc16b",":type":"snowflake-site/components/container",":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-17507a985a",":type":"snowflake-site/components/container",":items":{"text":{"id":"text-769f1cddea","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-016bd75a67","marketoForm":{"formId":"45871","successUrl":null,"edit":false,"hidden":null,"script":null,"values":null},"marketoConfigured":true,"formConfigured":true,"munchkinId":"252-RFO-227","serverInstance":"252-RFO-227.mktoweb.com",":type":"snowflake-site/components/form/marketo-v2"}},":itemsOrder":["text","marketo_v2"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small"}},":itemsOrder":["container"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small"},"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-c1ad27a96e",":type":"snowflake-site/components/container",":items":{"text":{"id":"text-8fe914e3aa","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-b26d714127","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"},"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-d66735fca9",":type":"snowflake-site/components/container",":items":{"text":{"id":"text-515d23368f","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"},"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-cf3341fe27",":type":"snowflake-site/components/container",":items":{"text":{"id":"text-5bf8d50604","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"},"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-d0b4b6f9df",":type":"snowflake-site/components/container",":items":{"text":{"id":"text-b9b4282a34","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"}},":itemsOrder":["container_1622723482","container","container_copy_copy","container_copy","container_copy_copy_"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small"}},":itemsOrder":["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"},"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-59bd3f94cb",":type":"snowflake-site/components/container",":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-5c62dea96d",":type":"snowflake-site/components/container",":items":{"flexible_column_cont":{"id":"flexible-column-container-4f957cb48c","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-1bba68978b",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":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-4100b3222d",":type":"snowflake-site/components/container",":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-77ae62aba7",":type":"snowflake-site/components/container",":items":{"image":{"id":"image-dc490d6d10","additionalClasses":"sf-footer__logo","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","alt":"Snowflake logo","imageLink":{"valid":true,"url":"/en/"},"lazyEnabled":true,"height":"64","width":"64",":type":"snowflake-site/components/image"}},":itemsOrder":["image"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small"},"text_copy_copy_16360":{"id":"text-72479967a7","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-30c9752f86","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"}},":itemsOrder":["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"}},":itemsOrder":["container_112062425"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-none"},"markup_editor_copy":{"id":"markup-editor-59a97e06eb","title":"New css","cssContent":".snowflake-image-container img{background-color:transparent}div.snowflake-person-chip-avatar{width:80px !important}#snowflake-blog-template-main-container .snowflake-quote-item-card{margin-top:40px}#snowflake-blog-template-main-container .aem-GridColumn:has(.vertical-video){background-color:#000;border-radius:16px;overflow:hidden}#snowflake-blog-template-main-container .is-vertical img{max-width:400px;margin-left:auto;margin-right:auto}#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"]}},":itemsOrder":["root"]},"markup_editor":{"id":"markup-editor-4a60e9ab6a","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,":path":"/content/snowflake-site/global/en/developers/guides/zero-to-snowflake",":hierarchyType":"page","locale":"en"}
  