{"allowedRenditionsWidth":["320","480","640","768","960","1200","1440","1920"],"clientlibsAsync":false,"dataLayerClientlibIncluded":true,"dataLayerName":"adobeDataLayer","templateName":"quickstart-page-template","cssClassNames":"page basicpage summit-page","designPath":"/libs/settings/wcm/designs/default","brandSlug":"","componentsResourceTypes":["snowflake-site/components/quickstart/quickstart-button","snowflake-site/components/nav/nav-column/nav-column-container","snowflake-site/components/structure/page","snowflake-site/components/button","snowflake-site/components/quickstart/quickstart-hero","snowflake-site/components/quickstart/quickstart-table-of-content","snowflake-site/components/experiencefragment","snowflake-site/components/mega-header","snowflake-site/components/modal/modal-container","snowflake-site/components/image","snowflake-site/components/nav/nav-dropdown-header","snowflake-site/components/wistia-video/cta","nt:folder","snowflake-site/components/container","snowflake-site/components/nav/nav-dropdown-menu","snowflake-site/components/nav/nav-column","snowflake-site/components/flexible-column-container","snowflake-site/components/quickstart/quickstart-table-of-content/quickstart-table-of-content-container","snowflake-site/components/button/embedded","snowflake-site/components/icon","snowflake-site/components/nav/nav-mega","cq:LiveCopy","snowflake-site/components/quickstart/quickstart-last-modified","snowflake-site/components/nav/nav-promo-section","snowflake-site/components/markup-editor","snowflake-site/components/text","snowflake-site/components/title-v2","snowflake-site/components/nav/nav-dropdown-footer","nt:unstructured","nt:file","snowflake-site/components/contentfragment","snowflake-site/components/nav/nav-item","snowflake-site/components/nav/nav-promo-card","snowflake-site/components/form/marketo-v2","snowflake-site/components/nav/language-navigation","snowflake-site/components/title","wcm/foundation/components/responsivegrid","nt:resource","snowflake-site/components/structure/xfpage","snowflake-site/components/flexible-column-container/flexible-column-content-container","snowflake-site/components/pushdown-banner"],"lastModifiedDate":1778185493315,"language":"en","description":"Accelerate analytics engineering with dbt Cloud and Snowflake for modular, tested, documented, and collaborative data transformations.","title":"Accelerating Data Teams with Snowflake and dbt platform Hands On Lab","tags":["snowflake-site:taxonomy/solution-center/certification/quickstart","snowflake-site:taxonomy/solution-center/includes/architecture","snowflake-site:taxonomy/product/data-engineering","snowflake-site:taxonomy/solution-center/certification/partner-solution","snowflake-site:taxonomy/snowflake-feature/ingestion"],"analyticsPageType":"quickstart-page-template","analyticsCategory":"general","analyticsSubCategory":"","excludeFromAnalytics":false,"isPasswordProtected":false,":hierarchyType":"page",":path":"/content/snowflake-site/global/en/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab","analyticsContentTags":["snowflake-site:taxonomy/solution-center/certification/quickstart","snowflake-site:taxonomy/solution-center/includes/architecture","snowflake-site:taxonomy/product/data-engineering","snowflake-site:taxonomy/solution-center/certification/partner-solution","snowflake-site:taxonomy/snowflake-feature/ingestion"],"analyticsEnabled":true,"analyticsData":{"excludeFromAnalytics":false,"subCategory":"","pageType":"quickstart-page-template","templateName":"quickstart-page-template","siteName":"snowflake","pageUrl":"/content/snowflake-site/global/en/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab","language":"en","category":"general","pageName":"Accelerating Data Teams with Snowflake and dbt platform Hands On Lab","contentTags":["snowflake-site:taxonomy/solution-center/certification/quickstart","snowflake-site:taxonomy/solution-center/includes/architecture","snowflake-site:taxonomy/product/data-engineering","snowflake-site:taxonomy/solution-center/certification/partner-solution","snowflake-site:taxonomy/snowflake-feature/ingestion"]},"analyticsDebugMode":false,":items":{"root":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","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"},"columnCount":12,":items":{"experiencefragment-banner":{"id":"experiencefragment-341e6a4592","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/master/jcr:content","configured":true,":items":{"root":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"pushdown_banner_copy":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-3701e96ec2",":items":{"pushdown_banner_copy":{"id":"pushdown-banner-d1120981a4","contentHeadline":"Summit Builder Keynote Debut","contentDescription":"Broadcast live on June 23","contentJustifyContent":"center","linkStyle":"text-white","linkCTA":{"id":"link-cta","heapButtonClasses":["pushdown_banner"],"showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://reg.snowflake.com/flow/snowflake/summit26/digitalreg/page/main"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Register now"},":type":"snowflake-site/components/pushdown-banner","appliedCssClassNames":"snowflake-pushdown-banner-text-white snowflake-pushdown-banner-background-black"}},":itemsOrder":["pushdown_banner_copy"],":type":"snowflake-site/components/container"},"image":{":type":"nt:unstructured"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","image","cq:metadata"],":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf"},"experiencefragment-header":{"id":"experiencefragment-4c4797941a","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/jcr:content","configured":true,":items":{"root":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"mega_header":"aem-GridColumn aem-GridColumn--default--12","markup_editor":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-90da32af6a",":items":{"markup_editor":{"id":"markup-editor-79eae039eb","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-e1d6aa8c73","appliedCssClassNames":"snowflake-header-container white",":items":{"nav_mega":{"activeItem":"item_1719963657751_c_663444255","id":"tabs-b7d020f130",":type":"snowflake-site/components/nav/nav-mega",":items":{"item_1719963657751_c_663444255":{"id":"nav-dropdown-menu-9ca9d61e84","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-03bc57e9eb",":items":{"nav_column":{"additionalClasses":"nav-platform-sidebar","numberOfSubColumns":"one-column","minWidth":"230","maxWidth":"350","layout":"SIMPLE","id":"container-9b23a07a0b",":items":{"nav_item_copy_copy_2_793631646":{"id":"nav-item-bcc3dcd846","additionalClasses":"nav-item__platform-parent is-platform","linkDescription":"Develop AI products, apps and more on a fully managed platform that securely connects businesses globally — across any type or scale of data.","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/platform/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"The Snowflake Platform"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-f66a4dfbf8","additionalClasses":"nav-item nav-item--si is-si","linkDescription":"All your knowledge. One trusted enterprise agent.","flag":"NOW GA","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/snowflake-cowork/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake CoWork"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2_836345186":{"id":"nav-item-131e57d939","additionalClasses":"blue-icon is-analytics","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/analytics/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Analytics"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2":{"id":"nav-item-b2549499cd","additionalClasses":"blue-icon is-ai","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/ai/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"AI"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2_1314771042":{"id":"nav-item-f25bf6bcad","additionalClasses":"blue-icon is-data-eng","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/data-engineering/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Data Engineering"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634":{"id":"nav-item-fd253797b4","additionalClasses":"blue-icon is-apps-collab","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/applications-and-collaboration/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Applications & Collaboration"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634_2013333117":{"id":"nav-item-c61d772ff0","additionalClasses":"blue-icon is-transactions","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/transactions/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Transactions"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_copy_2_793631646","nav_item","nav_item_copy_copy_2_836345186","nav_item_copy_copy_2","nav_item_copy_copy_2_1314771042","nav_item_copy_144634","nav_item_copy_144634_2013333117"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy":{"additionalClasses":"meganav-platform-features","navColumnTitle":"Featured Capabilities","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-3bdd0157d1",":items":{"nav_item_copy_212715":{"id":"nav-item-b63dcebee7","additionalClasses":"is-cortex-code","linkDescription":"Snowflake-native AI coding agent ","flag":"New","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/snowflake-coco/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake CoCo"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-4081e9107c","additionalClasses":"is-cortex-ai","linkDescription":"Instant access to industry-leading LLMs","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/cortex/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Cortex AI"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590635":{"id":"nav-item-e483180f22","additionalClasses":"is-marketplace","linkDescription":"Third-party data sources connected within minutes","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/marketplace/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Marketplace"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590":{"id":"nav-item-e1a663139b","additionalClasses":"is-snowpark","linkDescription":"Libraries and code execution environments that run Python and more","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/snowpark/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Snowpark"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590_983061516":{"id":"nav-item-b6cdf0372b","additionalClasses":"is-streamlit","linkDescription":"Framework for transforming Python scripts into web apps","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/streamlit-in-snowflake/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Streamlit"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_212715","nav_item","nav_item_copy_660590635","nav_item_copy_660590","nav_item_copy_660590_983061516"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_692142673":{"navColumnTitle":" ","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-10b33ead1f",":items":{"nav_item_copy_660590_1739526127":{"id":"nav-item-d1062e2f1c","additionalClasses":"is-postgres","linkDescription":"Fully compatible open source Postgres running on Snowflake","flag":"Now GA","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/postgres/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Postgres"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565":{"id":"nav-item-e9ab6a2964","additionalClasses":"is-dcr","linkDescription":"Streamlined model development and MLOps from a centralized UI","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/end-to-end-ml-workflows/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake ML"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_212715":{"id":"nav-item-1cbd7ab2ac","additionalClasses":"is-openflow","linkDescription":"Effortless data movement for integrations","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/openflow/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Openflow"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590":{"id":"nav-item-4c37b7d490","additionalClasses":"is-notebooks","linkDescription":"Interactive dev environment for data and AI teams","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/notebooks/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Notebooks"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_258535199":{"id":"nav-item-5eb35e53cc","propertiesId":"workload-nav-1","additionalClasses":"is-native-apps","linkDescription":"End-to-end, Snowflake-native app creation and distribution","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/product/features/native-apps/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Native Apps"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_660590_1739526127","nav_item_copy_185565","nav_item_copy_212715","nav_item_copy_660590","nav_item_258535199"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_782221091":{"navColumnTitle":" ","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-4992aa1103",":items":{"nav_item_copy":{"id":"nav-item-c540f0267c","additionalClasses":"is-light-gray-icon is-horizon-catalog","linkDescription":"Universal AI catalog","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/horizon/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Horizon Catalog"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590_1293798742":{"id":"nav-item-7e7c42777d","additionalClasses":"is-snowflake-ml","linkDescription":"Governed context layer that keeps AI, BI and data apps working from one truth","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/horizon-context/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Horizon Context"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_511717659_c":{"id":"nav-item-4b68a61d13","additionalClasses":"is-unistore","linkDescription":"Unify transactional and analytical workloads in Snowflake for enhanced simplicity","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/unistore/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Unistore"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_511717659_c_1443811525":{"id":"nav-item-b82573146c","additionalClasses":"is-observe","linkDescription":"AI-powered observability for faster production troubleshooting","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/observe/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Observe"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_511717659_c_1006104884":{"id":"nav-item-24e263e95a","additionalClasses":"is-observe","linkDescription":"Use any engine on a single governed data copy","flag":"Now GA","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/use-cases/interoperable-lakehouse/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Interoperable Lakehouse"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy","nav_item_copy_660590_1293798742","nav_item_511717659_c","nav_item_511717659_c_1443811525","nav_item_511717659_c_1006104884"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column","nav_column_copy_copy","nav_column_692142673","nav_column_782221091"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Product"},"nav_dropdown_menu_2":{"id":"nav-dropdown-menu-9bf2eef3f9","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-f65818da96",":items":{"nav_column":{"navColumnTitle":"INDUSTRIES","numberOfSubColumns":"one-column","minWidth":"280","layout":"SIMPLE","id":"container-2aa55c985d","appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small",":items":{"nav_item_copy_361384_2056203141":{"id":"nav-item-61e04e15b8","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"All Industries"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-d066d43a8b","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/advertising-media-entertainment/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Advertising, Media & Entertainment"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-9375db8a17","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/financial-services/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Financial Services"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-8ee096e6eb","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/healthcare-and-life-sciences/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Healthcare & Life Sciences"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1533429516":{"id":"nav-item-d3d5ba42ba","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/manufacturing/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Manufacturing"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1444458226":{"id":"nav-item-64bcd2fe41","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/public-sector/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Public Sector"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1149488919":{"id":"nav-item-c6a75c8c33","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/retail-consumer-goods/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Retail & Consumer Goods"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_57417040":{"id":"nav-item-6ab30eac65","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/technology/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Technology"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_361384674":{"id":"nav-item-66cce35aac","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/telecom/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Telecom"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_361384":{"id":"nav-item-36635eff22","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/industries/travel-hospitality/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Travel & Hospitality"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_361384_2056203141","nav_item","nav_item_copy","nav_item_copy_1970515619","nav_item_copy_1533429516","nav_item_copy_1444458226","nav_item_copy_1149488919","nav_item_copy_57417040","nav_item_copy_361384674","nav_item_copy_361384"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy":{"navColumnTitle":"DEPARTMENTS","numberOfSubColumns":"one-column","minWidth":"160","layout":"SIMPLE","id":"container-9d1cada4fb",":items":{"nav_item":{"id":"nav-item-f7ba46a590","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/solutions/departments/finance/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Finance"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-df198b9355","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/solutions/departments/information-technology/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"IT"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-5fd5c8533d","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/solutions/departments/marketing/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Marketing"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_1970515619"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_833417450":{"navColumnTitle":"Enablement Solutions","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-1eff0e89dc",":items":{"nav_item_copy_107772":{"id":"nav-item-7f748ca0b2","linkDescription":"Confident migration to a unified platform","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/migrate-to-the-cloud/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Migrate to the AI Data Cloud"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_833417450/nav_item_copy_107772/icon.coreimg.svg/1723828484100/nav-icon-cloud.svg","alt":"Cloud icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy":{"id":"nav-item-b00cb28d85","linkDescription":"Snowflake experts to help you accelerate and achieve business goals","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/services-delivery/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Services Delivery"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_833417450/nav_item_copy_copy/icon.coreimg.svg/1768354429188/nav-icon--migrate.svg","alt":"Migrate icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_107772","nav_item_copy_copy"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy":{"navColumnTitle":"PARTNER SOLUTIONS","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-e89d3d1d28",":items":{"nav_item":{"id":"nav-item-a2b5ebd37a","linkDescription":"Programs with product, solutions and cloud partners","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/partners/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake Partner Network"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_copy_copy/nav_item/icon.coreimg.svg/1723828498700/nav-icon--partner-network.svg","alt":"Partner Network icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-39fcf34975","linkDescription":"Partners, apps and solutions for enhanced deployment","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/partners/all-partners/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Partner Finder"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_copy_copy/nav_item_copy/icon.coreimg.svg/1726173927645/nav-icon--partner-finder.svg","alt":"Partner Finder icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-4aa0a1e2f1","linkDescription":"Live and virtual events","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/partners/event-partnership-opportunities/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Event Partnership Opportunities"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/nav_dropdown_menu_2/nav_column_container/nav_column_copy_copy/nav_item_copy_1970515619/icon.coreimg.svg/1726173935655/nav-icon--events.svg","alt":"Calendar icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_1970515619"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column","nav_column_copy","nav_column_833417450","nav_column_copy_copy"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Solutions"},"item_1719963657751_c":{"id":"nav-dropdown-menu-71eb629364","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-bdf64ecff5",":items":{"nav_column":{"numberOfSubColumns":"one-column","minWidth":"230","maxWidth":"350","layout":"SIMPLE","id":"container-66466a6a98",":items":{"nav_item_copy_copy_2_793631646":{"id":"nav-item-bc2aff2bcf","additionalClasses":"nav-item__platform-parent-why-sf","linkDescription":"Collaborate locally and globally to reveal new insights, create previously unforeseen business opportunities, and identify your customers with seamless experiences.","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Why Snowflake"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_copy_2_793631646"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy":{"additionalClasses":"meganav-platform-features","numberOfSubColumns":"two-columns","maxWidth":"1200","layout":"SIMPLE","id":"container-8e23a57e25",":items":{"nav_item":{"id":"nav-item-9c513b4e0b","propertiesId":"testID","linkDescription":"Case studies and videos showcasing how global organizations use Snowflake","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/customers/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Customers"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item/icon.coreimg.svg/1739839279367/nav-icon--partner-network.svg","alt":"Customer icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_258535199":{"id":"nav-item-5c7160b7b0","propertiesId":"workload-nav-1","linkDescription":"Learn how to connect, share and integrate the data and apps on the AI Data Cloud","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/what-is-data-cloud/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"The AI Data Cloud Explained"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item_258535199/icon.coreimg.svg/1739840490955/nav-icon-cloud.svg","alt":"Cloud icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565":{"id":"nav-item-48dde3b64c","linkDescription":"Comprehensive security through built-in features, robust cloud infrastructure protection, and more","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/snowflake-security-hub/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Security Hub"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item_copy_185565/icon.coreimg.svg/1758909528089/user-security-admins-ciso-icon.svg","alt":"User with security lock icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-8636f9ed0d","additionalClasses":"is-light-gray-icon","linkDescription":"Maximize economic value through minimizing TCO and continuously optimizing price for performance","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/pricing-options/cost-and-performance-optimization/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Cost and Performance Optimization"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item_copy/icon.coreimg.svg/1758909542267/nav-icon-cost-optimization-performance.svg","alt":"Cost Optimization icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565_903555964":{"id":"nav-item-ad23754fb9","linkDescription":"Startups building applications in the AI Data Cloud","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/why-snowflake/startup-program/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake for Startups"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item_copy_185565_903555964/icon.coreimg.svg/1758732224323/launch.svg","alt":"Launch",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_258535199","nav_item_copy_185565","nav_item_copy","nav_item_copy_185565_903555964"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column","nav_column_copy_copy"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Why Snowflake"},"item_1719961362824":{"id":"nav-dropdown-menu-42d056a0e6","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-33360d84ae",":items":{"nav_column_copy":{"navColumnTitle":"Connect","numberOfSubColumns":"one-column","minWidth":"124","layout":"SIMPLE","id":"container-074b3c108e",":items":{"nav_item":{"id":"nav-item-969db16cc6","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Blog"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_180298689":{"id":"nav-item-f7f9f7d244","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/events/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Events"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_1639361946":{"id":"nav-item-81cd9bf735","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/support/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Support"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_680912746":{"id":"nav-item-cf3092c3d7","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/contact/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Contact us"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_180298689","nav_item_1639361946","nav_item_680912746"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_44600420__826130542":{"navColumnTitle":"Learn","numberOfSubColumns":"two-columns","layout":"SIMPLE","id":"container-4c0fe58e76",":items":{"nav_item_copy":{"id":"nav-item-1716625a34","linkDescription":"Ebooks, videos, white papers and more","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/resources/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Resource Library"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy/icon.coreimg.svg/1736877128196/nav-icon--notebooks.svg","alt":"Notebooks icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-e14b2a7461","linkDescription":"Overview of Snowflake's educational offerings","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/resources/learn/training/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Training"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item/icon.coreimg.svg/1722385094416/nav-icon--training.svg","alt":"Training icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634_1984107859":{"id":"nav-item-ced2d98b9c","linkDescription":"Expert-led discussions and demos across industries and use cases","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/webinars/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Webinars"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_144634_1984107859/icon.coreimg.svg/1759424691990/nav-icon--webinars.svg","alt":"Webinars icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1438098918":{"id":"nav-item-cacb51f366","linkDescription":"Snowflake's technical industry professional certifications","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/resources/learn/certifications/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Certifications"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_1438098918/icon.coreimg.svg/1722382780833/nav-icon--cert.svg","alt":"Certification icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_143809":{"id":"nav-item-9e0f7e8cc2","linkDescription":"Weekly product demos showcasing key features and live Q&A ","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/webinars/demo/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Live Demos"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_143809/icon.coreimg.svg/1759424359543/nav-icon--live-demo.svg","alt":"Live Demo icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890638":{"id":"nav-item-a85f625dcf","linkDescription":"Training courses for all levels, on-demand or instructor-led","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://learn.snowflake.com/en/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Snowflake University"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_333890638/icon.coreimg.svg/1722382769808/nav-icon--education.svg","alt":"Education icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_189945":{"id":"nav-item-f8a15d066b","linkDescription":"Instructor-led virtual workshops for exploring key Snowflake features","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/webinars/virtual-hands-on-lab/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Hands-On Labs"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_189945/icon.coreimg.svg/1759388182903/nav-icon--labs.svg","alt":"Hands-on Labs icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890":{"id":"nav-item-f2cb97b5d9","linkDescription":"Academic papers written by Snowflake researchers","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/resources/publications/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake Research Publications"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_333890/icon.coreimg.svg/1756326371387/copy.svg","alt":"Copy",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890_930852828":{"id":"nav-item-33395db63a","linkDescription":"Informative articles about AI and data topics","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/fundamentals/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Fundamentals"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_copy_333890_930852828/icon.coreimg.svg/1756853637155/data-sheet.svg","alt":"Document with list",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy","nav_item","nav_item_copy_144634_1984107859","nav_item_copy_1438098918","nav_item_copy_143809","nav_item_copy_333890638","nav_item_copy_189945","nav_item_copy_333890","nav_item_copy_333890_930852828"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column_copy","nav_column_44600420__826130542"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},"nav_promo_section":{"id":"nav-promo-section-ac6bf13419","experience_fragment_1":{"id":"experiencefragment-d6eaa450ca","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/master1/jcr:content","configured":true,":items":{"root":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-d70b4c9bf4",":items":{"nav_promo_card":{"id":"nav-promo-card-94fa9cb491","openInNewWindow":true,"layout":"horizontal","headline":"Dev Day Virtual - June 25","description":"Don’t just hear about AI — build it. Luminary talks and hands-on labs","linkTitle":"Learn more","linkUrl":"/en/dev-day/americas-virtual/","image":{"id":"image","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--de231e36-6645-4550-abd9-0f8de758ac66/web-dev-day-26-960x540-1x.png?quality=85&preferwebp=true","alt":"dev day","width":"960","height":"540",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","cq:metadata"],":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf"},"experience_fragment_2":{"id":"experiencefragment-5ac5f5e6d5","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/navigation-promo-card-2/jcr:content","configured":true,":items":{"root":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-cf5e498f63",":items":{"nav_promo_card":{"id":"nav-promo-card-c0598f88b3","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","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--0c15edae-1a97-4739-8b16-c7f3941a6d9e/web-roi-of-gen-ai-and-agents-2026-r02-960x540.png?quality=85&preferwebp=true","alt":"roi of gen ai and agents","width":"960","height":"540",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","cq:metadata"],":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf"},"experience_fragment_3":{"id":"experiencefragment-4551b965af","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/navigation-promo-card-3/jcr:content","configured":true,":items":{"root":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-a8d9f15c69",":items":{"nav_promo_card":{"id":"nav-promo-card-11110a0b34","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","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--a320b404-dca1-4477-b033-c79708538657/web-startup-2026-960x540.png?quality=85&preferwebp=true","alt":"alt","width":"960","height":"540",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","cq:metadata"],":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf"},":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-b7fb6efc2c","enableDropdown":true,"nav_column_container":{"layout":"SIMPLE","id":"container-3659e9320d",":items":{"nav_column_copy_copy":{"navColumnTitle":"Build","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-bcbfc5ca8f",":items":{"nav_item":{"id":"nav-item-2ed9b973bb","propertiesId":"testID","linkDescription":"Overview of the dev resources you need to build and scale","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflake for Developers"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy/nav_item/icon.coreimg.svg/1731362494574/nav-icon--devs.svg","alt":"Developers icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1855651246":{"id":"nav-item-d114d0e2bc","linkDescription":"Reference architectures, use cases and best practices","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/guides/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Developer Guides"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy/nav_item_copy_1855651246/icon.coreimg.svg/1761677891705/nav-icon--solution-center.svg","alt":"Solution Center icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-c8ea52874a","additionalClasses":"is-light-gray-icon","linkDescription":"The latest software versions, drivers, libraries and relevant docs","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/downloads/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Downloads"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy/nav_item_copy/icon.coreimg.svg/1731362660050/nav-icon-download.svg","alt":"Download icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy_1855651246","nav_item_copy"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy_1367930678":{"navColumnTitle":"Learn","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-66639e7d42",":items":{"nav_item":{"id":"nav-item-abf808f78e","propertiesId":"testID","linkDescription":"Reference docs, guides, tutorials and announcements","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://docs.snowflake.com/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Documentation"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1367930678/nav_item/icon.coreimg.svg/1731361950527/nav-icon--docs.svg","alt":"Docs icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-52b517a7e1","additionalClasses":"is-light-gray-icon","linkDescription":"Key projects Snowflake engineers maintain and support","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/open-source/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Open Source"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1367930678/nav_item_copy/icon.coreimg.svg/1731365437016/nav-icon-open-source.svg","alt":"Open Source icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy":{"id":"nav-item-84905912df","additionalClasses":"is-light-gray-icon","linkDescription":"Online and in-person classes and workshops to upskill on Snowflake","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/northstar/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Builder Education"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1367930678/nav_item_copy_copy/icon.coreimg.svg/1731362475640/nav-icon--northstar.svg","alt":"Northstar logo",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_copy"],":type":"snowflake-site/components/nav/nav-column"},"nav_column_copy_copy_1101894776":{"navColumnTitle":"Connect","numberOfSubColumns":"one-column","layout":"SIMPLE","id":"container-f91544579f",":items":{"nav_item":{"id":"nav-item-75fa57d933","propertiesId":"testID","linkDescription":"Snowflake’s technical leaders on what, why and how they build features","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/engineering-blog/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Engineering Blog"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1101894776/nav_item/icon.coreimg.svg/1757101368571/nav-icon--developer-center.svg","alt":"Developers icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1855651246":{"id":"nav-item-c7da5775f8","linkDescription":"Tips, tricks and discussion with fellow Snowflake developers","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://community.snowflake.com/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Community"},"icon":{"id":"icon","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751/nav_column_container/nav_column_copy_copy_1101894776/nav_item_copy_1855651246/icon.coreimg.svg/1731362644348/nav-icon--partner-network.svg","alt":"Partner Network icon",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy_1855651246"],":type":"snowflake-site/components/nav/nav-column"}},":itemsOrder":["nav_column_copy_copy","nav_column_copy_copy_1367930678","nav_column_copy_copy_1101894776"],":type":"snowflake-site/components/nav/nav-column/nav-column-container"},"nav_promo_section":{"id":"nav-promo-section-cbce795cf0","experience_fragment_1":{"id":"experiencefragment-48e6fd59ee","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/nav-promo-5/jcr:content","configured":true,":items":{"root":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-bcdd75fdfb",":items":{"nav_promo_card":{"id":"nav-promo-card-c7f8a641ed","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","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--dc7e334a-c38b-4283-b1de-fcf829952eef/nav-promo-first-notebook.jpg?quality=85&preferwebp=true","alt":"alt","width":"415","height":"210",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:LiveSyncConfig":{"cq:isDeep":true,"cq:rolloutConfigs":[],"cq:master":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/nav-promo-card-4",":type":"cq:LiveCopy"}},":itemsOrder":["root","cq:LiveSyncConfig"],":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf"},"experience_fragment_2":{"id":"experiencefragment-c2e754ea70","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/nav-promo-card-4/jcr:content","configured":true,":items":{"root":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"nav_promo_card":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-223c0b462f",":items":{"nav_promo_card":{"id":"nav-promo-card-6485ed039a","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","lazyEnabled":true,"src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--14341ced-bc5e-4a29-9762-b7857f6cadfc/nav-promo-northstar.jpg?quality=85&preferwebp=true","alt":"Snowflake Northstar logo","width":"1440","height":"700",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-promo-card"}},":itemsOrder":["nav_promo_card"],":type":"snowflake-site/components/container"},"cq:LiveSyncConfig":{"cq:isDeep":true,"cq:rolloutConfigs":[],"cq:master":"/content/experience-fragments/snowflake-site/language-masters/en/site/nav-promo-card/master",":type":"cq:LiveCopy"}},":itemsOrder":["root","cq:LiveSyncConfig"],":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf"},":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-964408500e","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-13b1d880c9","languageNavItems":[{"title":"English","path":"/en/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/","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-d4cab7702f","heapButtonClasses":["mega-nav__sign-in"],"showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://app.snowflake.com/"},"linkTargetContentType":"GENERIC","appliedCssClassNames":"snowflake-button-link snowflake-button-black snowflake-button-compact","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Sign in"},"button":{"id":"button-4d765e2f81","heapButtonClasses":["contact_nav","heap-nav-contact"],"showOutboundIcon":true,"buttonLink":{"valid":true,"url":"/en/contact-sales/"},"linkTargetContentType":"GENERIC","appliedCssClassNames":"snowflake-button-secondary snowflake-button-blue snowflake-button-compact","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"CONTACT SALES"},"button_288358396":{"id":"button-a35b1a1a1a","heapButtonClasses":["start_for_free_nav","heap-nav-start-for-free"],"showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://signup.snowflake.com/"},"linkTargetContentType":"GENERIC","appliedCssClassNames":"snowflake-button-primary snowflake-button-blue snowflake-button-compact","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"start for free"}},":itemsOrder":["nav_mega","languagenavigation","button_1177328691","button","button_288358396"],":type":"snowflake-site/components/mega-header"}},":itemsOrder":["markup_editor","mega_header"],":type":"snowflake-site/components/container"},"image":{":type":"nt:unstructured"},"cq:targetMetadata":{"cq:targetStatus":"OUT_OF_SYNC","cq:exportTime":1781280015540,"cq:targetOfferId":860250,":type":"nt:unstructured"}},":itemsOrder":["root","image","cq:targetMetadata"],":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf"},"markup_editor_1950346551":{"id":"markup-editor-baf90726af","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":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","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"},"columnCount":12,":items":{"quickstart_hero":{"id":"quickstart-hero-66c6ab2cc2","quickstartHeroForkRepoLink":{"id":"button-1e2795e319","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://github.com/Snowflake-Labs/sfquickstarts/tree/master/site/sfguides/src/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Fork Repo"},"quickstartHeroBreadcrumbs":[{"title":"Accelerating Data Teams with Snowflake and dbt platform Hands On Lab","url":"https://www.snowflake.com/content/snowflake-site/global/en/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab","currentPage":true},{"title":"Guides","url":"https://www.snowflake.com/content/snowflake-site/global/en/developers/guides","currentPage":false},{"title":"Snowflake for Developers","url":"https://www.snowflake.com/content/snowflake-site/global/en/developers","currentPage":false}],"quickstartHeroTitle":{"lines":["Accelerating Data Teams with Snowflake and dbt platform Hands On Lab"],"type":"heading2",":type":"snowflake-site/components/title-v2"},"quickstartHeroAuthor":"Bobby Birstock, Amy Chen","quickstartHeroFirstSnowflakeFeatureTag":{"tagText":"Ingestion","tagColor":"#29B5E8","tagPath":"/content/cq:tags/snowflake-site/taxonomy/snowflake-feature/ingestion","tagIcon":""},"isDeveloperGuidesPage":false,":type":"snowflake-site/components/quickstart/quickstart-hero","fragmentPath":"/content/dam/snowflake-site/en/content-fragments/quickstarts/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab","quickstartHeroFirstCertifiedTag":{"tagText":"Partner Solution","tagColor":"#29B5E8","tagPath":"/content/cq:tags/snowflake-site/taxonomy/solution-center/certification/partner-solution","tagIcon":""}},"flexible_column_cont":{"id":"flexible-column-container-48337a6a5a","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-989307d835",":items":{"contentfragment":{"id":"contentfragment-ac45b0b974","paragraphs":["&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EOverview\u003C/h2\u003E\n","\u003Cp\u003EModern businesses need modern data strategies built on platforms that support agility, growth, and operational efficiency.\u003C/p\u003E\n","\u003Cp\u003E\u003Ca href=\"https://signup.snowflake.com/?utm_source=snowflake-devrel&amp;utm_medium=developer-guides&amp;utm_content=go-eta-ld-free-trial&amp;utm_term=c-g-snowflake-e&amp;utm_campaign=na-en-Branded&amp;_bt=470247374327&amp;_bk=snowflake&amp;_bm=e&amp;_bn=g&amp;_bg=64805047909&amp;gclid=Cj0KCQjw18WKBhCUARIsAFiW7JwA-C_HmNQzG_OFKhM1Hn9vlW6EAs-9mveiMXychVbbK34lh4vGfHsaAv4NEALw_wcB&amp;gclsrc=aw.ds&amp;utm_cta=developer-guides\"\u003ESnowflake\u003C/a\u003E is the Data Cloud that enables you to build data-intensive applications without operational burden, so you can focus on data and analytics instead of infrastructure management.\u003C/p\u003E\n","\u003Cp\u003E\u003Ca href=\"https://www.getdbt.com/\"\u003Edbt\u003C/a\u003E is a transformation workflow that lets teams quickly and collaboratively deploy analytics code following software engineering best practices like modularity, portability, CI/CD, and documentation. Now anyone who knows SQL can build production-grade data pipelines. It transforms data in the warehouse leveraging cloud data platforms like Snowflake.\u003C/p\u003E\n","\u003Cp\u003EIn this Hands On Lab you will follow a step-by-step guide to using dbt with Snowflake, and see some of the benefits this tandem brings.\u003C/p\u003E\n","\u003Cp\u003ELet's get started.\u003C/p\u003E\n","\u003Ch3\u003EWhat You'll Use During the Lab\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003EA trial \u003Ca href=\"https://signup.snowflake.com/?utm_source=snowflake-devrel&amp;utm_medium=developer-guides&amp;utm_cta=developer-guides\"\u003ESnowflake\u003C/a\u003E account with ACCOUNTADMIN access\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EA \u003Ca href=\"https://www.getdbt.com/signup/\"\u003Edbt platform\u003C/a\u003E account\u003C/p\u003E\n\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You'll Learn\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003EHow to build scalable data transformation pipelines using dbt &amp; Snowflake\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EHow to establish data trust with stakeholders by incorporating key dbt testing capabilities\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EHow to scale Snowflake compute capabilities with the dbt workflow\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EHow to visualize query results using Workspaces charts and Streamlit in Snowflake\u003C/p\u003E\n\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EWhat You'll Build\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EA set of data analytics pipelines for retail data leveraging dbt and Snowflake, making use of best practices like data quality tests and code promotion between environments\u003C/li\u003E\u003C/ul\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EArchitecture and Use Case Overview\u003C/h2\u003E\n","\u003Cp\u003EIn this lab we'll be transforming raw retail data into a consumable orders model that's ready for visualization. We'll be utilizing the TPC-H dataset that comes out of the box with your Snowflake account and transform it using some of dbt's most powerful features. By the time we're done you'll have a fully functional dbt project with testing and documentation, dedicated development and production environments, and experience with the dbt git workflow.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/architecture_diagram.png?v=95292079\" alt=\"Architecture Overview\"\u003E\u003C/p\u003E\n","\u003Cp\u003EHere's a sneak peak of the model lineage that we'll be creating using dbt!\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/project_lineage.png?v=95292079\" alt=\"Project Lineage\"\u003E\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ELet's Get Started With Snowflake\u003C/h2\u003E\n","\u003Cp\u003ETo create a Snowflake trial account, follow \u003Ca href=\"https://signup.snowflake.com/?utm_source=snowflake-devrel&amp;utm_medium=developer-guides&amp;utm_cta=developer-guides\"\u003Ethis link\u003C/a\u003E and fill out the form before clicking \u003Ccode\u003EContinue\u003C/code\u003E. You'll be asked to choose a cloud provider and for the purposes of this workshop any of them will do. After checking the box to agree to the terms, click \u003Ccode\u003EGet Started\u003C/code\u003E. &lt;br&gt; &lt;br&gt;\nOnce your account is created you'll receive an email confirmation. Within that email, click the \u003Ccode\u003EClick to Activate\u003C/code\u003E button and then create your login credentials. You should now be able to see your account!\u003C/p\u003E\n","\u003Cp\u003EFor a detailed Snowflake UI walkthrough, please refer \u003Ca href=\"https://docs.snowflake.com/en/user-guide/ui-snowsight-gs.html#getting-started-with-snowsight\"\u003Ehere\u003C/a\u003E. We'll be using Snowsight (the Snowflake web interface) throughout this lab. Snowflake now uses \u003Ca href=\"https://docs.snowflake.com/en/user-guide/ui-snowsight/workspaces\"\u003EWorkspaces\u003C/a\u003E as the default SQL editing experience, which supports file-and-folder organization, sharing, and Git integration.\u003C/p\u003E\n","\u003Cp\u003EThe dataset we'll be using for the workshop comes standard as part of your Snowflake trial. Navigate to \u003Cstrong\u003EWorkspaces\u003C/strong\u003E in the left sidebar. This will open the Workspaces editor where you can create and manage SQL files. Click the \u003Cstrong\u003E+ Add new\u003C/strong\u003E button to create a new SQL file.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_create_SQL_file.png?v=95292079\" alt=\"Snowflake Create SQL file\"\u003E\u003C/p\u003E\n","\u003Cp\u003EOnce there, in the left panel you will see the Database Explorer and you should see a database called \u003Ccode\u003ESnowflake_Sample_Data\u003C/code\u003E in the list of objects.&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_sample_data_database.png?v=95292079\" alt=\"Snowflake Sample Data Database\"\u003E&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EIf you don't see the database, you may have removed it from your account. To reinstate it, run the following command in your SQL file:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003Ecreate or replace database snowflake_sample_data from share sfc_samples.sample_data;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should now see the database as one of your database objects, with associated schemas within it.\u003C/p\u003E\n","\u003Cp\u003EClicking the database name will reveal a schema dropdown, including the schema that we'll be using for our source data, \u003Ca href=\"https://docs.snowflake.com/en/user-guide/sample-data-tpch.html\"\u003ETPCH_SF1\u003C/a\u003E.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_tpch_sf1.png?v=95292079\" alt=\"Snowflake TPCH SF1\"\u003E\u003C/p\u003E\n","\u003Cp\u003ELet's query one of the tables in the dataset to make sure that you're able to access the data. Copy and paste the following code into your SQL file and run the query.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003Eselect *\n    from snowflake_sample_data.tpch_sf1.orders\n    limit 100; \n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should be able to see results, in which case we're good to go. If you're receiving an error, check to make sure that your query syntax is correct.\nGreat! Now it's time to set up dbt platform.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ELaunching dbt platform via Partner Connect\u003C/h2\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EWe are going to use \u003Ca href=\"https://docs.snowflake.com/en/user-guide/ecosystem-partner-connect.html\"\u003ESnowflake Partner Connect\u003C/a\u003E to set up your dbt platform account and project. Using Partner Connect will allow you to create a complete dbt account with your \u003Ca href=\"https://docs.getdbt.com/docs/dbt-cloud/cloud-configuring-dbt-cloud/connecting-your-database#connecting-to-snowflake\"\u003ESnowflake connection\u003C/a\u003E, \u003Ca href=\"https://docs.getdbt.com/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-using-a-managed-repository\"\u003Emanaged repository\u003C/a\u003E, \u003Ca href=\"https://docs.getdbt.com/docs/guides/managing-environments\"\u003Eenvironments\u003C/a\u003E, and credentials with just a few clicks.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EIn the Snowflake UI, click on \u003Ccode\u003EAdmin\u003C/code\u003E in the lefthand sidebar, then \u003Ccode\u003EPartner Connect\u003C/code\u003E. &lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_open_partner_connect.png?v=95292079\" alt=\"Open Partner Connect\"\u003E&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003ECheck to make sure your role is set as the ACCOUNTADMIN role.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EFind the dbt tile by typing \u003Ccode\u003Edbt\u003C/code\u003E into the \u003Ccode\u003ESearch Partner Connect\u003C/code\u003E search bar. Click on the dbt tile.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_search_partner_connect.png?v=95292079\" alt=\"Search Partner Connect\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EYou should now see a popup that says \u003Ccode\u003EConnect to dbt\u003C/code\u003E that contains all of the associated objects created by Partner Connect. Click on the \u003Ccode\u003EOptional Grant\u003C/code\u003E dropdown menu and add \u003Ccode\u003ESnowflake_Sample_Data\u003C/code\u003E in the text box. This will grant your new dbt user role access to the database. Once that's entered, click \u003Ccode\u003EConnect\u003C/code\u003E. This will create a dedicated dbt user, database, warehouse, and role for your dbt platform trial.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_connect_partner_connect.png?v=95292079\" alt=\"Connect Partner Connect\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EWhen you see the popup that says \u003Ccode\u003EYour partner account has been created\u003C/code\u003E, click on \u003Ccode\u003EActivate\u003C/code\u003E.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_activate_partner_connect.png?v=95292079\" alt=\"Activate Partner Connect\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EYou should be redirected to a dbt platform registration page. Fill out the form and make sure to save the password somewhere for login in the future.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_registration.png?v=95292079\" alt=\"dbt platform Registration\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EClick on \u003Ccode\u003EComplete Registration\u003C/code\u003E. You should now be redirected to your dbt platform account, complete with a connection to your Snowflake account, a deployment and a development environment, as well as a sample job.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_home_page.png?v=95292079\" alt=\"dbt platform Home Page\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ETo help you version control your dbt project we have connected it to a \u003Ca href=\"https://docs.getdbt.com/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-using-a-managed-repository\"\u003Emanaged repository\u003C/a\u003E, which means that dbt Labs will be hosting your repository for you. This will give you access to a git workflow without you having to create and host the repository yourself. You will not need to know git for this workshop; dbt Cloud will help guide you through the workflow. In the future, when you're developing your own project, feel free to use \u003Ca href=\"https://docs.getdbt.com/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-installing-the-github-application\"\u003Eyour own repository\u003C/a\u003E. This will allow you to play with features like \u003Ca href=\"https://docs.getdbt.com/docs/dbt-cloud/using-dbt-cloud/cloud-enabling-continuous-integration-with-github\"\u003ESlim CI\u003C/a\u003E builds after this workshop.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EIDE Walkthrough\u003C/h2\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003ENow that our dbt platform account is set up, let&rsquo;s open up the IDE (Integrated Development Environment) and familiarize ourselves with some of the key product features. Click on the \u003Ccode\u003EStudio\u003C/code\u003E button in the upper left hand corner of the screen.&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_studio_button.png?v=95292079\" alt=\"Develop Button\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EWhen the IDE is done loading, click on the black \u003Ccode\u003EInitialize dbt project\u003C/code\u003E button in the upper left hand corner of the screen. The initialization process creates a dbt project in the file tree on the left hand side of the screen with all of the core dbt files and folders needed.&lt;br&gt;\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EAfter the initialization is finished, you should see a new folder structure in the left hand sidebar. As we move through the workshop we&rsquo;ll be sure to touch on a few key files and folders that we&rsquo;ll work with to build out our project.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENext click \u003Ccode\u003ECommit to new branch\u003C/code\u003E in the upper left hand corner to commit the new files and folders from the initialize step. We always want our commit messages to be relevant to the work we&rsquo;re committing, so be sure to provide a message like \u003Ccode\u003Einitialize project\u003C/code\u003E and click \u003Ccode\u003ECommit Changes\u003C/code\u003E in the pop-up window.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Ca href=\"https://www.atlassian.com/git/tutorials/saving-changes/git-commit\"\u003ECommitting\u003C/a\u003E your work here will save it to the managed git repository that was created during the Partner Connect signup. This initial commit is the only commit that will be made directly to our \u003Ccode\u003Emain\u003C/code\u003E branch and from here on out we&rsquo;ll be doing all of our work on a development branch. This allows us to keep our development work separate from our production code.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EThere are a couple of key features to point out about the IDE before we get to work. It is a text editor, a SQL runner, and a CLI with git version control all baked into one package. This allows you to focus on editing your SQL files, previewing the results with the SQL runner (it even runs Jinja!), and building models at the command line without having to move between different applications. The git workflow in dbt platform allows both git beginners and experts alike to be able to easily version control all of their work with a couple clicks.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_IDE_overview.png?v=95292079\" alt=\"IDE Overview\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ELet&rsquo;s run our first dbt models! Two example models are included in your dbt project in the \u003Ccode\u003Emodels/examples\u003C/code\u003E folder that we can use to illustrate how to run dbt at the command line.&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EType in \u003Ccode\u003Edbt run\u003C/code\u003E into the command line at the bottom of the screen and hit \u003Ccode\u003EEnter\u003C/code\u003E on your keyboard. When the run bar expands you&rsquo;ll be able to see the results of the run, where you should see the run complete successfully.&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_first_run_results.png?v=95292079\" alt=\"First Run Results\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThe run results allow you to see the code that dbt compiles and sends to Snowflake for execution. To view the logs for this run, click one of the model tabs and then click \u003Ccode\u003Edetails\u003C/code\u003E. If you scroll down a bit you&rsquo;ll be able to see the compiled code and how dbt interacts with Snowflake. Given that this run took place in our development environment, the models were created in your development schema, structured as your first initial and last name.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_first_run_details.png?v=95292079\" alt=\"First Run Details\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENow let&rsquo;s switch over to Snowflake to confirm that the objects were actually created. Click on the 3 dots above your database objects and then click \u003Ccode\u003ERefresh\u003C/code\u003E. Expand the \u003Ccode\u003EPC_DBT_DB\u003C/code\u003E database and you should see your development schema. Click on the schema, then click \u003Ccode\u003Etables\u003C/code\u003E and \u003Ccode\u003Eviews\u003C/code\u003E. Now you should be able to see \u003Ccode\u003EMY_FIRST_DBT_MODEL\u003C/code\u003E as a table and \u003Ccode\u003EMY_SECOND_DBT_MODEL\u003C/code\u003E as a view.\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/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_example_models.png?v=95292079\" alt=\"Example Models\"\u003E\u003C/p\u003E\n\u003Col start=\"9\"\u003E\u003Cli\u003E\n","\u003Cp\u003EWhile we&rsquo;re in our worksheet, we&rsquo;re going to create a new warehouse that we&rsquo;ll be using in our dbt project. Copy and paste the following series of commands and run them in order within your Snowflake worksheet.\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003Euse role accountadmin;\n\ncreate warehouse pc_dbt_wh_large with warehouse_size = large;\n\ngrant all on warehouse pc_dbt_wh_large to role pc_dbt_role;\n\u003C/code\u003E\u003C/pre\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EGreat! We&rsquo;re ready to move on to developing our dbt project.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EFoundational Structure\u003C/h2\u003E\n","\u003Ch3\u003EConfiguring the dbt_project.yml\u003C/h3\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003ETo get started with development for our project, we&rsquo;ll need to create a new git branch for our work. Clicking on the \u003Ccode\u003Ecreate branch\u003C/code\u003E button in the upper left hand corner of the screen will bring up a window to name your branch. We&rsquo;ll call our branch \u003Ccode\u003Esnowflake_workshop\u003C/code\u003E. After entering in the name click \u003Ccode\u003ESubmit\u003C/code\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EThe first piece of development we&rsquo;ll do on the project is to update the \u003Ccode\u003Edbt_project.yml\u003C/code\u003E file. This is the file that dbt looks for to recognize that the file directory we&rsquo;re working in is a dbt project.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_dbt_project_yaml_location.png?v=95292079\" alt=\"dbt_project.yml Location\"\u003E&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EClick on the file to open it and replace all of the existing contents with the following code. When you&rsquo;re done, save the file using the \u003Ccode\u003Esave\u003C/code\u003E button in the upper right hand corner of the screen.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-yaml\"\u003Ename: 'snowflake_workshop'\nversion: '1.0.0'\nconfig-version: 2\n\nprofile: 'default'\n\nmodel-paths: [&quot;models&quot;]\nanalysis-paths: [&quot;analyses&quot;]\ntest-paths: [&quot;tests&quot;]\nseed-paths: [&quot;seeds&quot;]\nmacro-paths: [&quot;macros&quot;]\nsnapshot-paths: [&quot;snapshots&quot;]\n\ntarget-path: &quot;target&quot;  \nclean-targets:         \n    - &quot;target&quot;\n    - &quot;dbt_packages&quot;\n\nmodels:\n  snowflake_workshop:\n    staging:\n      +materialized: view\n      +snowflake_warehouse: pc_dbt_wh\n    marts:\n      +materialized: table\n      +snowflake_warehouse: pc_dbt_wh_large\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E&lt;br&gt;\nThe key configurations to point out in the file with relation to the work that we&rsquo;re going to do are in the models section. Here we are defining configurations at the folder level that we want applied to all of the models within that folder. Specifically we are demonstrating:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003Ethe \u003Ccode\u003Ematerialized\u003C/code\u003E config, which tells dbt how to materialize models when compiling the code before it pushes it down to Snowflake, and\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003Ethe \u003Ccode\u003Esnowflake_warehouse\u003C/code\u003E config, which specifies which Snowflake warehouse should be used when building models in Snowflake\u003C/p\u003E\n\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Ca href=\"https://docs.getdbt.com/docs/building-a-dbt-project/building-models/materializations\"\u003EMaterializations\u003C/a\u003E are strategies for persisting dbt models in a warehouse, with \u003Ccode\u003Etables\u003C/code\u003E and \u003Ccode\u003Eviews\u003C/code\u003E being the most commonly utilized types. By default, all dbt models are materialized as views and other materialization types can be configured in the \u003Ccode\u003Edbt_project.yml\u003C/code\u003E file or in a model itself (we&rsquo;re going to do both!).\u003C/p\u003E\n","\u003Cp\u003EBased on the configuration in our \u003Ccode\u003Edbt_project.yml\u003C/code\u003E file, dbt will materialize all of the models in the staging folder as views (not necessary because it is the default but included for example purposes) and all of the models in the marts folder as tables. dbt uses a hierarchical model for configurations where any model configuration overrides the project configuration. The benefit of using dbt materializations is when you execute a dbt model, dbt will use the right DDL associated with the materialization to create the model&rsquo;s equivalent in the data warehouse, allowing for a bespoke creation flow so you can just focus on writing the select statement.\u003C/p\u003E\n","\u003Cp\u003EEach dbt connection declares a default warehouse to use when building models in Snowflake. With the \u003Ccode\u003Esnowflake_warehouse\u003C/code\u003E config in our file, dbt will use the x-small \u003Ccode\u003Epc_dbt_wh\u003C/code\u003E warehouse to build everything in the staging folder and the large \u003Ccode\u003Epc_dbt_wh_large\u003C/code\u003E warehouse to build everything in the marts folder. This configuration allows us to scale up and scale down warehouse size based on the compute needs for different parts of our project.\u003C/p\u003E\n","\u003Cp\u003EMaterializations and warehouses aren&rsquo;t the only type of configurations you can apply at the project level, \u003Ca href=\"https://docs.getdbt.com/reference/dbt_project.yml\"\u003Echeck out this doc\u003C/a\u003E to learn more about how you can apply configurations on your models, seeds, and even tests.\u003C/p\u003E\n","\u003Ch3\u003EFolder Structure\u003C/h3\u003E\n","\u003Cp\u003Edbt Labs has developed a \u003Ca href=\"https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview/\"\u003Eproject structure guide\u003C/a\u003E that contains a number of recommendations for how to build the folder structure for your project.  The folder structure we&rsquo;ll be building in this lab follows this guidance and fits into the following categories mentioned in the guide:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003ESources\u003C/strong\u003E: This is our TPC-H dataset and it will be defined in a source YAML file.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003EStaging models\u003C/strong\u003E: These models have a one-to-one relationship with their corresponding source and serve as the place for renaming, recasting, and generally performing light transformation that will be used consistently throughout the rest of your project.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Cstrong\u003EMarts models\u003C/strong\u003E: Models that represent business processes and entities, abstracted from the data sources they are based on. Here is where we perform our major transformations.&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EBy having a defined project structure (even if it&rsquo;s not this exact one), you create a predictable file tree so there&rsquo;s never guessing which folder a model should exist in. Let&rsquo;s implement our folder structure to set the stage for model development.\u003C/p\u003E\n\u003C/li\u003E\u003C/ul\u003E\n\u003Col\u003E\u003Cli\u003EBecause we have quite a few folders to create, we&rsquo;re going to fast track this by using a shortcut to build multiple folders at the same time.\u003C/li\u003E\u003C/ol\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003EIn your file tree take your cursor and hover over the \u003Ccode\u003Emodels\u003C/code\u003E subdirectory, right click, then click \u003Ccode\u003ECreate Folder\u003C/code\u003E. We&rsquo;re going to add two new folders to the file path, \u003Ccode\u003Estaging\u003C/code\u003E and \u003Ccode\u003Etpch\u003C/code\u003E (in that order) by typing \u003Ccode\u003Estaging/tpch\u003C/code\u003E into the file path. Make sure you&rsquo;re not including additional folder names and click \u003Ccode\u003ECreate\u003C/code\u003E. &lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_new_folder.png?v=95292079\" alt=\"New Folder\"\u003E&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_models_staging_tpch_folder_create.png?v=95292079\" alt=\"Staging TPCH Create Folder\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EIf you click into your \u003Ccode\u003Emodels\u003C/code\u003E directory now, you should see the new \u003Ccode\u003Estaging\u003C/code\u003E folder nested within \u003Ccode\u003Emodels\u003C/code\u003E and the \u003Ccode\u003Etpch\u003C/code\u003E folder nested within \u003Ccode\u003Estaging\u003C/code\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003C/ul\u003E\n\u003Col start=\"2\"\u003E\u003Cli\u003E\n","\u003Cp\u003EWe are going to create our final two folders the same way. Take your cursor and hover over the \u003Ccode\u003Emodels\u003C/code\u003E subdirectory, right click, then click \u003Ccode\u003ECreate Folder\u003C/code\u003E. This time in the popup window you&rsquo;re going to enter in the following file path: \u003Ccode\u003Emarts/core\u003C/code\u003E. Here we&rsquo;re creating a \u003Ccode\u003Emarts\u003C/code\u003E folder within \u003Ccode\u003Emodels\u003C/code\u003E and then a \u003Ccode\u003Ecore\u003C/code\u003E folder within \u003Ccode\u003Emarts\u003C/code\u003E. Your folder tree should look like this when it&rsquo;s all said and done:&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_models_marts_core_folder_file_tree.png?v=95292079\" alt=\"File Tree\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch3\u003EPackages\u003C/h3\u003E\n","\u003Cp\u003EThe last thing we are going to do to set up your dbt project is implement packages. \u003Ccode\u003Edbt packages\u003C/code\u003E are essentially dbt projects that you can bring into your project and use the code as if it was your own. Many packages are hosted on the \u003Ca href=\"https://hub.getdbt.com/\"\u003Edbt Packages Hub\u003C/a\u003E and provide you with the ability to \u003Ca href=\"https://hub.getdbt.com/dbt-labs/codegen/latest/\"\u003Egenerate reusable code\u003C/a\u003E for creating dbt sources and models, access a variety of helpful macros in jinja, and build \u003Ca href=\"https://hub.getdbt.com/snowflake-labs/dbt_constraints/latest/\"\u003Edatabase constraints\u003C/a\u003E for your Snowflake databases.\u003C/p\u003E\n","\u003Cp\u003EWait, what&rsquo;s jinja? And what&rsquo;s a macro?\u003C/p\u003E\n","\u003Cp\u003E\u003Ca href=\"https://docs.getdbt.com/docs/building-a-dbt-project/jinja-macros#overview\"\u003EJinja\u003C/a\u003E is a pythonic templating language that you can use in dbt to do things that usually aren&rsquo;t possible with SQL. Some examples include building control structures like \u003Ccode\u003Eif\u003C/code\u003E statements and \u003Ccode\u003Efor\u003C/code\u003E loops and abstracting code snippets into reusable macros so that you don&rsquo;t repeat yourself (DRY).\u003C/p\u003E\n","\u003Cp\u003EA \u003Ca href=\"https://docs.getdbt.com/docs/building-a-dbt-project/jinja-macros#macros\"\u003Emacro\u003C/a\u003E is a piece of jinja code that can be reused multiple times throughout a dbt project, like a function in other programming languages. Some of dbt&rsquo;s most important functions like \u003Ccode\u003Esource\u003C/code\u003E and \u003Ccode\u003Eref\u003C/code\u003E are also macros (we&rsquo;ll cover these later in the lab). If you find yourself repeating a common SQL transformation throughout your models, chances are that there&rsquo;s a macro in a package that will make your life easier. And if there isn&rsquo;t, you can always build your own!\u003C/p\u003E\n","\u003Cp\u003EWe won&rsquo;t be writing our own macros in this workshop but we do recommend checking out our \u003Ca href=\"https://docs.getdbt.com/tutorial/learning-more/using-jinja\"\u003EUsing Jinja doc\u003C/a\u003E to get leveled up. And remember when we declared warehouses specifically in our \u003Ccode\u003Edbt_project.yml\u003C/code\u003E file? Well, there&rsquo;s a macro to make that process dynamic and you can read more about it \u003Ca href=\"https://github.com/Montreal-Analytics/dbt-snowflake-utils\"\u003Ehere\u003C/a\u003E.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EWe&rsquo;re going to add the \u003Ccode\u003Edbt_utils\u003C/code\u003E package to our project. There are a couple of places throughout the workshop that we&rsquo;ll be using macros from the \u003Ccode\u003Edbt_utils\u003C/code\u003E package to help us write DRY code. To install the package, first create a new file within your home directory (same level as your \u003Ccode\u003Edbt_project.yml\u003C/code\u003E file) and call it \u003Ccode\u003Epackages.yml\u003C/code\u003E. &lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_home_directory_new_file.png?v=95292079\" alt=\"Home Directory New File\"\u003E&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_packages_yml_create.png?v=95292079\" alt=\"Create packages.yml\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThen copy and paste the following code into it and click save:\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-yaml\"\u003Epackages:\n  - package: dbt-labs/dbt_utils\n    version: 1.3.0\n\u003C/code\u003E\u003C/pre\u003E\n\u003Col start=\"2\"\u003E\u003Cli\u003E\n","\u003Cp\u003EThe last step to install the package is to run \u003Ccode\u003Edbt deps\u003C/code\u003E at the command line, which tells dbt to install the packages defined in your \u003Ccode\u003Epackages.yml\u003C/code\u003E file. Type in \u003Ccode\u003Edbt deps\u003C/code\u003E to the command line, click \u003Ccode\u003EEnter\u003C/code\u003E, and you should see a success message there when it completes.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ELet&rsquo;s take a second here to commit our work before moving on to the next step. Click the \u003Ccode\u003ECommit and push\u003C/code\u003E button, write in a commit message like \u003Ccode\u003Esetup structure for project\u003C/code\u003E, and click \u003Ccode\u003ECommit Changes\u003C/code\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ESources and Staging\u003C/h2\u003E\n","\u003Cp\u003EIn this section, we are going to learn about sources and staging models.\u003C/p\u003E\n","\u003Cp\u003ESources in dbt allow you to name and describe raw data from your warehouse in your dbt project, allowing you to establish lineage from raw data to transformed models. When you define your sources in dbt, you are able to apply the same testing and documentation best practices to those sources in addition to your transformed models.\u003C/p\u003E\n","\u003Cp\u003EStaging models have a 1:1 relationship with source tables. This is where you will perform simple transformations like renaming, recasting, or altering a column to a more usable format. Building staging models provides a clear foundation for your downstream modeling to build upon and allows for modular DRY (Don&rsquo;t Repeat Yourself) modeling. If your logic ever changes, you have one model to update rather than potentially 5 with the same subquery.\u003C/p\u003E\n","\u003Ch3\u003ECreate Sources\u003C/h3\u003E\n","\u003Cp\u003EWe&rsquo;re going to be using the \u003Ccode\u003Eorders\u003C/code\u003E and \u003Ccode\u003Elineitem\u003C/code\u003E tables from the \u003Ccode\u003ETPCH_SF1\u003C/code\u003E schema for our transformations and we want to create those tables as sources in our project. Create a new file called \u003Ccode\u003Etpch_sources.yml\u003C/code\u003E with the following file path: \u003Ccode\u003Emodels/staging/tpch/tpch_sources.yml\u003C/code\u003E&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EThen paste the following code into the file before saving it:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-yaml\"\u003Eversion: 2\nsources:\n  - name: tpch\n    description: source tpch data\n    database: snowflake_sample_data\n    schema: tpch_sf1\n    tables:\n      - name: orders\n        description: main order tracking table\n        \n        columns:\n          - name: o_orderkey\n            description: SF*1,500,000 are sparsely populated\n            data_tests: \n              - unique\n              - not_null\n\n      - name: lineitem\n        description: main lineitem table\n        columns:\n          - name: l_orderkey\n            description: Foreign Key to O_ORDERKEY\n            data_tests:\n              - relationships:\n                  arguments: \n                    to: source('tpch', 'orders')\n                    field: o_orderkey\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EIn the file you can see that we&rsquo;ve defined the database where the data is coming from (\u003Ccode\u003Esnowflake_sample_data\u003C/code\u003E), the schema (\u003Ccode\u003Etpch_sf1\u003C/code\u003E), and both tables that we&rsquo;ll be building with and transforming. Below each table name we have descriptions and tests that we&rsquo;ve applied to our sources, which we&rsquo;ll cover in more detail when we get to the testing and documentation section later on.\u003C/p\u003E\n","\u003Ch3\u003ECreate Staging Models\u003C/h3\u003E\n","\u003Cp\u003EThe next step is to set up the staging models for the two data sources. Given the one to one relationship between staging models and their corresponding source tables, we&rsquo;ll build two staging models here.\u003C/p\u003E\n","\u003Cp\u003ELet&rsquo;s start with the orders table. Create a new file called \u003Ccode\u003Estg_tpch_orders.sql\u003C/code\u003E with the following file path: \u003Ccode\u003Emodels/staging/tpch/stg_tpch_orders.sql\u003C/code\u003E\nThen paste the following code into the file before saving it:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003Ewith source as (\n\n    select * from {{ source('tpch', 'orders') }}\n\n),\n\nrenamed as (\n\n    select\n\n        o_orderkey as order_key,\n        o_custkey as customer_key,\n        o_orderstatus as status_code,\n        o_totalprice as total_price,\n        o_orderdate as order_date,\n        o_orderpriority as priority_code,\n        o_clerk as clerk_name,\n        o_shippriority as ship_priority,\n        o_comment as comment\n\n    from source\n\n)\n\nselect * from renamed\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EAll we&rsquo;re doing here is pulling the source data into the model using the \u003Ccode\u003Esource\u003C/code\u003E function, which we&rsquo;ll discuss in more detail in just a bit, and doing some column renaming. This serves as the starting point for all other models that need to reference this data so that naming stays consistent throughout your project.\u003C/p\u003E\n","\u003Cp\u003EFor the second model, we&rsquo;ll create another file in the same folder called \u003Ccode\u003Estg_tpch_line_items.sql\u003C/code\u003E with the following file path: \u003Ccode\u003Emodels/staging/tpch/stg_tpch_line_items.sql\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003EThen paste the following code into it before saving the file:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003Ewith source as (\n\n    select * from {{ source('tpch', 'lineitem') }}\n\n),\n\nrenamed as (\n\n    select\n    \n        {{ dbt_utils.generate_surrogate_key(\n            ['l_orderkey', \n            'l_linenumber']) }}\n                as order_item_key,\n        l_orderkey as order_key,\n        l_partkey as part_key,\n        l_suppkey as supplier_key,\n        l_linenumber as line_number,\n        l_quantity as quantity,\n        l_extendedprice as extended_price,\n        l_discount as discount_percentage,\n        l_tax as tax_rate,\n        l_returnflag as return_flag,\n        l_linestatus as status_code,\n        l_shipdate as ship_date,\n        l_commitdate as commit_date,\n        l_receiptdate as receipt_date,\n        l_shipinstruct as ship_instructions,\n        l_shipmode as ship_mode,\n        l_comment as comment\n\n    from source\n\n)\n\nselect * from renamed\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EHere we have renaming similar to what we did in the first staging model, as well as the addition of a new column using the \u003Ccode\u003Edbt_utils\u003C/code\u003E package. \u003Ccode\u003Edbt_utils.surrogate_key\u003C/code\u003E creates a hashed surrogate key that we call \u003Ccode\u003Eorder_item_key\u003C/code\u003E using the columns listed in the macro. Implementing this surrogate key gives us a unique column that we can use to easily test for uniqueness later on in the lab. You can find more information about how the surrogate key macro works \u003Ca href=\"https://github.com/dbt-labs/dbt-utils#surrogate_key-source\"\u003Ehere\u003C/a\u003E.\u003C/p\u003E\n","\u003Ch3\u003EThe Source Function\u003C/h3\u003E\n","\u003Cp\u003ELet&rsquo;s take a second to discuss the \u003Ca href=\"https://docs.getdbt.com/docs/building-a-dbt-project/using-sources\"\u003Esource function\u003C/a\u003E we&rsquo;re using in the first cte of each of our staging models to refer to our raw data sources.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_source_function.png?v=95292079\" alt=\"Source Function\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThere are a number of reasons why the source function is used instead of a hardcoded database reference, but one reason to highlight here is that it creates a dependency between our source database object and our staging models. This is going to be really important when we take a look at our data lineage later on in the workshop. Defining sources and referring to them with the source function also allows you to test and document those sources as you can with any other model in your project that you build on top of your sources. Also, if your source changes database or schema, you only have to update it in your \u003Ccode\u003Etpch_sources.yml\u003C/code\u003E file rather than updating all of the models it might be used in.\u003C/p\u003E\n","\u003Ch3\u003EBuild Staging Models\u003C/h3\u003E\n","\u003Cp\u003ENow that the staging models are built and saved, it&rsquo;s time to create the models in our development schema in Snowflake. To do this we&rsquo;re going to pass the \u003Ccode\u003Edbt run\u003C/code\u003E command at the command line to run all of the models in our project, which includes the two new staging models and the existing example models.\u003C/p\u003E\n","\u003Cp\u003EYour run should complete successfully and you should see green checkmarks next to all of your models in the run results.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_dbt_run_staging_models.png?v=95292079\" alt=\"Staging Models Results\"\u003E\u003C/p\u003E\n","\u003Cp\u003EAn important concept to note here is that when you rerun the example models the output will be exactly the same as it was after the first run. This is an example of an \u003Ca href=\"https://docs.getdbt.com/terms/idempotent\"\u003Eidempotent\u003C/a\u003E process, which means that the output of the process is the same after each execution of the process, no matter how many times the process is executed. Similar to the example models, if you were to rerun the staging models we just built, the output would be the same as the first run. One of the key tenets of dbt is to maintain idempotent workflows.\u003C/p\u003E\n","\u003Cp\u003ELet&rsquo;s take a quick look in Snowflake, refresh database objects, open our development schema, and confirm that the new models are there. If you can see them then we&rsquo;re good to go!\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_check_staging_models.png?v=95292079\" alt=\"Check Staging Models\"\u003E\u003C/p\u003E\n","\u003Cp\u003EBefore we move onto the next section be sure to commit your new models to your git branch. Click the \u003Ccode\u003ECommit and push\u003C/code\u003E button and give your commit a message like \u003Ccode\u003Esources and staging\u003C/code\u003E before moving on.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ESeeds and Incremental Materialization\u003C/h2\u003E\n","\u003Cp\u003ESeeds and incremental models are both key dbt features that we&rsquo;re going to bring together to create an incremental staging model.\u003C/p\u003E\n","\u003Cp\u003E\u003Ca href=\"https://docs.getdbt.com/docs/building-a-dbt-project/seeds\"\u003ESeeds\u003C/a\u003E are CSV files in your dbt project and are best used for smaller, static datasets that rarely change. By uploading a CSV file as a seed with dbt, you&rsquo;re able to apply the same best practices to your CSV as you would with your other models, such as version control, testing, and documentation. Seeds are great for things like a list of mappings of country codes or a list of employee user ids to exclude from a particular model. Here we&rsquo;ll be creating a seed with country names/regions that orders are taking place in and we&rsquo;ll use the \u003Ccode\u003Edbt seed\u003C/code\u003E command to have dbt load the seed into Snowflake for us.\u003C/p\u003E\n","\u003Cp\u003E\u003Ca href=\"https://docs.getdbt.com/docs/building-a-dbt-project/building-models/configuring-incremental-models\"\u003EIncremental models\u003C/a\u003E are great for large datasets where you want to limit the amount of data that needs to be transformed since the last time dbt ran. They allow you to maintain idempotency while improving warehouse performance and reducing compute costs. The way they work is that the model is built as a table in Snowflake. The first time a model runs, the table is built by transforming all of the rows in the query. On subsequent runs, dbt will transform only the rows that you tell dbt to filter for, either based on a timestamp or unique key. In Snowflake, we have two methods to insert records into the target table (i.e. the table built in the initial run): \u003Ca href=\"https://docs.getdbt.com/reference/resource-configs/snowflake-configs#merge-behavior-incremental-models\"\u003Emerge or delete+insert\u003C/a\u003E. The merge method is the default method and the one we will demonstrate here.\u003C/p\u003E\n","\u003Cp\u003EAlthough our TPC-H dataset isn&rsquo;t changing and in this case is rather small, we will make one of our models incremental to demonstrate how this core functionality works, providing you a clear flow without the complexity introduced with much larger datasets. We are going to first build the seed, which will allow us to reference that seed like any other dbt model. Then, we&rsquo;ll build an incremental model that references the seed and we will have dbt build the incremental model completely to reflect the original state (version 1) of the seed. Next, we&rsquo;re going to update the seed and rebuild it to reflect the most current state (version 2) of the seed. And finally we&rsquo;ll rerun the incremental model on version 2 of the seed, which will only run the specific changes we&rsquo;ve made to the seed and fully demonstrate the incremental materialization strategy.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003ELet&rsquo;s start with the seed. We&rsquo;re going to copy and paste the seed data into a new file in the \u003Ccode\u003Eseeds\u003C/code\u003E folder. First let&rsquo;s create a file in that folder called \u003Ccode\u003Enations.csv\u003C/code\u003E with the following file path: \u003Ccode\u003Eseeds/nations.csv\u003C/code\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENext, copy and paste the following data into the file before clicking save:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003EN_NATIONKEY,\tN_NAME,\tN_REGIONKEY,\tLAST_UPDATED_DATE\n0,\tALGERIA,\t0,\t1998-08-02\n1,\tARGENTINA,\t1,\t1998-08-02\n2,\tBRAZIL,\t1,\t1998-08-02\n3,\tCANADA,\t1,\t1998-08-02\n4,\tEGYPT,\t4,\t1998-08-02\n5,\tETHIOPIA,\t0,\t1998-08-02\n6,\tFRANCE,\t3,\t1998-08-02\n7,\tGERMANY,\t3,\t1998-08-02\n8,\tINDIA,\t2,\t1998-08-02\n9,\tINDONESIA,\t2,\t1998-08-02\n10,\tIRAN,\t4,\t1998-08-02\n11,\tIRAQ,\t4,\t1998-08-02\n12,\tJAPAN,\t2,\t1998-08-02\n13,\tJORDAN,\t4,\t1998-08-02\n14,\tKENYA,\t0,\t1998-08-02\n15,\tMOROCCO,\t0,\t1998-08-02\n16,\tMOZAMBIQUE,\t0,\t1998-08-02\n17,\tPERU,\t1,\t1998-08-02\n18,\tCHINA,\t2,\t1998-08-02\n19,\tROMANIA,\t3,\t1998-08-02\n20,\tSAUDI ARABIA,\t4,\t1998-08-02\n21,\tVIETNAM,\t2,\t1998-08-02\n22,\tUNITED KINGDOM,\t3,\t1998-08-02\n23,\tUNITED STATES,\t1,\t1998-08-02\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EAs mentioned above, the data here is a list of countries and their region where we have associated orders. This type of data fits our use case for seeds perfectly because the data changes infrequently and doesn&rsquo;t require consistent updating like our other models.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ELet&rsquo;s run our seed to build our initial \u003Ccode\u003Enations\u003C/code\u003E table. In the command line write \u003Ccode\u003Edbt seed\u003C/code\u003E and click \u003Ccode\u003EEnter\u003C/code\u003E.\u003C/p\u003E\n","\u003Cp\u003EThe seed command prompts Snowflake to build a table with all of the data that we&rsquo;ve provided in the CSV file and to create it in our default schema because we have not specified that it should be built elsewhere.\u003C/p\u003E\n","\u003Cp\u003EOnce the seed successfully builds, pop over to your Snowflake account and refresh your database objects. When you open your development schema and look at the tables in it, you should now see the \u003Ccode\u003Enations\u003C/code\u003E table.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_nations_table.png?v=95292079\" alt=\"Nations Table\"\u003E&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003ETo confirm that the data in the table matches the CSV, run the following command and do a quick check of the output:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003Eselect *\n  from pc_dbt_db.&lt;your_dev_schema&gt;.nations\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EBe sure to update the query with your personal development schema accordingly so that it runs successfully.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EWe could just leave it there with the table created by our seed, but we just got word from our sales team that we&rsquo;re going to need to make some changes. Specifically, we&rsquo;re starting to sell in more countries and they&rsquo;d like to update the \u003Ccode\u003Eregion_key\u003C/code\u003E column to better align with the countries we&rsquo;re currently selling in. So, we&rsquo;re going to build an incremental model to show how dbt makes it easy to incrementally add and update data in an existing model.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ELet&rsquo;s create our incremental model. Create a new file called \u003Ccode\u003Estg_tpch_nations.sql\u003C/code\u003E with the following file path: \u003Ccode\u003Emodels/staging/tpch/stg_tpch_nations.sql\u003C/code\u003E&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EThen paste the following code into it before clicking save:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003E{{\n    config(\n        materialized='incremental',\n        unique_key='nation_key'\n    )\n}}\n\nwith source as (\n\n    select * from {{ ref('nations') }}\n\n),\n\nrenamed as (\n\n    select\n\n        n_nationkey as nation_key,\n        n_name as name,\n        n_regionkey as region_key,\n        last_updated_date as last_updated_date\n\n    from source\n\n)\n\nselect * from renamed\n\n{% if is_incremental() %}\n\n  -- this filter will only be applied on an incremental run\n  where last_updated_date &gt; (select max(last_updated_date) from {{ this }})\n\n{% endif %}\n\u003C/code\u003E\u003C/pre\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EBefore we dive into how this model is set up, let&rsquo;s run the model so that we can see the output details alongside the model structure. Instead of running all our models, let&rsquo;s do a \u003Ccode\u003Edbt run\u003C/code\u003E on this model only. To do so, we&rsquo;ll add some extra syntax to our command so that it looks like this: \u003Ccode\u003Edbt run --select stg_tpch_nations\u003C/code\u003E. The \u003Ccode\u003E--select\u003C/code\u003E argument tells dbt to specifically run the model or path that we provide after the argument, in this case our \u003Ccode\u003Estg_tpch_nations\u003C/code\u003E model. &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EOnce it&rsquo;s complete, click on the model name in the run window, then click \u003Ccode\u003Edetails\u003C/code\u003E, and then scroll down to be able to see the specifics about what query was run in Snowflake during this first go round. &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_stg_tpch_nations_results.png?v=95292079\" alt=\"stg_tpch_nations Results\"\u003E&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EOne of the first things to notice in the results is that dbt is running this model as an incremental, as shown by the second line: &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_incremental_model_start.png?v=95292079\" alt=\"Incremental Model Start\"\u003E&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EIf we look back at the code, we&rsquo;ll notice that the config block at the top of the model applies the defined configs to this model only and the first thing we&rsquo;re saying is that we want to materialize it as an incremental model. However, the DDL ran as a regular dbt table materialization. This is because the first time an incremental model is executed, there is no existing database object in Snowflake so it needs to create the table first. We will see the model executed as a true incremental run when we run the model again.\u003C/p\u003E\n","\u003Cp\u003EThat same config block also defines the unique key of the model as \u003Ccode\u003Enation_key\u003C/code\u003E. Defining a unique key means that when we run this model incrementally, the unique key will be used to determine if there are updates to individual rows and if there are, it will update those rows in addition to appending any new rows to the end of the model. By extension, using a unique key to identify rows for updates will prevent duplicates from being created.\u003C/p\u003E\n","\u003Cp\u003EThe rest of the model in this run is very straightforward. dbt is creating the model as a table and we are selecting everything from the \u003Ccode\u003Enations\u003C/code\u003E seed that we uploaded, performing some light renaming, and returning those values. &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_incremental_model_first_run.png?v=95292079\" alt=\"Incremental Model First Run\"\u003E&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EWhile that&rsquo;s it for our run details, our code also contains an \u003Ccode\u003Eis_incremental\u003C/code\u003E macro at the bottom of the query. The macro is set to run on any incremental run of the model based on the specific core conditionals. Given that this first run of the incremental model is not an incremental run, \u003Ccode\u003Eis_incremental = false\u003C/code\u003E and dbt does not compile the \u003Ccode\u003Ewhere\u003C/code\u003E clause defined within the macro, which is confirmed by our run details. For our next run, \u003Ccode\u003Eis_incremental\u003C/code\u003E will be true, the macro will be compiled, and we&rsquo;ll be able to see the \u003Ccode\u003Ewhere\u003C/code\u003E clause in action.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENow we&rsquo;re ready to update our seed to meet the needs of our sales team. Let&rsquo;s open up our seed file again and delete the existing contents. Once that&rsquo;s done, copy and paste the following into the file before clicking save:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003EN_NATIONKEY,\tN_NAME,\tN_REGIONKEY,\tLAST_UPDATED_DATE\n0,\tALGERIA,\t0,\t1998-08-02\n1,\tARGENTINA,\t1,\t1998-08-02\n2,\tBRAZIL,\t1,\t1998-08-02\n3,\tCANADA,\t5,\t2022-05-09\n4,\tEGYPT,\t4,\t1998-08-02\n5,\tETHIOPIA,\t0,\t1998-08-02\n6,\tFRANCE,\t3,\t1998-08-02\n7,\tGERMANY,\t3,\t1998-08-02\n8,\tINDIA,\t2,\t1998-08-02\n9,\tINDONESIA,\t2,\t1998-08-02\n10,\tIRAN,\t4,\t1998-08-02\n11,\tIRAQ,\t4,\t1998-08-02\n12,\tJAPAN,\t2,\t1998-08-02\n13,\tJORDAN,\t4,\t1998-08-02\n14,\tKENYA,\t0,\t1998-08-02\n15,\tMOROCCO,\t0,\t1998-08-02\n16,\tMOZAMBIQUE,\t0,\t1998-08-02\n17,\tPERU,\t1,\t1998-08-02\n18,\tCHINA,\t2,\t1998-08-02\n19,\tROMANIA,\t3,\t1998-08-02\n20,\tSAUDI ARABIA,\t4,\t1998-08-02\n21,\tVIETNAM,\t2,\t1998-08-02\n22,\tUNITED KINGDOM,\t3,\t1998-08-02\n23,\tUNITED STATES,\t5,\t2022-05-09\n24,\tMEXICO,\t5,\t2022-05-09\n25,\tAUSTRALIA,\t2,\t2022-05-09\n26,\tNEW ZEALAND,\t2,\t2022-05-09\n27,\tSOUTH KOREA,\t2,\t2022-05-09\n28,\tBELGIUM,\t3,\t2022-05-09\n29,\tSWEDEN,\t3,\t2022-05-09\n30,\tSPAIN,\t3,\t2022-05-09\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThere are a couple of updates to discuss here about our seed file. The first is that the sales team requested that countries in North America have their own \u003Ccode\u003Eregion_key\u003C/code\u003E, which is designated as region 5. Canada and the US were existing countries in our seed and their regions have been updated accordingly. There are also a handful of new countries added to the list and their regions are updated and current. Finally, for all new and updated rows the \u003Ccode\u003Elast_updated_date\u003C/code\u003E was updated to reflect the changes (only took a couple of years to get things updated :) ).\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ELet&rsquo;s recreate our seed with the new contents by running \u003Ccode\u003Edbt seed\u003C/code\u003E again at the command line. Once it completes, let&rsquo;s use the dbt Cloud IDE to check the results. Within the IDE, click the plus button in the upper right corner to open a new tab, then copy and paste the following command into the new tab before clicking \u003Ccode\u003EPreview\u003C/code\u003E:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003Eselect *\n  from pc_dbt_db.&lt;your_dev_schema&gt;.nations\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EAgain, be sure to update the query with your personal development schema accordingly so that it runs successfully. The results in the preview window are the same results you would see if running the query in Snowflake and provides a convenient way to check your data without having to switch back and forth between applications.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENow we&rsquo;re ready for the update to our incremental model with the new seed loaded. From here all we need to do is rerun the incremental model using the same command we used before: \u003Ccode\u003Edbt run --select stg_tpch_nations\u003C/code\u003E. When it finishes, let&rsquo;s open up the details of the model run again to take a look under the hood and see exactly what&rsquo;s happening on this incremental run.\u003C/p\u003E\n","\u003Cp\u003EThe first thing to notice is that instead of creating a table to start, dbt compiles the code necessary to create a temporary table with the contents of our model \u003Cem\u003Eincluding\u003C/em\u003E the where clause in the \u003Ccode\u003Eis_incremental\u003C/code\u003E macro. The where clause is filtering rows based on the \u003Ccode\u003Elast_updated_date\u003C/code\u003E and it will only include records where the \u003Ccode\u003Elast_updated_date\u003C/code\u003E is greater than the max date in the current results of the model. All of our new and updated rows with a \u003Ccode\u003Elast_updated_date = 2022-05-09\u003C/code\u003E are returned and stored in our temp table at this stage in the process.&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_incremental_model_second_run.png?v=95292079\" alt=\"Incremental Model Second Run\"\u003E&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EThe next piece of compiled code is a \u003Ccode\u003Emerge\u003C/code\u003E statement that merges the results of the temp table with the existing \u003Ccode\u003Estg_tpch_nations\u003C/code\u003E table in your warehouse, using the \u003Ccode\u003Enation_key\u003C/code\u003E as the uniqueness constraint to join on. It defines the existing \u003Ccode\u003Estg_tpch_nations\u003C/code\u003E table as the target table and the temp table created in the first part of the process as the source table to join with the target table. &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003ETo tackle the update vs. insert question with our modified and new records, dbt compiles the code for the \u003Ccode\u003EmatchedClause\u003C/code\u003E for updates and the \u003Ccode\u003EnotMatchedClause\u003C/code\u003E for inserts. For all of the rows where there is a match between the \u003Ccode\u003Enation_key\u003C/code\u003E in the temp table and the target table, the \u003Ccode\u003EmatchedClause\u003C/code\u003E is used to update that row with all of the column values in the temp table. &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EFor all of the rows where the \u003Ccode\u003Enation_key\u003C/code\u003E in the temp table doesn&rsquo;t exist yet in the target table, \u003Ccode\u003EnotMatchedClause\u003C/code\u003E is used to insert those rows into the target table. &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_incremental_model_merge.png?v=95292079\" alt=\"Incremental Model Merge\"\u003E&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EAnd that does it for our incremental model and associated seed. This example is a textbook use case of how you want to utilize seeds with dbt, as we had a small list stored in a CSV that changed \u003Cem\u003Every\u003C/em\u003E infrequently.\u003C/p\u003E\n","\u003Cp\u003EWe also showed how dbt abstracts away the complex DDL to create an incremental model and standardized it in an approachable manner. Even though incremental models are best applied to very large datasets that don&rsquo;t require rebuilding the entire result set during each run, we were able to dive into the nitty gritty details with this example. It should be noted that on Snowflake, there are two standard incremental methods with merge being the default and \u003Ca href=\"https://docs.getdbt.com/reference/resource-configs/snowflake-configs#merge-behavior-incremental-models\"\u003Edelete+insert\u003C/a\u003E as an alternative option.\u003C/p\u003E\n","\u003Cp\u003ELast thing before we move on is to commit our work. Click the \u003Ccode\u003ECommit and push\u003C/code\u003E button and give your commit a message like \u003Ccode\u003Eseed and incremental model\u003C/code\u003E before moving on.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ETransformed Models\u003C/h2\u003E\n","\u003Cp\u003ENow that we have our staging models built we&rsquo;re able to start transforming our data to meet our modeling needs. The plan here is to build two transformed models: one is an intermediate model that performs new line items calculations and the other is a fact model that aggregates the new line items calculations back at the order level. The final fact model is what we will use to \u003Ca href=\"https://docs.snowflake.com/en/user-guide/ui-snowsight-dashboards.html\"\u003Ebuild a chart\u003C/a\u003E\u003Ca href=\"https://docs.snowflake.com/en/user-guide/ui-snowsight-dashboards.html\"\u003Ein Snowsight\u003C/a\u003E.\u003C/p\u003E\n","\u003Ch3\u003ECreate Marts Models\u003C/h3\u003E\n","\u003Cp\u003ELet&rsquo;s start by creating a new file called \u003Ccode\u003Eint_order_items.sql\u003C/code\u003E with the following file path: \u003Ccode\u003Emodels/marts/core/int_order_items.sql\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003EThen copy and paste the following code block into the new model and click save:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003Ewith orders as (\n    \n    select * from {{ ref('stg_tpch_orders') }}\n\n),\n\nline_item as (\n\n    select * from {{ ref('stg_tpch_line_items') }}\n\n)\nselect \n\n    line_item.order_item_key,\n    orders.order_key,\n    orders.customer_key,\n    orders.order_date,\n    orders.status_code as order_status_code,\n    line_item.part_key,\n    line_item.supplier_key,\n    line_item.return_flag,\n    line_item.line_number,\n    line_item.status_code as order_item_status_code,\n    line_item.ship_date,\n    line_item.commit_date,\n    line_item.receipt_date,\n    line_item.ship_mode,\n    line_item.extended_price,\n    line_item.quantity,\n    \n    -- extended_price is actually the line item total,\n    -- so we back out the extended price per item\n    (line_item.extended_price/nullif(line_item.quantity, 0))::decimal(16,2) as base_price,\n    line_item.discount_percentage,\n    (base_price * (1 - line_item.discount_percentage))::decimal(16,2) as discounted_price,\n\n    line_item.extended_price as gross_item_sales_amount,\n    (line_item.extended_price * (1 - line_item.discount_percentage))::decimal(16,2) as discounted_item_sales_amount,\n    -- We model discounts as negative amounts\n    (-1 * line_item.extended_price * line_item.discount_percentage)::decimal(16,2) as item_discount_amount,\n    line_item.tax_rate,\n    ((gross_item_sales_amount + item_discount_amount) * line_item.tax_rate)::decimal(16,2) as item_tax_amount,\n    (\n        gross_item_sales_amount + \n        item_discount_amount + \n        item_tax_amount\n    )::decimal(16,2) as net_item_sales_amount\n\nfrom\n    orders\ninner join line_item\n        on orders.order_key = line_item.order_key\norder by\n    orders.order_date\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ELet&rsquo;s break down what&rsquo;s happening in this model. At the top we&rsquo;re selecting all of the data from our staging models in two cte&rsquo;s using the \u003Ccode\u003Eref\u003C/code\u003E function, which we&rsquo;ll touch on shortly. The main select statement is joining the two staging models together, pulling through a chunk of existing columns and then performing a number of different calculations on the line items data. All of the calculations are data points that we&rsquo;re interested in and were not calculated in our raw data source, such as individual item prices with discounts and total sales amounts with tax.\u003C/p\u003E\n","\u003Cp\u003EThe \u003Ca href=\"https://docs.getdbt.com/reference/dbt-jinja-functions/ref/\"\u003E\u003Ccode\u003Eref\u003C/code\u003E\u003C/a\u003Efunction is the most important function in dbt and is similar to the source function we used earlier. In this case it is referencing our staging models. As a rule, you should always use the \u003Ccode\u003Eref\u003C/code\u003E function to refer to any existing dbt model when building models. This is important for creating dependencies between dbt models as well as allowing you to seamlessly promote code between different environments. When we promote our code from our development environment to our production environment later on in the lab, the \u003Ccode\u003Eref\u003C/code\u003E function will compile the correct database object associated with the production environment based on our configurations (both in the connection and in the project). We&rsquo;ll touch more on environments in more detail in the deployment section of the lab.\u003C/p\u003E\n","\u003Cp\u003ENow let&rsquo;s create our final transformed fact model. Start by creating a new file called \u003Ccode\u003Efct_orders.sql\u003C/code\u003E with the following file path: \u003Ccode\u003Emodels/marts/core/fct_orders.sql\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003EThen copy and paste the following code into the file before saving:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003Ewith orders as (\n    \n    select * from {{ ref('stg_tpch_orders') }} \n\n),\norder_item as (\n    \n    select * from {{ ref('int_order_items') }}\n\n),\norder_item_summary as (\n\n    select \n        order_key,\n        sum(gross_item_sales_amount) as gross_item_sales_amount,\n        sum(item_discount_amount) as item_discount_amount,\n        sum(item_tax_amount) as item_tax_amount,\n        sum(net_item_sales_amount) as net_item_sales_amount\n    from order_item\n    group by\n        1\n),\nfinal as (\n\n    select \n\n        orders.order_key, \n        orders.order_date,\n        orders.customer_key,\n        orders.status_code,\n        orders.priority_code,\n        orders.clerk_name,\n        orders.ship_priority,\n                \n        1 as order_count,                \n        order_item_summary.gross_item_sales_amount,\n        order_item_summary.item_discount_amount,\n        order_item_summary.item_tax_amount,\n        order_item_summary.net_item_sales_amount\n    from\n        orders\n        inner join order_item_summary\n            on orders.order_key = order_item_summary.order_key\n)\nselect \n    *\nfrom\n    final\n\norder by\n    order_date\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThis model starts by bringing in our staging orders data and our transformed order items data using the \u003Ccode\u003Eref\u003C/code\u003E function in each case. It then takes the new order items calculations and aggregates those values at the order level before joining them back with order level attributes to get the final transformed output. The result is that we&rsquo;re able to report on orders with their corresponding discount and tax amounts, which we weren&rsquo;t able to do given the staging data alone.\u003C/p\u003E\n","\u003Ch3\u003EBuild Models and Results\u003C/h3\u003E\n","\u003Cp\u003EGreat! Now that we&rsquo;ve built our transformed models let&rsquo;s do another \u003Ccode\u003Edbt run\u003C/code\u003E to build these models into our development schemas. This time instead of doing \u003Ccode\u003Edbt run\u003C/code\u003E and running all of the models in our project, we&rsquo;re going to tell dbt to build only our new intermediate and fact models. To do this we&rsquo;ll use the following command: \u003Ccode\u003Edbt run --select int_order_items+\u003C/code\u003E.\u003C/p\u003E\n","\u003Cp\u003EThere are a couple of concepts to talk about with this command so let&rsquo;s dive into them:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003EWe&rsquo;ve already used the \u003Ccode\u003E--select\u003C/code\u003E argument to tell dbt to specifically run the model or path that we provide after the argument, in this case our \u003Ccode\u003Eint_order_items\u003C/code\u003E model.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EThe plus sign appended to the end of \u003Ccode\u003Eint_order_items\u003C/code\u003E is a graph operator that uses dbt&rsquo;s dependency graph to run all of the models downstream of the selected model. So in this case dbt will run \u003Ccode\u003Eint_order_items\u003C/code\u003E and all downstream dependencies of that model as well, which is how this command runs both our intermediate and fact model. You can read more about graph operators \u003Ca href=\"https://docs.getdbt.com/reference/node-selection/graph-operators\"\u003Ehere\u003C/a\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003ENow let&rsquo;s take a look at the detailed results of our \u003Ccode\u003Efct_orders\u003C/code\u003E model so we can understand what is happening in the compiled code.\u003C/p\u003E\n","\u003Cp\u003EWhen we created our \u003Ccode\u003Edbt_project.yml\u003C/code\u003E file we configured all models in the marts folder to run using the \u003Ccode\u003Epc_dbt_wh_large\u003C/code\u003E warehouse, and we can see that in action towards the top of the log:\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_warehouse_details.png?v=95292079\" alt=\"Warehouse Details\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThere are also a couple pieces about the model itself to point out. The first is that dbt is wrapping our select statement in DDL for us and building the table in our development schema. The \u003Ccode\u003Ematerialized\u003C/code\u003E config in our \u003Ccode\u003Edbt_project.yml\u003C/code\u003E file is responsible for building this as a table, as opposed to the default view materialization.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_fct_orders_details_ddl.png?v=95292079\" alt=\"fct_orders DDL\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThe other important point here is how the \u003Ccode\u003Eref\u003C/code\u003E statements in each of the first two cte&rsquo;s have been compiled to the appropriate database object. Here you can see that dbt has compiled the code to reference the \u003Ccode\u003Estg_tpch_orders\u003C/code\u003E model and the \u003Ccode\u003Eint_order_items\u003C/code\u003E model in the development schema, given that we are building the model in our development environment.\u003C/p\u003E\n","\u003Ch3\u003ELineage\u003C/h3\u003E\n","\u003Cp\u003ENow that we&rsquo;ve completed building all of our models, we can see the lineage graph coming together. We&rsquo;ll get another look at this when we pop into the docs site, but this is what you should be able to see by clicking on the lineage tab in the IDE with the \u003Ccode\u003Efct_orders\u003C/code\u003E model tab open:\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_IDE_lineage_graph.png?v=95292079\" alt=\"Lineage Graph\"\u003E\u003C/p\u003E\n","\u003Cp\u003EFrom left to right we have our sources (green nodes) leading into our staging models, our intermediate model, and then our final fact model. As was mentioned earlier, declaring sources in dbt and using the \u003Ccode\u003Eref\u003C/code\u003E and \u003Ccode\u003Esource\u003C/code\u003E functions is what allows dbt to create these relations. This becomes very powerful as a project grows in size to include hundreds of models!\u003C/p\u003E\n","\u003Cp\u003ELet&rsquo;s make sure to save our work before moving on to the next section. Take a moment to click the \u003Ccode\u003Ecommit\u003C/code\u003E button and provide a message like \u003Ccode\u003Ecreate intermediate and fact models\u003C/code\u003E to save your most recent changes.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ETests and Docs\u003C/h2\u003E\n","\u003Cp\u003ENow that we&rsquo;ve built out our models and transformations, it&rsquo;s really important to document and test them. This ensures we catch any errors that violate our assumptions about our data models and provides a guide to anyone else that comes across our work and wants to understand what we built. dbt&rsquo;s native features include both a data testing and documentation framework to help us accomplish all of our documentation and testing needs.\u003C/p\u003E\n","\u003Cp\u003ETesting in dbt comes in two flavors: generic and singular. A \u003Ca href=\"https://docs.getdbt.com/docs/building-a-dbt-project/tests#singular-tests\"\u003Esingular test\u003C/a\u003E is testing in its simplest form: if you can write a SQL query that returns failing rows, it&rsquo;s a dbt test that can be executed by the dbt test command. \u003Ca href=\"https://docs.getdbt.com/docs/building-a-dbt-project/tests#generic-tests\"\u003EGeneric tests\u003C/a\u003E are basically the same, but with the ability to accept arguments. You define them in a test block (similar to a macro) and once defined, you can reference them by name in your .yml files (applying them to models, columns, sources, snapshots, and seeds). dbt ships with four generic tests that work out of the box that we&rsquo;re going to use here: \u003Ccode\u003Eunique\u003C/code\u003E, \u003Ccode\u003Enot null\u003C/code\u003E, \u003Ccode\u003Eaccepted values\u003C/code\u003E, and \u003Ccode\u003Erelationships\u003C/code\u003E. We&rsquo;re also going to write our own singular test to understand a flavor of custom testing in dbt.  And while we won&rsquo;t cover them in this workshop, you can also access other generic tests from packages like the dbt_utils package as well as \u003Ca href=\"https://hub.getdbt.com/calogica/dbt_expectations/latest/\"\u003Edbt_expectations\u003C/a\u003E, which brings tests inspired by the Great Expectations python package into dbt.\u003C/p\u003E\n","\u003Cp\u003EWhen it comes to documentation, dbt brings together both column and model level descriptions that you can provide as well as details from your Snowflake information schema in a static site for consumption by other data team members and stakeholders.\u003C/p\u003E\n","\u003Ch3\u003ECreate Tests And Descriptions\u003C/h3\u003E\n","\u003Cp\u003EGeneric tests and descriptions for documentation are both defined in YAML files so to get started we&rsquo;ll create a new file called \u003Ccode\u003Ecore.yml\u003C/code\u003E with the following file path: \u003Ccode\u003Emodels/marts/core/core.yml\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003ENext we&rsquo;ll copy and paste the following code block into the new file and click save:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-yaml\"\u003Eversion: 2\n\nmodels:\n  - name: fct_orders\n    description: orders fact table\n    columns:\n      - name: order_key\n        description: primary key of the model\n        data_tests:\n          - unique\n          - not_null\n          - relationships:\n              arguments: \n                to: ref('stg_tpch_orders')\n                field: order_key\n                severity: warn\n      - name: customer_key\n        description: foreign key for customers\n      - name: order_date\n        description: date of the order\n      - name: status_code\n        description: status of the order\n        tests:\n          - accepted_values:\n              arguments: \n                values: ['P','O','F']\n      - name: priority_code\n        description: code associated with the order\n      - name: clerk_name\n        description: id of the clerk\n      - name: ship_priority\n        description: numeric representation of the shipping priority, zero being the default\n      - name: order_count\n        description: count of order\n      - name: gross_item_sales_amount\n        description: '{{ doc(&quot;gross_item_sales_amount&quot;) }}'\n      - name: item_discount_amount\n        description: item level discount amount. this is always less than or equal to zero\n      - name: item_tax_amount\n        description: item level tax total\n      - name: net_item_sales_amount\n        description: the net total which factors in discount and tax\n\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ELet&rsquo;s take a moment to describe what&rsquo;s happening in this file and how we&rsquo;re defining everything. This file is in the \u003Ccode\u003Emodels/marts/core\u003C/code\u003E directory and contains tests and descriptions specifically for the models in this directory, in this case for \u003Ccode\u003Efct_orders\u003C/code\u003E. This is an organizational step and at the end of the day it is up to you and your team how you&rsquo;d like to organize your YAML files and the models they test and define. As a best practice, we do recommend having at least one YAML file for testing and documentation per directory.\u003C/p\u003E\n","\u003Cp\u003EIn looking at the formatting, the top level is the model we&rsquo;re describing and we provide any model level information we&rsquo;d like to directly under the model name. In our case, we&rsquo;ve provided a description for our model and this will show as the model level when we view the documentation site for this model.\u003C/p\u003E\n","\u003Cp\u003EMoving down to the column level you&rsquo;ll see that is where most of our work is being done, both from a description and testing standpoint. In looking at the testing on this model, you&rsquo;ll see that we&rsquo;re utilizing all of the generic tests on a variety of columns. We expect the \u003Ccode\u003Eorder_key\u003C/code\u003E to be both \u003Ccode\u003Eunique\u003C/code\u003E and \u003Ccode\u003Enot_null\u003C/code\u003E and are using the associated tests to check. The \u003Ccode\u003Erelationships\u003C/code\u003E test is checking to make sure that the \u003Ccode\u003Eorder_key\u003C/code\u003E in this model also exists as an id in \u003Ccode\u003Estg_tpch_orders\u003C/code\u003E. And finally, there is an \u003Ccode\u003Eaccepted values\u003C/code\u003E test on the \u003Ccode\u003Estatus_code\u003C/code\u003E to ensure that the values outputted from that column meet our expectations.\u003C/p\u003E\n","\u003Cp\u003EWhen we take a look at the descriptions, we&rsquo;re able to see that they are split between two different notations, one using plain text and the other using a jinja reference to a doc block. The plain text description works just as it does at the model level and allows you to document any column in the YAML file. The doc block expands our documentation capabilities by allowing us to write descriptions in markdown files, which we&rsquo;ll jump into in the next step.\u003C/p\u003E\n","\u003Ch3\u003EBuild Markdown File\u003C/h3\u003E\n","\u003Cp\u003ELet&rsquo;s build our markdown file to accompany our doc block description. Create a new file called \u003Ccode\u003Ecore.md\u003C/code\u003E with the following file path: \u003Ccode\u003Emodels/marts/core/core.md\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003EThen copy and paste the following code into it before saving:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-markdown\"\u003E# the below are descriptions from fct_orders\n\n{% docs gross_item_sales_amount %} same as extended_price {% enddocs %}\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EThis markdown file has one doc block corresponding to the one column with a doc block description in our YAML file (note that a markdown file can have multiple doc blocks). The name within quotes in the YAML doc block description connects with the name in the opening doc block in our markdown file. In this case, \u003Ccode\u003E'{{doc(&quot;gross_item_sales_amount&quot;) }}'\u003C/code\u003E in the YAML description matches \u003Ccode\u003E{% docs gross_item_sales_amount %}\u003C/code\u003E in our markdown file.\u003C/p\u003E\n","\u003Cp\u003EFrom there, the text description in our markdown file is what is passed as the description in our YAML file. This is what we&rsquo;ll see when we open the corresponding model in our documentation site.\u003C/p\u003E\n","\u003Cp\u003EBuilding descriptions with doc blocks in markdown files gives you the ability to format your descriptions with markdown and are particularly helpful when building long descriptions, either at the column or model level. Also, if you have a column that exists in multiple models with the same description, you&rsquo;re able to reuse the same doc block for that column as many times as you&rsquo;d like. You can learn more about doc blocks \u003Ca href=\"https://docs.getdbt.com/docs/building-a-dbt-project/documentation#using-docs-blocks\"\u003Ehere\u003C/a\u003E.\u003C/p\u003E\n","\u003Ch3\u003EBuild A Singular Test\u003C/h3\u003E\n","\u003Cp\u003ETaking a look at our descriptions we can see that \u003Ccode\u003Eitem_discount_amount\u003C/code\u003E specifies that the output for that column should always be less than or equal to zero. Let&rsquo;s test it!\u003C/p\u003E\n","\u003Cp\u003EFor this we&rsquo;ll need a custom data test, so we&rsquo;ll start by creating a new file called \u003Ccode\u003Efct_orders_negative_discount_amount.sql\u003C/code\u003E with the following file path: \u003Ccode\u003Etests/fct_orders_negative_discount_amount.sql\u003C/code\u003E\u003C/p\u003E\n","\u003Cp\u003ECopy and paste the following code into the new file before saving:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E--If no discount is given it should be equal to zero \n--Otherwise it will be negative\n\nselect *\n  from {{ ref('fct_orders') }}  \n where item_discount_amount &gt; 0\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ECustom tests are written as SQL select statements where a failing test will return the failing records as the output. This means that in order for the test to pass the result will return no rows and we will need to write the test with this expectation in mind. Given that our assumption about the \u003Ccode\u003Eitem_discount_amount\u003C/code\u003E is that it will always be less than or equal to zero, we then want to write the test to look for when the amount is greater than zero. The where clause in the select statement is written for this and will return failing records if there are any.\u003C/p\u003E\n","\u003Cp\u003EYou may be wondering, if we aren&rsquo;t listing this test in the YAML file, how does dbt know when to run this test? It&rsquo;s the combination of the file living in the \u003Ccode\u003Etests\u003C/code\u003E directory (as defined in our \u003Ccode\u003Edbt_project.yml\u003C/code\u003E file) and the select statement using the \u003Ccode\u003Eref\u003C/code\u003E function to create a dependency with the appropriate model. This way anytime you use the \u003Ccode\u003Edbt test\u003C/code\u003E command to test that model, this test will run alongside all of the other column level tests.\u003C/p\u003E\n","\u003Ch3\u003ERun Tests\u003C/h3\u003E\n","\u003Cp\u003ESpeaking of which, let&rsquo;s finally run our tests! You can enter the following command into the command line: \u003Ccode\u003Edbt test --select fct_orders\u003C/code\u003E.\u003C/p\u003E\n","\u003Cp\u003ESimilar to our model runs, the compiled code that is passed to Snowflake for each test is visible within the \u003Ccode\u003EDetails\u003C/code\u003E section of the test results. And from the looks of it, all of our tests passed!\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_test_results.png?v=95292079\" alt=\"Test Results\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EDocumentation\u003C/h3\u003E\n","\u003Cp\u003ELet&rsquo;s switch gears to take a look at the documentation that we created. The command to tell dbt to create our docs is \u003Ccode\u003Edbt compile --write-catalog\u003C/code\u003E. Run that command and when it completes click on the book icon in the upper left hand corner of the IDE above the version control pane to launch your documentation.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_dbt_docs_ready.png?v=95292079\" alt=\"Docs Ready\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_docs_open.png?v=95292079\" alt=\"Docs Open\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThe documentation site will launch in a new tab. After that loads enter \u003Ccode\u003Efct_orders\u003C/code\u003E into the top search bar and click on the top result to take you the documentation for that model.\u003C/p\u003E\n","\u003Cp\u003EWhen that loads you should be able to see our model level description, the column level descriptions we wrote in the YAML file, and the description that came from doc blocks. You should also be able to see references to the tests being run for the two columns with tests.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_docs_descriptions.png?v=95292079\" alt=\"Docs Descriptions\"\u003E\u003C/p\u003E\n","\u003Cp\u003EIf you scroll down a bit farther you&rsquo;ll be able to see information about the relationships this model has with other models as well. Clicking on the bubble in the bottom right hand corner opens up a preview of the lineage graph and clicking on the expand button in the upper right hand corner takes you to the full view.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_docs_lineage_bubble.png?v=95292079\" alt=\"Docs Lineage Bubble\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_docs_expand_lineage.png?v=95292079\" alt=\"Docs Expand Lineage\"\u003E\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_docs_full_lineage.png?v=95292079\" alt=\"Docs Full Lineage\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThis is the end result of using the \u003Ccode\u003Eref\u003C/code\u003E function throughout your project to reference your models as it allows dbt to build dependencies and lineage. The lineage graph is a powerful feature that gets more powerful as your project gets bigger and allows you to have much more informed architecture discussions as your project continues to grow.\u003C/p\u003E\n","\u003Cp\u003ELet&rsquo;s commit our work for the section. Click the \u003Ccode\u003ECommit and push\u003C/code\u003E button and provide a message like \u003Ccode\u003Etests and docs\u003C/code\u003E to save your most recent changes.\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EDeployment\u003C/h2\u003E\n","\u003Cp\u003EBefore we jump into deploying our code, let&rsquo;s have a quick primer on environments. Up to this point all of the work we&rsquo;ve done in the dbt platform IDE has been in our development environment, with code committed to a feature branch and the models we&rsquo;ve built created in our development schema in Snowflake as defined in our Development environment connection. Doing this work on a feature branch allows us to separate our code from what other coworkers are building, as well as code that is already deemed production ready. Building models in a development schema in Snowflake allows us to separate the database objects we might still be modifying and testing from the database objects running production dashboards or other downstream dependencies. Together, the combination of git branch and Snowflake database objects form our environment.\u003C/p\u003E\n","\u003Cp\u003ENow that we&rsquo;ve completed testing and documenting our work, we&rsquo;re ready to deploy our code from our development environment to our production environment and this involves two steps:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003EPromoting code from our feature branch to the production branch in our repository. Generally the production branch is going to be named your main branch and there&rsquo;s a review process to go through before merging code to the main branch of a repository, but here we are going to merge without review for ease of this workshop.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EDeploying code to our production environment. Once our code is merged to the main branch, we&rsquo;ll need to run dbt in our production environment to build all of our models and run all of our tests. This will allow us to build production ready objects into our production environment in Snowflake. Luckily for us, the Partner Connect flow has already created our deployment environment and job to facilitate this step.\u003C/p\u003E\n\u003C/li\u003E\u003C/ul\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EBefore getting started, let&rsquo;s make sure that we&rsquo;ve committed all of our work to our feature branch. If you still have work to commit you&rsquo;ll be able to click the \u003Ccode\u003ECommit and push\u003C/code\u003E button, provide a message, and then click \u003Ccode\u003ECommit\u003C/code\u003E again.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EOnce all of your work is committed, the git workflow button will now appear as \u003Ccode\u003EMerge this branch to main\u003C/code\u003E. Click \u003Ccode\u003EMerge this branch to main\u003C/code\u003E and the merge process will automatically run in the background.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_merge_to_main.png?v=95292079\" alt=\"Merge to Main\"\u003E&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EWhen it&rsquo;s completed you should see the button read \u003Ccode\u003ECreate branch\u003C/code\u003E and the branch you&rsquo;re currently looking at will become \u003Ccode\u003Emain\u003C/code\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENow that all of our development work has been merged to the main branch, we can build our deployment job. Given that our production environment and production job were created automatically for us through Partner Connect, all we need to do here is update some default configurations to meet our needs.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EClick on the Orchestration tab in the side bar and then click \u003Ccode\u003EEnvironments\u003C/code\u003E.\u003C/p\u003E\n","\u003Cp\u003EYou should see two environments listed and you&rsquo;ll want to click on the \u003Ccode\u003EDeployment\u003C/code\u003E environment to open it up and then \u003Ccode\u003ESettings\u003C/code\u003E in the upper right hand corner to modify it.&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EBefore making any changes, let&rsquo;s touch on what is defined within this environment.\u003C/p\u003E\n","\u003Cp\u003EDeployment environments in dbt platform connect to your data warehouse through a \u003Cstrong\u003Eprofile\u003C/strong\u003E. A profile bundles together the Snowflake connection, the deployment credentials (such as username, authentication, and target schema), and any extended attributes &mdash; and can be reused across deployment environments within a project. Partner Connect created a default connection for us, but we need to create a Profile. Let&rsquo;s create a  profile so our production environment builds into a dedicated \u003Ccode\u003Eproduction\u003C/code\u003E schema.\u003C/p\u003E\n","\u003Cp\u003EClick \u003Ccode\u003ESettings\u003C/code\u003E in the upper right hand corner to edit the Environment. Scroll down to the \u003Ccode\u003EConnection profiles\u003C/code\u003E section, click the &quot;Assign Profile&quot; button and choose \u003Ccode\u003ECreate new profile\u003C/code\u003E.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_assign_profile.png?v=95292079\" alt=\"Assign Profile\"\u003E\u003C/p\u003E\n","\u003Cp\u003EGive the profile a name like \u003Ccode\u003Eproduction\u003C/code\u003E, then click \u003Ccode\u003ECreate profile\u003C/code\u003E.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_create_profile.png?v=95292079\" alt=\"Create New Profile\"\u003E\u003C/p\u003E\n","\u003Cp\u003EFor the connection, select the existing Snowflake connection that Partner Connect set up for you.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_select_snowflake.png?v=95292079\" alt=\"Select Snowflake Connection\"\u003E\u003C/p\u003E\n","\u003Cp\u003EIn the \u003Ccode\u003EDeployment credentials\u003C/code\u003E section, set Auth method to \u003Ccode\u003EUsername and password\u003C/code\u003E and provide the username and password for your Snowflake account. Set the \u003Ccode\u003ESchema\u003C/code\u003E field to \u003Ccode\u003Eproduction\u003C/code\u003E, then save the credentials.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_assign_creds.png?v=95292079\" alt=\"Assign Credentials\"\u003E\u003C/p\u003E\n","\u003Cp\u003ESelect the profile we created and click \u003Ccode\u003EAssign profile\u003C/code\u003E to attach it to this environment.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/assign_profile.png?v=95292079\" alt=\"Assign Profile\"\u003E\u003C/p\u003E\n","\u003Cp\u003EFinally, mark this environment as your production environment by setting the deployment type to \u003Ccode\u003EProduction\u003C/code\u003E, then click \u003Ccode\u003ESave\u003C/code\u003E in the upper right hand corner.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/set_to_prod.png?v=95292079\" alt=\"Set to Prod\"\u003E\u003C/p\u003E\n","\u003Cp\u003EBy assigning a profile that targets the \u003Ccode\u003Eproduction\u003C/code\u003E schema, our deployment job for this environment will build our dbt models in the \u003Ccode\u003Eproduction\u003C/code\u003E schema within the \u003Ccode\u003EPC_DBT_DB\u003C/code\u003E database as defined in the Snowflake connection.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENow let&rsquo;s switch over to our production job. Click on the Orchestration tab again and then select \u003Ccode\u003EJobs\u003C/code\u003E. You should see an existing and pre-configured \u003Ccode\u003EPartner Connect Trial Job\u003C/code\u003E. Similar to the environment, click on the job, then select \u003Ccode\u003ESettings\u003C/code\u003E to modify it. Let&rsquo;s take a look at the job to understand it before making changes. &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EThe Environment section is what connects this job with the environment we want it to run in. This job is already defaulted to use the Deployment environment that we just updated and the rest of the settings we can keep as is.\u003C/p\u003E\n","\u003Cp\u003EThe Execution settings section gives us the option to generate docs, run source freshness, and defer to a previous run state. For the purposes of our lab, we&rsquo;re going to keep these settings as is as well and stick with just generating docs.\u003C/p\u003E\n","\u003Cp\u003EThe Commands section is where we specify exactly which commands we want to run during this job, and we also want to keep this as is. We want our seed to be uploaded first, then run our models, and finally test them. The order of this is important as well, considering that we need our seed to be created before we can run our incremental model, and we need our models to be created before we can test them.\u003C/p\u003E\n","\u003Cp\u003EFinally we have the Triggers section, where we have a number of different options for scheduling our job. Given that our data isn&rsquo;t updating regularly here and we&rsquo;re running this job manually for now, we&rsquo;re also going to leave this section alone.\u003C/p\u003E\n","\u003Cp\u003ESo, what are we changing then? Just the name! Click \u003Ccode\u003EEdit\u003C/code\u003E in the upper right hand corner of the job to allow you to make changes. Then update the name of the job to \u003Ccode\u003EProduction Job\u003C/code\u003E to denote this as our production deployment job. After that&rsquo;s done click \u003Ccode\u003Esave\u003C/code\u003E at the top of the screen.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENow let&rsquo;s go to run our job. Clicking on the job name in the path at the top of the screen will take you back to the job run history page where you&rsquo;ll be able to click \u003Ccode\u003ERun now\u003C/code\u003E to kick off the job. &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_job_run.png?v=95292079\" alt=\"Job Run\"\u003E&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EOnce the run starts you&rsquo;ll be able to click on the run itself and see all of the details about the run, including all of the commands that dbt runs and all of the models and tests run within each step. And if you click into the details of the \u003Ccode\u003Edbt run\u003C/code\u003E step, you&rsquo;ll see that the DDL has been updated to create your models in the \u003Ccode\u003Eproduction\u003C/code\u003E schema.\u003C/p\u003E\n","\u003Cp\u003EWhen it finishes you&rsquo;ll notice that the job experienced an error, which is weird considering that there weren&rsquo;t any issues when we ran our jobs and tests earlier. Looking more closely we can see there&rsquo;s an issue in the test step and we want to click into that step to expand the logs and see what&rsquo;s going on.&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_example_test_failure.png?v=95292079\" alt=\"Example Test Failure\"\u003E&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003EOne of the tests from our example models failed! That was a bit unexpected, but in looking at all of the logs again we can see that the models we created were built successfully in Snowflake and the tests for those models passed. At this point, we can move forward and fix the failing example test another day.\u003C/p\u003E\n","\u003Cp\u003EWhile this process is great for your scheduling and running your dbt jobs, we recognize that transformation jobs don&rsquo;t live in a silo for many data teams. It&rsquo;s not uncommon for a data team to have a data process occurring outside of dbt that has to happen prior to a dbt job running, or for there to be a data process that needs to be triggered after a dbt job finishes. In these sorts of cases, we recommend using our \u003Ca href=\"https://docs.getdbt.com/dbt-cloud/api-v2\"\u003EAPI\u003C/a\u003E with a third party orchestration tool to orchestrate and manage these situations. There are also a number of blog posts and articles, including this \u003Ca href=\"https://docs.getdbt.com/blog/dbt-airflow-spiritual-alignment\"\u003Eone\u003C/a\u003E, to help you think about the best way to manage this alongside dbt platform.\u003C/p\u003E\n","\u003Cp\u003EFinally, let's check dbt Catalog! Select Catalog from the menu:\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/select_catalog.png?v=95292079\" alt=\"Select catalog\"\u003E\u003C/p\u003E\n","\u003Cp\u003EBrowse to a model, explore the lineage, code and other aspects of Catalog.\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/browse_catalog.png?v=95292079\" alt=\"Select catalog\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ELet&rsquo;s go over to Snowflake to confirm that everything built as expected in our production schema. Refresh the database objects in your Snowflake account and you should see the \u003Ccode\u003Eproduction\u003C/code\u003E schema now within our default Partner Connect database. If you click into the schema and everything ran successfully, you should be able to see all of the models we developed there. &lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_production_schema.png?v=95292079\" alt=\"Production Schema\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EVisualizing Your Data in Snowflake\u003C/h2\u003E\n","\u003Cp\u003EWith all of our data now live in our production environment courtesy of our production job, we're ready to visualize our data! Our sales team has asked us to build a visualization showing all time sales by quarter. We're going to take our \u003Ccode\u003Efct_orders\u003C/code\u003E model and create a bar chart. We'll show two approaches: a quick \u003Cstrong\u003EWorkspaces chart\u003C/strong\u003E and a more robust \u003Cstrong\u003EStreamlit app\u003C/strong\u003E.\u003C/p\u003E\n","\u003Ch3\u003EOption A: Workspaces Chart (Quick Visualization)\u003C/h3\u003E\n","\u003Cp\u003ESnowsight allows you to \u003Ca href=\"https://docs.snowflake.com/en/user-guide/ui-snowsight-visualizations\"\u003Evisualize query results as charts\u003C/a\u003E directly within Workspaces. This is the fastest way to create a quick visualization from your data.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EIn Snowflake, navigate to \u003Cstrong\u003EWorkspaces\u003C/strong\u003E in the left sidebar and create a new SQL file. Make sure your role is set to \u003Ccode\u003EPC_DBT_ROLE\u003C/code\u003E and your warehouse is set to \u003Ccode\u003EPC_DBT_WH\u003C/code\u003E.&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ECopy and paste the following query into the SQL file and run it:&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003Eselect\n    date_trunc('quarter', order_date) as quarter,\n    sum(net_item_sales_amount) as sum_net_sales\nfrom pc_dbt_db.production.fct_orders\ngroup by quarter\norder by quarter;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EYou should see results showing quarterly aggregated sales data.&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ENow let's transform our results into a chart. Above the results table, click the \u003Cstrong\u003EChart\u003C/strong\u003E button to bring up the chart view and options panel.&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003ESnowsight will automatically generate a chart based on your results. Let's customize it:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EClick on the chart type selector and change it to \u003Cstrong\u003EBar\u003C/strong\u003E.\u003C/li\u003E\u003Cli\u003EIn the Data section, ensure \u003Ccode\u003EQUARTER\u003C/code\u003E is set as the X-axis and \u003Ccode\u003ESUM_NET_SALES\u003C/code\u003E is set as the Y-axis.\u003C/li\u003E\u003Cli\u003EIn the Appearance section, you can optionally adjust label orientation or add a title.&lt;br&gt;&lt;br&gt;\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003EYou should now see a bar chart showing quarterly net sales over time. It looks like total sales remained very steady with the exception of the last quarter in 1998. We'll need to check in with the sales team about that!&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_workspaces_chart.png?v=95292079\" alt=\"Workspaces Chart\"\u003E\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n","\u003Ch3\u003EOption B: Streamlit App (Production-Ready Visualization)\u003C/h3\u003E\n","\u003Cp\u003EFor a more robust, shareable, and interactive visualization, Snowflake offers \u003Ca href=\"https://docs.snowflake.com/en/developer-guide/streamlit/about-streamlit\"\u003EStreamlit in Snowflake\u003C/a\u003E. Streamlit apps run natively inside Snowflake and are the recommended replacement for the legacy Snowsight Dashboards feature.\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003E\n","\u003Cp\u003EIn the Snowflake UI, navigate to \u003Cstrong\u003EProjects &gt; Streamlit\u003C/strong\u003E in the left sidebar. Click the \u003Cstrong\u003E+ Streamlit App\u003C/strong\u003E button in the upper right hand corner.&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EGive your app a name like \u003Ccode\u003EQuarterly Sales Dashboard\u003C/code\u003E. Select the \u003Ccode\u003EPC_DBT_DB\u003C/code\u003E database, the \u003Ccode\u003EPRODUCTION\u003C/code\u003E schema, and the \u003Ccode\u003EPC_DBT_WH\u003C/code\u003E warehouse. Click \u003Cstrong\u003ECreate\u003C/strong\u003E.&lt;br&gt;&lt;br&gt;\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EReplace the default code in the editor with the following:\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003Eimport streamlit as st\nfrom snowflake.snowpark.context import get_active_session\n\nsession = get_active_session()\n\nst.title(&quot;Quarterly Sales Dashboard&quot;)\nst.write(&quot;All-time net sales aggregated by quarter from the fct_orders model.&quot;)\n\ndf = session.sql(&quot;&quot;&quot;\n    select\n        date_trunc('quarter', order_date) as quarter,\n        sum(net_item_sales_amount) as sum_net_sales\n    from pc_dbt_db.production.fct_orders\n    group by quarter\n    order by quarter\n&quot;&quot;&quot;).to_pandas()\n\nst.bar_chart(df, x=&quot;QUARTER&quot;, y=&quot;SUM_NET_SALES&quot;)\n\nst.metric(\n    label=&quot;Total Net Sales (All Time)&quot;,\n    value=f&quot;${df['SUM_NET_SALES'].sum():,.2f}&quot;\n)\n\u003C/code\u003E\u003C/pre\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EClick \u003Cstrong\u003ERun\u003C/strong\u003E in the upper right corner to see your Streamlit app render. You should see an interactive bar chart showing quarterly sales alongside a metric card with total sales.&lt;br&gt;&lt;br&gt;\n\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_streamlit_chart.png?v=95292079\" alt=\"Streamlit Chart\"\u003E\u003C/p\u003E\n","\u003Cp\u003EThe Streamlit app provides several advantages over a simple Workspaces chart:\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EIt can be shared with stakeholders via a URL\u003C/li\u003E\u003Cli\u003EIt supports interactive filters, multiple charts, and custom layouts\u003C/li\u003E\u003Cli\u003EIt runs natively in Snowflake with no external infrastructure required\u003C/li\u003E\u003Cli\u003EIt can be version controlled and managed alongside your dbt project&lt;br&gt;&lt;br&gt;\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003ECongrats! You've built the visualization the sales team was looking for using both a quick Workspaces chart and a production-ready Streamlit app.\u003C/p\u003E\n\u003C/li\u003E\u003C/ol\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EConclusion &amp; Next Steps\u003C/h2\u003E\n","\u003Cp\u003ECongratulations on completing the lab!\u003C/p\u003E\n","\u003Cp\u003EToday you learned how to use dbt and Snowflake to build data transformation pipelines for analytics. You're now ready to apply these fundamentals to your own data. We encourage you to continue with your free trial by loading your own sample or production data, and by continuing to dive into some of the more advanced functionality of dbt platform and Snowflake.\u003C/p\u003E\n","\u003Ch3\u003EWhat We've Covered\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003EHow to build scalable data transformation pipelines using dbt &amp; Snowflake\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EHow to establish data trust with stakeholders by incorporating key dbt testing capabilities\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EHow to scale Snowflake compute capabilities with the dbt workflow\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EHow to visualize query results using Workspaces charts and Streamlit apps in Snowflake\u003C/p\u003E\n\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003EAdditional Resources\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003E\n","\u003Cp\u003EJoin our \u003Ca href=\"https://community.getdbt.com/\"\u003Edbt community Slack\u003C/a\u003Ewhich contains more than 29,000 data practitioners today. We have a dedicated slack channel #db-snowflake to Snowflake related content.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ECheck out the rest of the demo on \u003Ca href=\"https://developers.snowflake.com/demos/data-transformations-dbt-cloud-snowflake/\"\u003ESnowflake's Demo Hub\u003C/a\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ETo continue your dbt education, check out the \u003Ca href=\"https://learn.getdbt.com/\"\u003Edbt Learn site\u003C/a\u003E.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EContact the \u003Ca href=\"https://www.getdbt.com/contact/\"\u003Edbt platform Sales team\u003C/a\u003E if you're interested in exploring dbt platform for your team or organization.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003ELearn more about \u003Ca href=\"https://docs.snowflake.com/en/developer-guide/streamlit/about-streamlit\"\u003EStreamlit in Snowflake\u003C/a\u003E for building interactive data apps.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003EExplore \u003Ca href=\"https://docs.snowflake.com/en/user-guide/ui-snowsight-visualizations\"\u003EVisualizing data in Workspaces\u003C/a\u003E for quick chart creation.\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Ca href=\"/content/dam/snowflake-site/developers/2024/03/Data-Transformations-with-DBT-cloud-and-Snowflake.pdf\"\u003EDownload Reference Architecture\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Ca href=\"https://medium.com/snowflake/unlocking-reliable-data-and-team-efficiency-with-dbt-cloud-a-hands-on-experience-3d26da7f1bac\"\u003ERead the Blog\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\u003Cli\u003E\n","\u003Cp\u003E\u003Ca href=\"https://youtu.be/84RA7TuhCpg?list=TLGGGzOh827JGPQxOTA5MjAyNQ\"\u003EWatch Demo\u003C/a\u003E\u003C/p\u003E\n\u003C/li\u003E\u003C/ul\u003E"],"description":"Accelerate analytics engineering with dbt Cloud and Snowflake for modular, tested, documented, and collaborative data transformations.","title":"Accelerating Data Teams with Snowflake and dbt platform Hands On Lab","isDeveloperGuidesPage":false,"elements":{"quickstartArticleBody":{"dataType":"string","title":"Quickstart Article Body","value":"\u003C!-- ------------------------ --\u003E\n## Overview \n\nModern businesses need modern data strategies built on platforms that support agility, growth, and operational efficiency.\n\n[Snowflake](https://signup.snowflake.com/?utm_source=snowflake-devrel&utm_medium=developer-guides&utm_content=go-eta-ld-free-trial&utm_term=c-g-snowflake-e&utm_campaign=na-en-Branded&_bt=470247374327&_bk=snowflake&_bm=e&_bn=g&_bg=64805047909&gclid=Cj0KCQjw18WKBhCUARIsAFiW7JwA-C_HmNQzG_OFKhM1Hn9vlW6EAs-9mveiMXychVbbK34lh4vGfHsaAv4NEALw_wcB&gclsrc=aw.ds&utm_cta=developer-guides) is the Data Cloud that enables you to build data-intensive applications without operational burden, so you can focus on data and analytics instead of infrastructure management.\n\n[dbt](https://www.getdbt.com/) is a transformation workflow that lets teams quickly and collaboratively deploy analytics code following software engineering best practices like modularity, portability, CI/CD, and documentation. Now anyone who knows SQL can build production-grade data pipelines. It transforms data in the warehouse leveraging cloud data platforms like Snowflake.\n\nIn this Hands On Lab you will follow a step-by-step guide to using dbt with Snowflake, and see some of the benefits this tandem brings.\n\nLet's get started.\n\n### What You'll Use During the Lab\n\n* A trial [Snowflake](https://signup.snowflake.com/?utm_source=snowflake-devrel&utm_medium=developer-guides&utm_cta=developer-guides) account with ACCOUNTADMIN access\n\n* A [dbt platform](https://www.getdbt.com/signup/) account\n\n### What You'll Learn\n\n* How to build scalable data transformation pipelines using dbt & Snowflake\n\n* How to establish data trust with stakeholders by incorporating key dbt testing capabilities\n\n* How to scale Snowflake compute capabilities with the dbt workflow\n\n* How to visualize query results using Workspaces charts and Streamlit in Snowflake\n\n### What You'll Build\n\n* A set of data analytics pipelines for retail data leveraging dbt and Snowflake, making use of best practices like data quality tests and code promotion between environments\n\n\u003C!-- ------------------------ --\u003E\n## Architecture and Use Case Overview\n\nIn this lab we'll be transforming raw retail data into a consumable orders model that's ready for visualization. We'll be utilizing the TPC-H dataset that comes out of the box with your Snowflake account and transform it using some of dbt's most powerful features. By the time we're done you'll have a fully functional dbt project with testing and documentation, dedicated development and production environments, and experience with the dbt git workflow.\n\n![Architecture Overview](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/architecture_diagram.png?v=95292079)\n\nHere's a sneak peak of the model lineage that we'll be creating using dbt!\n\n![Project Lineage](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/project_lineage.png?v=95292079)\n\n\u003C!-- ------------------------ --\u003E\n## Let's Get Started With Snowflake\n\nTo create a Snowflake trial account, follow [this link](https://signup.snowflake.com/?utm_source=snowflake-devrel&utm_medium=developer-guides&utm_cta=developer-guides) and fill out the form before clicking `Continue`. You'll be asked to choose a cloud provider and for the purposes of this workshop any of them will do. After checking the box to agree to the terms, click `Get Started`. \u003Cbr\u003E \u003Cbr\u003E \nOnce your account is created you'll receive an email confirmation. Within that email, click the `Click to Activate` button and then create your login credentials. You should now be able to see your account! \n\n\nFor a detailed Snowflake UI walkthrough, please refer [here](https://docs.snowflake.com/en/user-guide/ui-snowsight-gs.html#getting-started-with-snowsight). We'll be using Snowsight (the Snowflake web interface) throughout this lab. Snowflake now uses [Workspaces](https://docs.snowflake.com/en/user-guide/ui-snowsight/workspaces) as the default SQL editing experience, which supports file-and-folder organization, sharing, and Git integration.\n\nThe dataset we'll be using for the workshop comes standard as part of your Snowflake trial. Navigate to **Workspaces** in the left sidebar. This will open the Workspaces editor where you can create and manage SQL files. Click the **+ Add new** button to create a new SQL file.\n\n![Snowflake Create SQL file](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_create_SQL_file.png?v=95292079)\n\nOnce there, in the left panel you will see the Database Explorer and you should see a database called `Snowflake_Sample_Data` in the list of objects.\u003Cbr\u003E\n\n\n![Snowflake Sample Data Database](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_sample_data_database.png?v=95292079)\u003Cbr\u003E\n\nIf you don't see the database, you may have removed it from your account. To reinstate it, run the following command in your SQL file:\n\n```sql\ncreate or replace database snowflake_sample_data from share sfc_samples.sample_data;\n```\n\nYou should now see the database as one of your database objects, with associated schemas within it.\n\nClicking the database name will reveal a schema dropdown, including the schema that we'll be using for our source data, [TPCH_SF1](https://docs.snowflake.com/en/user-guide/sample-data-tpch.html).\n\n![Snowflake TPCH SF1](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_tpch_sf1.png?v=95292079)\n\nLet's query one of the tables in the dataset to make sure that you're able to access the data. Copy and paste the following code into your SQL file and run the query.\n\n```sql\nselect *\n    from snowflake_sample_data.tpch_sf1.orders\n    limit 100; \n```\n\nYou should be able to see results, in which case we're good to go. If you're receiving an error, check to make sure that your query syntax is correct.\nGreat! Now it's time to set up dbt platform.\n\n\u003C!-- ------------------------ --\u003E\n## Launching dbt platform via Partner Connect\n\n\n1. We are going to use [Snowflake Partner Connect](https://docs.snowflake.com/en/user-guide/ecosystem-partner-connect.html) to set up your dbt platform account and project. Using Partner Connect will allow you to create a complete dbt account with your [Snowflake connection](https://docs.getdbt.com/docs/dbt-cloud/cloud-configuring-dbt-cloud/connecting-your-database#connecting-to-snowflake), [managed repository](https://docs.getdbt.com/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-using-a-managed-repository), [environments](https://docs.getdbt.com/docs/guides/managing-environments), and credentials with just a few clicks.\n\n2. In the Snowflake UI, click on `Admin` in the lefthand sidebar, then `Partner Connect`. \u003Cbr\u003E\n\n    ![Open Partner Connect](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_open_partner_connect.png?v=95292079)\u003Cbr\u003E\n\n    Check to make sure your role is set as the ACCOUNTADMIN role.\n\n3. Find the dbt tile by typing `dbt` into the `Search Partner Connect` search bar. Click on the dbt tile.\n\n    ![Search Partner Connect](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_search_partner_connect.png?v=95292079)\n\n4. You should now see a popup that says `Connect to dbt` that contains all of the associated objects created by Partner Connect. Click on the `Optional Grant` dropdown menu and add `Snowflake_Sample_Data` in the text box. This will grant your new dbt user role access to the database. Once that's entered, click `Connect`. This will create a dedicated dbt user, database, warehouse, and role for your dbt platform trial.\n\n    ![Connect Partner Connect](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_connect_partner_connect.png?v=95292079)\n\n5. When you see the popup that says `Your partner account has been created`, click on `Activate`.\n\n    ![Activate Partner Connect](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_activate_partner_connect.png?v=95292079)\n\n6. You should be redirected to a dbt platform registration page. Fill out the form and make sure to save the password somewhere for login in the future.\n\n    ![dbt platform Registration](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_registration.png?v=95292079)\n\n7. Click on `Complete Registration`. You should now be redirected to your dbt platform account, complete with a connection to your Snowflake account, a deployment and a development environment, as well as a sample job.\n\n    ![dbt platform Home Page](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_home_page.png?v=95292079)\n\n8. To help you version control your dbt project we have connected it to a [managed repository](https://docs.getdbt.com/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-using-a-managed-repository), which means that dbt Labs will be hosting your repository for you. This will give you access to a git workflow without you having to create and host the repository yourself. You will not need to know git for this workshop; dbt Cloud will help guide you through the workflow. In the future, when you're developing your own project, feel free to use [your own repository](https://docs.getdbt.com/docs/dbt-cloud/cloud-configuring-dbt-cloud/cloud-installing-the-github-application). This will allow you to play with features like [Slim CI](https://docs.getdbt.com/docs/dbt-cloud/using-dbt-cloud/cloud-enabling-continuous-integration-with-github) builds after this workshop.\n\n\u003C!-- ------------------------ --\u003E\n## IDE Walkthrough\n\n1. Now that our dbt platform account is set up, let’s open up the IDE (Integrated Development Environment) and familiarize ourselves with some of the key product features. Click on the `Studio` button in the upper left hand corner of the screen.\u003Cbr\u003E\n\n    ![Develop Button](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_studio_button.png?v=95292079)\n\n2. When the IDE is done loading, click on the black `Initialize dbt project` button in the upper left hand corner of the screen. The initialization process creates a dbt project in the file tree on the left hand side of the screen with all of the core dbt files and folders needed.\u003Cbr\u003E\n\n3. After the initialization is finished, you should see a new folder structure in the left hand sidebar. As we move through the workshop we’ll be sure to touch on a few key files and folders that we’ll work with to build out our project.\n\n4. Next click `Commit to new branch` in the upper left hand corner to commit the new files and folders from the initialize step. We always want our commit messages to be relevant to the work we’re committing, so be sure to provide a message like `initialize project` and click `Commit Changes` in the pop-up window.\n\n5. [Committing](https://www.atlassian.com/git/tutorials/saving-changes/git-commit) your work here will save it to the managed git repository that was created during the Partner Connect signup. This initial commit is the only commit that will be made directly to our `main` branch and from here on out we’ll be doing all of our work on a development branch. This allows us to keep our development work separate from our production code. \n\n6. There are a couple of key features to point out about the IDE before we get to work. It is a text editor, a SQL runner, and a CLI with git version control all baked into one package. This allows you to focus on editing your SQL files, previewing the results with the SQL runner (it even runs Jinja!), and building models at the command line without having to move between different applications. The git workflow in dbt platform allows both git beginners and experts alike to be able to easily version control all of their work with a couple clicks.\n\n    ![IDE Overview](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_IDE_overview.png?v=95292079)\n\n7. Let’s run our first dbt models! Two example models are included in your dbt project in the `models/examples` folder that we can use to illustrate how to run dbt at the command line.\u003Cbr\u003E \n\n    Type in `dbt run` into the command line at the bottom of the screen and hit `Enter` on your keyboard. When the run bar expands you’ll be able to see the results of the run, where you should see the run complete successfully.\u003Cbr\u003E\n\n    ![First Run Results](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_first_run_results.png?v=95292079)\n\n    The run results allow you to see the code that dbt compiles and sends to Snowflake for execution. To view the logs for this run, click one of the model tabs and then click `details`. If you scroll down a bit you’ll be able to see the compiled code and how dbt interacts with Snowflake. Given that this run took place in our development environment, the models were created in your development schema, structured as your first initial and last name.\n\n    ![First Run Details](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_first_run_details.png?v=95292079)\n\n8. Now let’s switch over to Snowflake to confirm that the objects were actually created. Click on the 3 dots above your database objects and then click `Refresh`. Expand the `PC_DBT_DB` database and you should see your development schema. Click on the schema, then click `tables` and `views`. Now you should be able to see `MY_FIRST_DBT_MODEL` as a table and `MY_SECOND_DBT_MODEL` as a view.\n\n![Example Models](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_example_models.png?v=95292079)\n\n9. While we’re in our worksheet, we’re going to create a new warehouse that we’ll be using in our dbt project. Copy and paste the following series of commands and run them in order within your Snowflake worksheet. \n\n    ```\n    use role accountadmin;\n\n    create warehouse pc_dbt_wh_large with warehouse_size = large;\n\n    grant all on warehouse pc_dbt_wh_large to role pc_dbt_role;\n    ```\n\n10. Great! We’re ready to move on to developing our dbt project.\n\n\u003C!-- ------------------------ --\u003E\n## Foundational Structure\n\n\n### Configuring the dbt_project.yml \n\n1. To get started with development for our project, we’ll need to create a new git branch for our work. Clicking on the `create branch` button in the upper left hand corner of the screen will bring up a window to name your branch. We’ll call our branch `snowflake_workshop`. After entering in the name click `Submit`. \n\n2. The first piece of development we’ll do on the project is to update the `dbt_project.yml` file. This is the file that dbt looks for to recognize that the file directory we’re working in is a dbt project. \n\n    ![dbt_project.yml Location](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_dbt_project_yaml_location.png?v=95292079)\u003Cbr\u003E\n\n    Click on the file to open it and replace all of the existing contents with the following code. When you’re done, save the file using the `save` button in the upper right hand corner of the screen. \n\n```yaml\nname: 'snowflake_workshop'\nversion: '1.0.0'\nconfig-version: 2\n\nprofile: 'default'\n\nmodel-paths: [\"models\"]\nanalysis-paths: [\"analyses\"]\ntest-paths: [\"tests\"]\nseed-paths: [\"seeds\"]\nmacro-paths: [\"macros\"]\nsnapshot-paths: [\"snapshots\"]\n\ntarget-path: \"target\"  \nclean-targets:         \n    - \"target\"\n    - \"dbt_packages\"\n\nmodels:\n  snowflake_workshop:\n    staging:\n      +materialized: view\n      +snowflake_warehouse: pc_dbt_wh\n    marts:\n      +materialized: table\n      +snowflake_warehouse: pc_dbt_wh_large\n```\n\u003Cbr\u003E\n    The key configurations to point out in the file with relation to the work that we’re going to do are in the models section. Here we are defining configurations at the folder level that we want applied to all of the models within that folder. Specifically we are demonstrating:\n\n* the `materialized` config, which tells dbt how to materialize models when compiling the code before it pushes it down to Snowflake, and \n\n* the `snowflake_warehouse` config, which specifies which Snowflake warehouse should be used when building models in Snowflake\n\n\n[Materializations](https://docs.getdbt.com/docs/building-a-dbt-project/building-models/materializations) are strategies for persisting dbt models in a warehouse, with `tables` and `views` being the most commonly utilized types. By default, all dbt models are materialized as views and other materialization types can be configured in the `dbt_project.yml` file or in a model itself (we’re going to do both!). \n\nBased on the configuration in our `dbt_project.yml` file, dbt will materialize all of the models in the staging folder as views (not necessary because it is the default but included for example purposes) and all of the models in the marts folder as tables. dbt uses a hierarchical model for configurations where any model configuration overrides the project configuration. The benefit of using dbt materializations is when you execute a dbt model, dbt will use the right DDL associated with the materialization to create the model’s equivalent in the data warehouse, allowing for a bespoke creation flow so you can just focus on writing the select statement. \n\nEach dbt connection declares a default warehouse to use when building models in Snowflake. With the `snowflake_warehouse` config in our file, dbt will use the x-small `pc_dbt_wh` warehouse to build everything in the staging folder and the large `pc_dbt_wh_large` warehouse to build everything in the marts folder. This configuration allows us to scale up and scale down warehouse size based on the compute needs for different parts of our project.\n \nMaterializations and warehouses aren’t the only type of configurations you can apply at the project level, [check out this doc](https://docs.getdbt.com/reference/dbt_project.yml) to learn more about how you can apply configurations on your models, seeds, and even tests. \n\n### Folder Structure\n\ndbt Labs has developed a [project structure guide](https://docs.getdbt.com/guides/best-practices/how-we-structure/1-guide-overview/) that contains a number of recommendations for how to build the folder structure for your project.  The folder structure we’ll be building in this lab follows this guidance and fits into the following categories mentioned in the guide:\n\n* **Sources**: This is our TPC-H dataset and it will be defined in a source YAML file.\n\n* **Staging models**: These models have a one-to-one relationship with their corresponding source and serve as the place for renaming, recasting, and generally performing light transformation that will be used consistently throughout the rest of your project.\n\n* **Marts models**: Models that represent business processes and entities, abstracted from the data sources they are based on. Here is where we perform our major transformations.\u003Cbr\u003E\n\n    By having a defined project structure (even if it’s not this exact one), you create a predictable file tree so there’s never guessing which folder a model should exist in. Let’s implement our folder structure to set the stage for model development. \n\n1. Because we have quite a few folders to create, we’re going to fast track this by using a shortcut to build multiple folders at the same time. \n\n* In your file tree take your cursor and hover over the `models` subdirectory, right click, then click `Create Folder`. We’re going to add two new folders to the file path, `staging` and `tpch` (in that order) by typing `staging/tpch` into the file path. Make sure you’re not including additional folder names and click `Create`. \u003Cbr\u003E\n\n    ![New Folder](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_new_folder.png?v=95292079)\u003Cbr\u003E\n\n    ![Staging TPCH Create Folder](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_models_staging_tpch_folder_create.png?v=95292079)\n\n* If you click into your `models` directory now, you should see the new `staging` folder nested within `models` and the `tpch` folder nested within `staging`.\n\n2. We are going to create our final two folders the same way. Take your cursor and hover over the `models` subdirectory, right click, then click `Create Folder`. This time in the popup window you’re going to enter in the following file path: `marts/core`. Here we’re creating a `marts` folder within `models` and then a `core` folder within `marts`. Your folder tree should look like this when it’s all said and done:\u003Cbr\u003E\n\n    ![File Tree](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_models_marts_core_folder_file_tree.png?v=95292079)\n\n### Packages\n\n\nThe last thing we are going to do to set up your dbt project is implement packages. `dbt packages` are essentially dbt projects that you can bring into your project and use the code as if it was your own. Many packages are hosted on the [dbt Packages Hub](https://hub.getdbt.com/) and provide you with the ability to [generate reusable code](https://hub.getdbt.com/dbt-labs/codegen/latest/) for creating dbt sources and models, access a variety of helpful macros in jinja, and build [database constraints](https://hub.getdbt.com/snowflake-labs/dbt_constraints/latest/) for your Snowflake databases. \n\nWait, what’s jinja? And what’s a macro? \n\n[Jinja](https://docs.getdbt.com/docs/building-a-dbt-project/jinja-macros#overview) is a pythonic templating language that you can use in dbt to do things that usually aren’t possible with SQL. Some examples include building control structures like `if` statements and `for` loops and abstracting code snippets into reusable macros so that you don’t repeat yourself (DRY). \n\nA [macro](https://docs.getdbt.com/docs/building-a-dbt-project/jinja-macros#macros) is a piece of jinja code that can be reused multiple times throughout a dbt project, like a function in other programming languages. Some of dbt’s most important functions like `source` and `ref` are also macros (we’ll cover these later in the lab). If you find yourself repeating a common SQL transformation throughout your models, chances are that there’s a macro in a package that will make your life easier. And if there isn’t, you can always build your own! \n\nWe won’t be writing our own macros in this workshop but we do recommend checking out our [Using Jinja doc](https://docs.getdbt.com/tutorial/learning-more/using-jinja) to get leveled up. And remember when we declared warehouses specifically in our `dbt_project.yml` file? Well, there’s a macro to make that process dynamic and you can read more about it [here](https://github.com/Montreal-Analytics/dbt-snowflake-utils).\n\n1. We’re going to add the `dbt_utils` package to our project. There are a couple of places throughout the workshop that we’ll be using macros from the `dbt_utils` package to help us write DRY code. To install the package, first create a new file within your home directory (same level as your `dbt_project.yml` file) and call it `packages.yml`. \u003Cbr\u003E\n\n    ![Home Directory New File](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_home_directory_new_file.png?v=95292079)\u003Cbr\u003E\n\n    ![Create packages.yml](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_packages_yml_create.png?v=95292079)\n\n    Then copy and paste the following code into it and click save: \n\n```yaml\npackages:\n  - package: dbt-labs/dbt_utils\n    version: 1.3.0\n```\n\n2. The last step to install the package is to run `dbt deps` at the command line, which tells dbt to install the packages defined in your `packages.yml` file. Type in `dbt deps` to the command line, click `Enter`, and you should see a success message there when it completes. \n\n3. Let’s take a second here to commit our work before moving on to the next step. Click the `Commit and push` button, write in a commit message like `setup structure for project`, and click `Commit Changes`.\n\n\n\u003C!-- ------------------------ --\u003E\n\n## Sources and Staging\n\nIn this section, we are going to learn about sources and staging models. \n\nSources in dbt allow you to name and describe raw data from your warehouse in your dbt project, allowing you to establish lineage from raw data to transformed models. When you define your sources in dbt, you are able to apply the same testing and documentation best practices to those sources in addition to your transformed models.   \n\nStaging models have a 1:1 relationship with source tables. This is where you will perform simple transformations like renaming, recasting, or altering a column to a more usable format. Building staging models provides a clear foundation for your downstream modeling to build upon and allows for modular DRY (Don’t Repeat Yourself) modeling. If your logic ever changes, you have one model to update rather than potentially 5 with the same subquery.\n\n### Create Sources\n\nWe’re going to be using the `orders` and `lineitem` tables from the `TPCH_SF1` schema for our transformations and we want to create those tables as sources in our project. Create a new file called `tpch_sources.yml` with the following file path: `models/staging/tpch/tpch_sources.yml`\u003Cbr\u003E\n\nThen paste the following code into the file before saving it:\n\n```yaml\nversion: 2\nsources:\n  - name: tpch\n    description: source tpch data\n    database: snowflake_sample_data\n    schema: tpch_sf1\n    tables:\n      - name: orders\n        description: main order tracking table\n        \n        columns:\n          - name: o_orderkey\n            description: SF*1,500,000 are sparsely populated\n            data_tests: \n              - unique\n              - not_null\n\n      - name: lineitem\n        description: main lineitem table\n        columns:\n          - name: l_orderkey\n            description: Foreign Key to O_ORDERKEY\n            data_tests:\n              - relationships:\n                  arguments: \n                    to: source('tpch', 'orders')\n                    field: o_orderkey\n```\n\u003Cbr\u003E\n\nIn the file you can see that we’ve defined the database where the data is coming from (`snowflake_sample_data`), the schema (`tpch_sf1`), and both tables that we’ll be building with and transforming. Below each table name we have descriptions and tests that we’ve applied to our sources, which we’ll cover in more detail when we get to the testing and documentation section later on. \n\n### Create Staging Models\n\nThe next step is to set up the staging models for the two data sources. Given the one to one relationship between staging models and their corresponding source tables, we’ll build two staging models here. \n\nLet’s start with the orders table. Create a new file called `stg_tpch_orders.sql` with the following file path: `models/staging/tpch/stg_tpch_orders.sql` \nThen paste the following code into the file before saving it:\n\n```sql\nwith source as (\n\n    select * from {{ source('tpch', 'orders') }}\n\n),\n\nrenamed as (\n\n    select\n\n        o_orderkey as order_key,\n        o_custkey as customer_key,\n        o_orderstatus as status_code,\n        o_totalprice as total_price,\n        o_orderdate as order_date,\n        o_orderpriority as priority_code,\n        o_clerk as clerk_name,\n        o_shippriority as ship_priority,\n        o_comment as comment\n\n    from source\n\n)\n\nselect * from renamed\n```\n\nAll we’re doing here is pulling the source data into the model using the `source` function, which we’ll discuss in more detail in just a bit, and doing some column renaming. This serves as the starting point for all other models that need to reference this data so that naming stays consistent throughout your project. \n\nFor the second model, we’ll create another file in the same folder called `stg_tpch_line_items.sql` with the following file path: `models/staging/tpch/stg_tpch_line_items.sql`\n\nThen paste the following code into it before saving the file:\n\n```sql\nwith source as (\n\n    select * from {{ source('tpch', 'lineitem') }}\n\n),\n\nrenamed as (\n\n    select\n    \n        {{ dbt_utils.generate_surrogate_key(\n            ['l_orderkey', \n            'l_linenumber']) }}\n                as order_item_key,\n        l_orderkey as order_key,\n        l_partkey as part_key,\n        l_suppkey as supplier_key,\n        l_linenumber as line_number,\n        l_quantity as quantity,\n        l_extendedprice as extended_price,\n        l_discount as discount_percentage,\n        l_tax as tax_rate,\n        l_returnflag as return_flag,\n        l_linestatus as status_code,\n        l_shipdate as ship_date,\n        l_commitdate as commit_date,\n        l_receiptdate as receipt_date,\n        l_shipinstruct as ship_instructions,\n        l_shipmode as ship_mode,\n        l_comment as comment\n\n    from source\n\n)\n\nselect * from renamed\n```\n\nHere we have renaming similar to what we did in the first staging model, as well as the addition of a new column using the `dbt_utils` package. `dbt_utils.surrogate_key` creates a hashed surrogate key that we call `order_item_key` using the columns listed in the macro. Implementing this surrogate key gives us a unique column that we can use to easily test for uniqueness later on in the lab. You can find more information about how the surrogate key macro works [here](https://github.com/dbt-labs/dbt-utils#surrogate_key-source).\n\n### The Source Function\n\nLet’s take a second to discuss the [source function](https://docs.getdbt.com/docs/building-a-dbt-project/using-sources) we’re using in the first cte of each of our staging models to refer to our raw data sources. \n\n![Source Function](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_source_function.png?v=95292079)\n\nThere are a number of reasons why the source function is used instead of a hardcoded database reference, but one reason to highlight here is that it creates a dependency between our source database object and our staging models. This is going to be really important when we take a look at our data lineage later on in the workshop. Defining sources and referring to them with the source function also allows you to test and document those sources as you can with any other model in your project that you build on top of your sources. Also, if your source changes database or schema, you only have to update it in your `tpch_sources.yml` file rather than updating all of the models it might be used in.\n\n### Build Staging Models\n\nNow that the staging models are built and saved, it’s time to create the models in our development schema in Snowflake. To do this we’re going to pass the `dbt run` command at the command line to run all of the models in our project, which includes the two new staging models and the existing example models. \n\nYour run should complete successfully and you should see green checkmarks next to all of your models in the run results.\n\n![Staging Models Results](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_dbt_run_staging_models.png?v=95292079)\n\nAn important concept to note here is that when you rerun the example models the output will be exactly the same as it was after the first run. This is an example of an [idempotent](https://docs.getdbt.com/terms/idempotent) process, which means that the output of the process is the same after each execution of the process, no matter how many times the process is executed. Similar to the example models, if you were to rerun the staging models we just built, the output would be the same as the first run. One of the key tenets of dbt is to maintain idempotent workflows.\n\nLet’s take a quick look in Snowflake, refresh database objects, open our development schema, and confirm that the new models are there. If you can see them then we’re good to go! \n\n![Check Staging Models](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_check_staging_models.png?v=95292079)\n\nBefore we move onto the next section be sure to commit your new models to your git branch. Click the `Commit and push` button and give your commit a message like `sources and staging` before moving on. \n\n\u003C!-- ------------------------ --\u003E\n\n## Seeds and Incremental Materialization\n\nSeeds and incremental models are both key dbt features that we’re going to bring together to create an incremental staging model. \n\n[Seeds](https://docs.getdbt.com/docs/building-a-dbt-project/seeds) are CSV files in your dbt project and are best used for smaller, static datasets that rarely change. By uploading a CSV file as a seed with dbt, you’re able to apply the same best practices to your CSV as you would with your other models, such as version control, testing, and documentation. Seeds are great for things like a list of mappings of country codes or a list of employee user ids to exclude from a particular model. Here we’ll be creating a seed with country names/regions that orders are taking place in and we’ll use the `dbt seed` command to have dbt load the seed into Snowflake for us.\n\n[Incremental models](https://docs.getdbt.com/docs/building-a-dbt-project/building-models/configuring-incremental-models) are great for large datasets where you want to limit the amount of data that needs to be transformed since the last time dbt ran. They allow you to maintain idempotency while improving warehouse performance and reducing compute costs. The way they work is that the model is built as a table in Snowflake. The first time a model runs, the table is built by transforming all of the rows in the query. On subsequent runs, dbt will transform only the rows that you tell dbt to filter for, either based on a timestamp or unique key. In Snowflake, we have two methods to insert records into the target table (i.e. the table built in the initial run): [merge or delete+insert](https://docs.getdbt.com/reference/resource-configs/snowflake-configs#merge-behavior-incremental-models). The merge method is the default method and the one we will demonstrate here. \n\nAlthough our TPC-H dataset isn’t changing and in this case is rather small, we will make one of our models incremental to demonstrate how this core functionality works, providing you a clear flow without the complexity introduced with much larger datasets. We are going to first build the seed, which will allow us to reference that seed like any other dbt model. Then, we’ll build an incremental model that references the seed and we will have dbt build the incremental model completely to reflect the original state (version 1) of the seed. Next, we’re going to update the seed and rebuild it to reflect the most current state (version 2) of the seed. And finally we’ll rerun the incremental model on version 2 of the seed, which will only run the specific changes we’ve made to the seed and fully demonstrate the incremental materialization strategy. \n\n1. Let’s start with the seed. We’re going to copy and paste the seed data into a new file in the `seeds` folder. First let’s create a file in that folder called `nations.csv` with the following file path: `seeds/nations.csv`\n\n2. Next, copy and paste the following data into the file before clicking save:\n\n    ```\n    N_NATIONKEY,\tN_NAME,\tN_REGIONKEY,\tLAST_UPDATED_DATE\n    0,\tALGERIA,\t0,\t1998-08-02\n    1,\tARGENTINA,\t1,\t1998-08-02\n    2,\tBRAZIL,\t1,\t1998-08-02\n    3,\tCANADA,\t1,\t1998-08-02\n    4,\tEGYPT,\t4,\t1998-08-02\n    5,\tETHIOPIA,\t0,\t1998-08-02\n    6,\tFRANCE,\t3,\t1998-08-02\n    7,\tGERMANY,\t3,\t1998-08-02\n    8,\tINDIA,\t2,\t1998-08-02\n    9,\tINDONESIA,\t2,\t1998-08-02\n    10,\tIRAN,\t4,\t1998-08-02\n    11,\tIRAQ,\t4,\t1998-08-02\n    12,\tJAPAN,\t2,\t1998-08-02\n    13,\tJORDAN,\t4,\t1998-08-02\n    14,\tKENYA,\t0,\t1998-08-02\n    15,\tMOROCCO,\t0,\t1998-08-02\n    16,\tMOZAMBIQUE,\t0,\t1998-08-02\n    17,\tPERU,\t1,\t1998-08-02\n    18,\tCHINA,\t2,\t1998-08-02\n    19,\tROMANIA,\t3,\t1998-08-02\n    20,\tSAUDI ARABIA,\t4,\t1998-08-02\n    21,\tVIETNAM,\t2,\t1998-08-02\n    22,\tUNITED KINGDOM,\t3,\t1998-08-02\n    23,\tUNITED STATES,\t1,\t1998-08-02\n    ```\n\n    As mentioned above, the data here is a list of countries and their region where we have associated orders. This type of data fits our use case for seeds perfectly because the data changes infrequently and doesn’t require consistent updating like our other models. \n\n3. Let’s run our seed to build our initial `nations` table. In the command line write `dbt seed` and click `Enter`. \n\n    The seed command prompts Snowflake to build a table with all of the data that we’ve provided in the CSV file and to create it in our default schema because we have not specified that it should be built elsewhere. \n\n    Once the seed successfully builds, pop over to your Snowflake account and refresh your database objects. When you open your development schema and look at the tables in it, you should now see the `nations` table. \n\n    ![Nations Table](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_nations_table.png?v=95292079)\u003Cbr\u003E\n\n    To confirm that the data in the table matches the CSV, run the following command and do a quick check of the output:\n\n    ```\n    select *\n      from pc_dbt_db.\u003Cyour_dev_schema\u003E.nations\n    ```\n\n    Be sure to update the query with your personal development schema accordingly so that it runs successfully.\n\n4. We could just leave it there with the table created by our seed, but we just got word from our sales team that we’re going to need to make some changes. Specifically, we’re starting to sell in more countries and they’d like to update the `region_key` column to better align with the countries we’re currently selling in. So, we’re going to build an incremental model to show how dbt makes it easy to incrementally add and update data in an existing model. \n\n5. Let’s create our incremental model. Create a new file called `stg_tpch_nations.sql` with the following file path: `models/staging/tpch/stg_tpch_nations.sql`\u003Cbr\u003E\n\n    Then paste the following code into it before clicking save:\n\n    ```\n    {{\n        config(\n            materialized='incremental',\n            unique_key='nation_key'\n        )\n    }}\n    \n    with source as (\n    \n        select * from {{ ref('nations') }}\n    \n    ),\n    \n    renamed as (\n    \n        select\n        \n            n_nationkey as nation_key,\n            n_name as name,\n            n_regionkey as region_key,\n            last_updated_date as last_updated_date\n    \n        from source\n    \n    )\n    \n    select * from renamed\n    \n    {% if is_incremental() %}\n    \n      -- this filter will only be applied on an incremental run\n      where last_updated_date \u003E (select max(last_updated_date) from {{ this }})\n    \n    {% endif %}\n    ```\n\n6. Before we dive into how this model is set up, let’s run the model so that we can see the output details alongside the model structure. Instead of running all our models, let’s do a `dbt run` on this model only. To do so, we’ll add some extra syntax to our command so that it looks like this: `dbt run --select stg_tpch_nations`. The `--select` argument tells dbt to specifically run the model or path that we provide after the argument, in this case our `stg_tpch_nations` model. \u003Cbr\u003E\u003Cbr\u003E\n\n    Once it’s complete, click on the model name in the run window, then click `details`, and then scroll down to be able to see the specifics about what query was run in Snowflake during this first go round. \u003Cbr\u003E\u003Cbr\u003E\n\n    ![stg_tpch_nations Results](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_stg_tpch_nations_results.png?v=95292079)\u003Cbr\u003E\u003Cbr\u003E\n\n    One of the first things to notice in the results is that dbt is running this model as an incremental, as shown by the second line: \u003Cbr\u003E\u003Cbr\u003E\n\n    ![Incremental Model Start](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_incremental_model_start.png?v=95292079)\u003Cbr\u003E\u003Cbr\u003E\n\n    If we look back at the code, we’ll notice that the config block at the top of the model applies the defined configs to this model only and the first thing we’re saying is that we want to materialize it as an incremental model. However, the DDL ran as a regular dbt table materialization. This is because the first time an incremental model is executed, there is no existing database object in Snowflake so it needs to create the table first. We will see the model executed as a true incremental run when we run the model again.\n\n    That same config block also defines the unique key of the model as `nation_key`. Defining a unique key means that when we run this model incrementally, the unique key will be used to determine if there are updates to individual rows and if there are, it will update those rows in addition to appending any new rows to the end of the model. By extension, using a unique key to identify rows for updates will prevent duplicates from being created.\n\n    The rest of the model in this run is very straightforward. dbt is creating the model as a table and we are selecting everything from the `nations` seed that we uploaded, performing some light renaming, and returning those values. \u003Cbr\u003E\u003Cbr\u003E\n\n    ![Incremental Model First Run](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_incremental_model_first_run.png?v=95292079)\u003Cbr\u003E\u003Cbr\u003E\n\n    While that’s it for our run details, our code also contains an `is_incremental` macro at the bottom of the query. The macro is set to run on any incremental run of the model based on the specific core conditionals. Given that this first run of the incremental model is not an incremental run, `is_incremental = false` and dbt does not compile the `where` clause defined within the macro, which is confirmed by our run details. For our next run, `is_incremental` will be true, the macro will be compiled, and we’ll be able to see the `where` clause in action.\n      \n\n7. Now we’re ready to update our seed to meet the needs of our sales team. Let’s open up our seed file again and delete the existing contents. Once that’s done, copy and paste the following into the file before clicking save: \n\n    ```\n    N_NATIONKEY,\tN_NAME,\tN_REGIONKEY,\tLAST_UPDATED_DATE\n    0,\tALGERIA,\t0,\t1998-08-02\n    1,\tARGENTINA,\t1,\t1998-08-02\n    2,\tBRAZIL,\t1,\t1998-08-02\n    3,\tCANADA,\t5,\t2022-05-09\n    4,\tEGYPT,\t4,\t1998-08-02\n    5,\tETHIOPIA,\t0,\t1998-08-02\n    6,\tFRANCE,\t3,\t1998-08-02\n    7,\tGERMANY,\t3,\t1998-08-02\n    8,\tINDIA,\t2,\t1998-08-02\n    9,\tINDONESIA,\t2,\t1998-08-02\n    10,\tIRAN,\t4,\t1998-08-02\n    11,\tIRAQ,\t4,\t1998-08-02\n    12,\tJAPAN,\t2,\t1998-08-02\n    13,\tJORDAN,\t4,\t1998-08-02\n    14,\tKENYA,\t0,\t1998-08-02\n    15,\tMOROCCO,\t0,\t1998-08-02\n    16,\tMOZAMBIQUE,\t0,\t1998-08-02\n    17,\tPERU,\t1,\t1998-08-02\n    18,\tCHINA,\t2,\t1998-08-02\n    19,\tROMANIA,\t3,\t1998-08-02\n    20,\tSAUDI ARABIA,\t4,\t1998-08-02\n    21,\tVIETNAM,\t2,\t1998-08-02\n    22,\tUNITED KINGDOM,\t3,\t1998-08-02\n    23,\tUNITED STATES,\t5,\t2022-05-09\n    24,\tMEXICO,\t5,\t2022-05-09\n    25,\tAUSTRALIA,\t2,\t2022-05-09\n    26,\tNEW ZEALAND,\t2,\t2022-05-09\n    27,\tSOUTH KOREA,\t2,\t2022-05-09\n    28,\tBELGIUM,\t3,\t2022-05-09\n    29,\tSWEDEN,\t3,\t2022-05-09\n    30,\tSPAIN,\t3,\t2022-05-09\n    ```\n\n    There are a couple of updates to discuss here about our seed file. The first is that the sales team requested that countries in North America have their own `region_key`, which is designated as region 5. Canada and the US were existing countries in our seed and their regions have been updated accordingly. There are also a handful of new countries added to the list and their regions are updated and current. Finally, for all new and updated rows the `last_updated_date` was updated to reflect the changes (only took a couple of years to get things updated :) ). \n\n8. Let’s recreate our seed with the new contents by running `dbt seed` again at the command line. Once it completes, let’s use the dbt Cloud IDE to check the results. Within the IDE, click the plus button in the upper right corner to open a new tab, then copy and paste the following command into the new tab before clicking `Preview`: \n\n   ```\n   select *\n     from pc_dbt_db.\u003Cyour_dev_schema\u003E.nations\n   ```\n\n    Again, be sure to update the query with your personal development schema accordingly so that it runs successfully. The results in the preview window are the same results you would see if running the query in Snowflake and provides a convenient way to check your data without having to switch back and forth between applications.\n\n9. Now we’re ready for the update to our incremental model with the new seed loaded. From here all we need to do is rerun the incremental model using the same command we used before: `dbt run --select stg_tpch_nations`. When it finishes, let’s open up the details of the model run again to take a look under the hood and see exactly what’s happening on this incremental run.\n\n    The first thing to notice is that instead of creating a table to start, dbt compiles the code necessary to create a temporary table with the contents of our model *including* the where clause in the `is_incremental` macro. The where clause is filtering rows based on the `last_updated_date` and it will only include records where the `last_updated_date` is greater than the max date in the current results of the model. All of our new and updated rows with a `last_updated_date = 2022-05-09` are returned and stored in our temp table at this stage in the process.\u003Cbr\u003E\u003Cbr\u003E\n\n    ![Incremental Model Second Run](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_incremental_model_second_run.png?v=95292079)\u003Cbr\u003E\u003Cbr\u003E\n\n    The next piece of compiled code is a `merge` statement that merges the results of the temp table with the existing `stg_tpch_nations` table in your warehouse, using the `nation_key` as the uniqueness constraint to join on. It defines the existing `stg_tpch_nations` table as the target table and the temp table created in the first part of the process as the source table to join with the target table. \u003Cbr\u003E\u003Cbr\u003E\n\n    To tackle the update vs. insert question with our modified and new records, dbt compiles the code for the `matchedClause` for updates and the `notMatchedClause` for inserts. For all of the rows where there is a match between the `nation_key` in the temp table and the target table, the `matchedClause` is used to update that row with all of the column values in the temp table. \u003Cbr\u003E\u003Cbr\u003E\n\n    For all of the rows where the `nation_key` in the temp table doesn’t exist yet in the target table, `notMatchedClause` is used to insert those rows into the target table. \u003Cbr\u003E\u003Cbr\u003E\n\n    ![Incremental Model Merge](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_incremental_model_merge.png?v=95292079)\u003Cbr\u003E\u003Cbr\u003E\n\n10. And that does it for our incremental model and associated seed. This example is a textbook use case of how you want to utilize seeds with dbt, as we had a small list stored in a CSV that changed *very* infrequently. \n\n    We also showed how dbt abstracts away the complex DDL to create an incremental model and standardized it in an approachable manner. Even though incremental models are best applied to very large datasets that don’t require rebuilding the entire result set during each run, we were able to dive into the nitty gritty details with this example. It should be noted that on Snowflake, there are two standard incremental methods with merge being the default and [delete+insert](https://docs.getdbt.com/reference/resource-configs/snowflake-configs#merge-behavior-incremental-models) as an alternative option.  \n\n    Last thing before we move on is to commit our work. Click the `Commit and push` button and give your commit a message like `seed and incremental model` before moving on. \n\n\u003C!-- ------------------------ --\u003E\n\n## Transformed Models\n\nNow that we have our staging models built we’re able to start transforming our data to meet our modeling needs. The plan here is to build two transformed models: one is an intermediate model that performs new line items calculations and the other is a fact model that aggregates the new line items calculations back at the order level. The final fact model is what we will use to [build a chart ](https://docs.snowflake.com/en/user-guide/ui-snowsight-dashboards.html)[in Snowsight](https://docs.snowflake.com/en/user-guide/ui-snowsight-dashboards.html).\n\n### Create Marts Models\n\nLet’s start by creating a new file called `int_order_items.sql` with the following file path: `models/marts/core/int_order_items.sql` \n\nThen copy and paste the following code block into the new model and click save:\n\n```sql\nwith orders as (\n    \n    select * from {{ ref('stg_tpch_orders') }}\n\n),\n\nline_item as (\n\n    select * from {{ ref('stg_tpch_line_items') }}\n\n)\nselect \n\n    line_item.order_item_key,\n    orders.order_key,\n    orders.customer_key,\n    orders.order_date,\n    orders.status_code as order_status_code,\n    line_item.part_key,\n    line_item.supplier_key,\n    line_item.return_flag,\n    line_item.line_number,\n    line_item.status_code as order_item_status_code,\n    line_item.ship_date,\n    line_item.commit_date,\n    line_item.receipt_date,\n    line_item.ship_mode,\n    line_item.extended_price,\n    line_item.quantity,\n    \n    -- extended_price is actually the line item total,\n    -- so we back out the extended price per item\n    (line_item.extended_price/nullif(line_item.quantity, 0))::decimal(16,2) as base_price,\n    line_item.discount_percentage,\n    (base_price * (1 - line_item.discount_percentage))::decimal(16,2) as discounted_price,\n\n    line_item.extended_price as gross_item_sales_amount,\n    (line_item.extended_price * (1 - line_item.discount_percentage))::decimal(16,2) as discounted_item_sales_amount,\n    -- We model discounts as negative amounts\n    (-1 * line_item.extended_price * line_item.discount_percentage)::decimal(16,2) as item_discount_amount,\n    line_item.tax_rate,\n    ((gross_item_sales_amount + item_discount_amount) * line_item.tax_rate)::decimal(16,2) as item_tax_amount,\n    (\n        gross_item_sales_amount + \n        item_discount_amount + \n        item_tax_amount\n    )::decimal(16,2) as net_item_sales_amount\n\nfrom\n    orders\ninner join line_item\n        on orders.order_key = line_item.order_key\norder by\n    orders.order_date\n```\n\nLet’s break down what’s happening in this model. At the top we’re selecting all of the data from our staging models in two cte’s using the `ref` function, which we’ll touch on shortly. The main select statement is joining the two staging models together, pulling through a chunk of existing columns and then performing a number of different calculations on the line items data. All of the calculations are data points that we’re interested in and were not calculated in our raw data source, such as individual item prices with discounts and total sales amounts with tax.\n\nThe [`ref`](https://docs.getdbt.com/reference/dbt-jinja-functions/ref/)function is the most important function in dbt and is similar to the source function we used earlier. In this case it is referencing our staging models. As a rule, you should always use the `ref` function to refer to any existing dbt model when building models. This is important for creating dependencies between dbt models as well as allowing you to seamlessly promote code between different environments. When we promote our code from our development environment to our production environment later on in the lab, the `ref` function will compile the correct database object associated with the production environment based on our configurations (both in the connection and in the project). We’ll touch more on environments in more detail in the deployment section of the lab. \n  \nNow let’s create our final transformed fact model. Start by creating a new file called `fct_orders.sql` with the following file path: `models/marts/core/fct_orders.sql`\n\nThen copy and paste the following code into the file before saving:\n\n```sql\nwith orders as (\n    \n    select * from {{ ref('stg_tpch_orders') }} \n\n),\norder_item as (\n    \n    select * from {{ ref('int_order_items') }}\n\n),\norder_item_summary as (\n\n    select \n        order_key,\n        sum(gross_item_sales_amount) as gross_item_sales_amount,\n        sum(item_discount_amount) as item_discount_amount,\n        sum(item_tax_amount) as item_tax_amount,\n        sum(net_item_sales_amount) as net_item_sales_amount\n    from order_item\n    group by\n        1\n),\nfinal as (\n\n    select \n\n        orders.order_key, \n        orders.order_date,\n        orders.customer_key,\n        orders.status_code,\n        orders.priority_code,\n        orders.clerk_name,\n        orders.ship_priority,\n                \n        1 as order_count,                \n        order_item_summary.gross_item_sales_amount,\n        order_item_summary.item_discount_amount,\n        order_item_summary.item_tax_amount,\n        order_item_summary.net_item_sales_amount\n    from\n        orders\n        inner join order_item_summary\n            on orders.order_key = order_item_summary.order_key\n)\nselect \n    *\nfrom\n    final\n\norder by\n    order_date\n```\n\nThis model starts by bringing in our staging orders data and our transformed order items data using the `ref` function in each case. It then takes the new order items calculations and aggregates those values at the order level before joining them back with order level attributes to get the final transformed output. The result is that we’re able to report on orders with their corresponding discount and tax amounts, which we weren’t able to do given the staging data alone. \n\n### Build Models and Results\n\nGreat! Now that we’ve built our transformed models let’s do another `dbt run` to build these models into our development schemas. This time instead of doing `dbt run` and running all of the models in our project, we’re going to tell dbt to build only our new intermediate and fact models. To do this we’ll use the following command: `dbt run --select int_order_items+`. \n\nThere are a couple of concepts to talk about with this command so let’s dive into them:\n\n* We’ve already used the `--select` argument to tell dbt to specifically run the model or path that we provide after the argument, in this case our `int_order_items` model.\n\n* The plus sign appended to the end of `int_order_items` is a graph operator that uses dbt’s dependency graph to run all of the models downstream of the selected model. So in this case dbt will run `int_order_items` and all downstream dependencies of that model as well, which is how this command runs both our intermediate and fact model. You can read more about graph operators [here](https://docs.getdbt.com/reference/node-selection/graph-operators).\n\nNow let’s take a look at the detailed results of our `fct_orders` model so we can understand what is happening in the compiled code. \n\nWhen we created our `dbt_project.yml` file we configured all models in the marts folder to run using the `pc_dbt_wh_large` warehouse, and we can see that in action towards the top of the log: \n\n![Warehouse Details](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_warehouse_details.png?v=95292079)\n\nThere are also a couple pieces about the model itself to point out. The first is that dbt is wrapping our select statement in DDL for us and building the table in our development schema. The `materialized` config in our `dbt_project.yml` file is responsible for building this as a table, as opposed to the default view materialization. \n\n![fct_orders DDL](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_fct_orders_details_ddl.png?v=95292079)\n\nThe other important point here is how the `ref` statements in each of the first two cte’s have been compiled to the appropriate database object. Here you can see that dbt has compiled the code to reference the `stg_tpch_orders` model and the `int_order_items` model in the development schema, given that we are building the model in our development environment. \n\n### Lineage\n\nNow that we’ve completed building all of our models, we can see the lineage graph coming together. We’ll get another look at this when we pop into the docs site, but this is what you should be able to see by clicking on the lineage tab in the IDE with the `fct_orders` model tab open: \n\n![Lineage Graph](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_IDE_lineage_graph.png?v=95292079)\n\nFrom left to right we have our sources (green nodes) leading into our staging models, our intermediate model, and then our final fact model. As was mentioned earlier, declaring sources in dbt and using the `ref` and `source` functions is what allows dbt to create these relations. This becomes very powerful as a project grows in size to include hundreds of models!\n\nLet’s make sure to save our work before moving on to the next section. Take a moment to click the `commit` button and provide a message like `create intermediate and fact models` to save your most recent changes. \n\n\u003C!-- ------------------------ --\u003E\n\n## Tests and Docs\n\nNow that we’ve built out our models and transformations, it’s really important to document and test them. This ensures we catch any errors that violate our assumptions about our data models and provides a guide to anyone else that comes across our work and wants to understand what we built. dbt’s native features include both a data testing and documentation framework to help us accomplish all of our documentation and testing needs.\n\nTesting in dbt comes in two flavors: generic and singular. A [singular test](https://docs.getdbt.com/docs/building-a-dbt-project/tests#singular-tests) is testing in its simplest form: if you can write a SQL query that returns failing rows, it’s a dbt test that can be executed by the dbt test command. [Generic tests](https://docs.getdbt.com/docs/building-a-dbt-project/tests#generic-tests) are basically the same, but with the ability to accept arguments. You define them in a test block (similar to a macro) and once defined, you can reference them by name in your .yml files (applying them to models, columns, sources, snapshots, and seeds). dbt ships with four generic tests that work out of the box that we’re going to use here: `unique`, `not null`, `accepted values`, and `relationships`. We’re also going to write our own singular test to understand a flavor of custom testing in dbt.  And while we won’t cover them in this workshop, you can also access other generic tests from packages like the dbt_utils package as well as [dbt_expectations](https://hub.getdbt.com/calogica/dbt_expectations/latest/), which brings tests inspired by the Great Expectations python package into dbt. \n\n\nWhen it comes to documentation, dbt brings together both column and model level descriptions that you can provide as well as details from your Snowflake information schema in a static site for consumption by other data team members and stakeholders.\n\n### Create Tests And Descriptions\n\nGeneric tests and descriptions for documentation are both defined in YAML files so to get started we’ll create a new file called `core.yml` with the following file path: `models/marts/core/core.yml`\n \nNext we’ll copy and paste the following code block into the new file and click save:\n\n```yaml\nversion: 2\n\nmodels:\n  - name: fct_orders\n    description: orders fact table\n    columns:\n      - name: order_key\n        description: primary key of the model\n        data_tests:\n          - unique\n          - not_null\n          - relationships:\n              arguments: \n                to: ref('stg_tpch_orders')\n                field: order_key\n                severity: warn\n      - name: customer_key\n        description: foreign key for customers\n      - name: order_date\n        description: date of the order\n      - name: status_code\n        description: status of the order\n        tests:\n          - accepted_values:\n              arguments: \n                values: ['P','O','F']\n      - name: priority_code\n        description: code associated with the order\n      - name: clerk_name\n        description: id of the clerk\n      - name: ship_priority\n        description: numeric representation of the shipping priority, zero being the default\n      - name: order_count\n        description: count of order\n      - name: gross_item_sales_amount\n        description: '{{ doc(\"gross_item_sales_amount\") }}'\n      - name: item_discount_amount\n        description: item level discount amount. this is always less than or equal to zero\n      - name: item_tax_amount\n        description: item level tax total\n      - name: net_item_sales_amount\n        description: the net total which factors in discount and tax\n\n```\n\nLet’s take a moment to describe what’s happening in this file and how we’re defining everything. This file is in the `models/marts/core` directory and contains tests and descriptions specifically for the models in this directory, in this case for `fct_orders`. This is an organizational step and at the end of the day it is up to you and your team how you’d like to organize your YAML files and the models they test and define. As a best practice, we do recommend having at least one YAML file for testing and documentation per directory.\n\nIn looking at the formatting, the top level is the model we’re describing and we provide any model level information we’d like to directly under the model name. In our case, we’ve provided a description for our model and this will show as the model level when we view the documentation site for this model.\n\nMoving down to the column level you’ll see that is where most of our work is being done, both from a description and testing standpoint. In looking at the testing on this model, you’ll see that we’re utilizing all of the generic tests on a variety of columns. We expect the `order_key` to be both `unique` and `not_null` and are using the associated tests to check. The `relationships` test is checking to make sure that the `order_key` in this model also exists as an id in `stg_tpch_orders`. And finally, there is an `accepted values` test on the `status_code` to ensure that the values outputted from that column meet our expectations.\n\nWhen we take a look at the descriptions, we’re able to see that they are split between two different notations, one using plain text and the other using a jinja reference to a doc block. The plain text description works just as it does at the model level and allows you to document any column in the YAML file. The doc block expands our documentation capabilities by allowing us to write descriptions in markdown files, which we’ll jump into in the next step.\n\n### Build Markdown File\n\nLet’s build our markdown file to accompany our doc block description. Create a new file called `core.md` with the following file path: `models/marts/core/core.md` \n\nThen copy and paste the following code into it before saving:\n\n```markdown\n# the below are descriptions from fct_orders\n\n{% docs gross_item_sales_amount %} same as extended_price {% enddocs %}\n```\n\nThis markdown file has one doc block corresponding to the one column with a doc block description in our YAML file (note that a markdown file can have multiple doc blocks). The name within quotes in the YAML doc block description connects with the name in the opening doc block in our markdown file. In this case, `'{{doc(\"gross_item_sales_amount\") }}'` in the YAML description matches `{% docs gross_item_sales_amount %}` in our markdown file. \n\nFrom there, the text description in our markdown file is what is passed as the description in our YAML file. This is what we’ll see when we open the corresponding model in our documentation site.\n\nBuilding descriptions with doc blocks in markdown files gives you the ability to format your descriptions with markdown and are particularly helpful when building long descriptions, either at the column or model level. Also, if you have a column that exists in multiple models with the same description, you’re able to reuse the same doc block for that column as many times as you’d like. You can learn more about doc blocks [here](https://docs.getdbt.com/docs/building-a-dbt-project/documentation#using-docs-blocks).\n\n### Build A Singular Test\n\nTaking a look at our descriptions we can see that `item_discount_amount` specifies that the output for that column should always be less than or equal to zero. Let’s test it! \n\nFor this we’ll need a custom data test, so we’ll start by creating a new file called `fct_orders_negative_discount_amount.sql` with the following file path: `tests/fct_orders_negative_discount_amount.sql` \n\nCopy and paste the following code into the new file before saving:\n\n```sql\n--If no discount is given it should be equal to zero \n--Otherwise it will be negative\n\nselect *\n  from {{ ref('fct_orders') }}  \n where item_discount_amount \u003E 0\n```\n\nCustom tests are written as SQL select statements where a failing test will return the failing records as the output. This means that in order for the test to pass the result will return no rows and we will need to write the test with this expectation in mind. Given that our assumption about the `item_discount_amount` is that it will always be less than or equal to zero, we then want to write the test to look for when the amount is greater than zero. The where clause in the select statement is written for this and will return failing records if there are any.\n\nYou may be wondering, if we aren’t listing this test in the YAML file, how does dbt know when to run this test? It’s the combination of the file living in the `tests` directory (as defined in our `dbt_project.yml` file) and the select statement using the `ref` function to create a dependency with the appropriate model. This way anytime you use the `dbt test` command to test that model, this test will run alongside all of the other column level tests.\n\n### Run Tests \n\nSpeaking of which, let’s finally run our tests! You can enter the following command into the command line: `dbt test --select fct_orders`. \n\nSimilar to our model runs, the compiled code that is passed to Snowflake for each test is visible within the `Details` section of the test results. And from the looks of it, all of our tests passed! \n\n![Test Results](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_test_results.png?v=95292079)\n\n### Documentation\n\nLet’s switch gears to take a look at the documentation that we created. The command to tell dbt to create our docs is `dbt compile --write-catalog`. Run that command and when it completes click on the book icon in the upper left hand corner of the IDE above the version control pane to launch your documentation. \n\n![Docs Ready](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_dbt_docs_ready.png?v=95292079)\n\n![Docs Open](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_docs_open.png?v=95292079)\n\nThe documentation site will launch in a new tab. After that loads enter `fct_orders` into the top search bar and click on the top result to take you the documentation for that model. \n\nWhen that loads you should be able to see our model level description, the column level descriptions we wrote in the YAML file, and the description that came from doc blocks. You should also be able to see references to the tests being run for the two columns with tests.\n\n![Docs Descriptions](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_docs_descriptions.png?v=95292079)\n\nIf you scroll down a bit farther you’ll be able to see information about the relationships this model has with other models as well. Clicking on the bubble in the bottom right hand corner opens up a preview of the lineage graph and clicking on the expand button in the upper right hand corner takes you to the full view. \n\n![Docs Lineage Bubble](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_docs_lineage_bubble.png?v=95292079)\n\n![Docs Expand Lineage](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_docs_expand_lineage.png?v=95292079)\n\n![Docs Full Lineage](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_docs_full_lineage.png?v=95292079)\n\nThis is the end result of using the `ref` function throughout your project to reference your models as it allows dbt to build dependencies and lineage. The lineage graph is a powerful feature that gets more powerful as your project gets bigger and allows you to have much more informed architecture discussions as your project continues to grow.\n\nLet’s commit our work for the section. Click the `Commit and push` button and provide a message like `tests and docs` to save your most recent changes. \n\n\u003C!-- ------------------------ --\u003E\n\n## Deployment\n\nBefore we jump into deploying our code, let’s have a quick primer on environments. Up to this point all of the work we’ve done in the dbt platform IDE has been in our development environment, with code committed to a feature branch and the models we’ve built created in our development schema in Snowflake as defined in our Development environment connection. Doing this work on a feature branch allows us to separate our code from what other coworkers are building, as well as code that is already deemed production ready. Building models in a development schema in Snowflake allows us to separate the database objects we might still be modifying and testing from the database objects running production dashboards or other downstream dependencies. Together, the combination of git branch and Snowflake database objects form our environment. \n\nNow that we’ve completed testing and documenting our work, we’re ready to deploy our code from our development environment to our production environment and this involves two steps: \n\n* Promoting code from our feature branch to the production branch in our repository. Generally the production branch is going to be named your main branch and there’s a review process to go through before merging code to the main branch of a repository, but here we are going to merge without review for ease of this workshop.\n\n* Deploying code to our production environment. Once our code is merged to the main branch, we’ll need to run dbt in our production environment to build all of our models and run all of our tests. This will allow us to build production ready objects into our production environment in Snowflake. Luckily for us, the Partner Connect flow has already created our deployment environment and job to facilitate this step.\n\n1. Before getting started, let’s make sure that we’ve committed all of our work to our feature branch. If you still have work to commit you’ll be able to click the `Commit and push` button, provide a message, and then click `Commit` again. \n\n2. Once all of your work is committed, the git workflow button will now appear as `Merge this branch to main`. Click `Merge this branch to main` and the merge process will automatically run in the background. \n\n    ![Merge to Main](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_platform_merge_to_main.png?v=95292079)\u003Cbr\u003E\u003Cbr\u003E\n\n    When it’s completed you should see the button read `Create branch` and the branch you’re currently looking at will become `main`. \n\n3. Now that all of our development work has been merged to the main branch, we can build our deployment job. Given that our production environment and production job were created automatically for us through Partner Connect, all we need to do here is update some default configurations to meet our needs.\n\n4. Click on the Orchestration tab in the side bar and then click `Environments`.\n\n    You should see two environments listed and you’ll want to click on the `Deployment` environment to open it up and then `Settings` in the upper right hand corner to modify it.\u003Cbr\u003E\u003Cbr\u003E\n\n    Before making any changes, let’s touch on what is defined within this environment.\n\n    Deployment environments in dbt platform connect to your data warehouse through a **profile**. A profile bundles together the Snowflake connection, the deployment credentials (such as username, authentication, and target schema), and any extended attributes — and can be reused across deployment environments within a project. Partner Connect created a default connection for us, but we need to create a Profile. Let’s create a  profile so our production environment builds into a dedicated `production` schema.\n\n    Click `Settings` in the upper right hand corner to edit the Environment. Scroll down to the `Connection profiles` section, click the \"Assign Profile\" button and choose `Create new profile`.\n\n    ![Assign Profile](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_assign_profile.png?v=95292079)\n\n    Give the profile a name like `production`, then click `Create profile`.\n\n    ![Create New Profile](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_create_profile.png?v=95292079)\n\n    For the connection, select the existing Snowflake connection that Partner Connect set up for you.\n\n    ![Select Snowflake Connection](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_select_snowflake.png?v=95292079)\n\n    In the `Deployment credentials` section, set Auth method to `Username and password` and provide the username and password for your Snowflake account. Set the `Schema` field to `production`, then save the credentials.\n\n    ![Assign Credentials](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_assign_creds.png?v=95292079)\n\n    Select the profile we created and click `Assign profile` to attach it to this environment.\n\n    ![Assign Profile](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/assign_profile.png?v=95292079)\n\n    Finally, mark this environment as your production environment by setting the deployment type to `Production`, then click `Save` in the upper right hand corner.\n\n    ![Set to Prod](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/set_to_prod.png?v=95292079)\n\n    By assigning a profile that targets the `production` schema, our deployment job for this environment will build our dbt models in the `production` schema within the `PC_DBT_DB` database as defined in the Snowflake connection.\n\n5. Now let’s switch over to our production job. Click on the Orchestration tab again and then select `Jobs`. You should see an existing and pre-configured `Partner Connect Trial Job`. Similar to the environment, click on the job, then select `Settings` to modify it. Let’s take a look at the job to understand it before making changes. \u003Cbr\u003E\u003Cbr\u003E\n\n    The Environment section is what connects this job with the environment we want it to run in. This job is already defaulted to use the Deployment environment that we just updated and the rest of the settings we can keep as is. \n\n    The Execution settings section gives us the option to generate docs, run source freshness, and defer to a previous run state. For the purposes of our lab, we’re going to keep these settings as is as well and stick with just generating docs.\n\n    The Commands section is where we specify exactly which commands we want to run during this job, and we also want to keep this as is. We want our seed to be uploaded first, then run our models, and finally test them. The order of this is important as well, considering that we need our seed to be created before we can run our incremental model, and we need our models to be created before we can test them. \n\n    Finally we have the Triggers section, where we have a number of different options for scheduling our job. Given that our data isn’t updating regularly here and we’re running this job manually for now, we’re also going to leave this section alone. \n\n    So, what are we changing then? Just the name! Click `Edit` in the upper right hand corner of the job to allow you to make changes. Then update the name of the job to `Production Job` to denote this as our production deployment job. After that’s done click `save` at the top of the screen.\n\n6. Now let’s go to run our job. Clicking on the job name in the path at the top of the screen will take you back to the job run history page where you’ll be able to click `Run now` to kick off the job. \u003Cbr\u003E\u003Cbr\u003E\n\n    ![Job Run](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_job_run.png?v=95292079)\u003Cbr\u003E\u003Cbr\u003E\n\n    Once the run starts you’ll be able to click on the run itself and see all of the details about the run, including all of the commands that dbt runs and all of the models and tests run within each step. And if you click into the details of the `dbt run` step, you’ll see that the DDL has been updated to create your models in the `production` schema. \n\n    When it finishes you’ll notice that the job experienced an error, which is weird considering that there weren’t any issues when we ran our jobs and tests earlier. Looking more closely we can see there’s an issue in the test step and we want to click into that step to expand the logs and see what’s going on.\u003Cbr\u003E\u003Cbr\u003E\n\n    ![Example Test Failure](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/dbt_Cloud_example_test_failure.png?v=95292079)\u003Cbr\u003E\u003Cbr\u003E\n\n    One of the tests from our example models failed! That was a bit unexpected, but in looking at all of the logs again we can see that the models we created were built successfully in Snowflake and the tests for those models passed. At this point, we can move forward and fix the failing example test another day. \n\n    While this process is great for your scheduling and running your dbt jobs, we recognize that transformation jobs don’t live in a silo for many data teams. It’s not uncommon for a data team to have a data process occurring outside of dbt that has to happen prior to a dbt job running, or for there to be a data process that needs to be triggered after a dbt job finishes. In these sorts of cases, we recommend using our [API](https://docs.getdbt.com/dbt-cloud/api-v2) with a third party orchestration tool to orchestrate and manage these situations. There are also a number of blog posts and articles, including this [one](https://docs.getdbt.com/blog/dbt-airflow-spiritual-alignment), to help you think about the best way to manage this alongside dbt platform.\n\n    Finally, let's check dbt Catalog! Select Catalog from the menu:\n\n    ![Select catalog](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/select_catalog.png?v=95292079)\n\n    Browse to a model, explore the lineage, code and other aspects of Catalog.\n\n    ![Select catalog](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/browse_catalog.png?v=95292079)\n\n7. Let’s go over to Snowflake to confirm that everything built as expected in our production schema. Refresh the database objects in your Snowflake account and you should see the `production` schema now within our default Partner Connect database. If you click into the schema and everything ran successfully, you should be able to see all of the models we developed there. \u003Cbr\u003E\u003Cbr\u003E\n\n    ![Production Schema](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_production_schema.png?v=95292079)\n\n\u003C!-- ------------------------ --\u003E\n\n## Visualizing Your Data in Snowflake\n\nWith all of our data now live in our production environment courtesy of our production job, we're ready to visualize our data! Our sales team has asked us to build a visualization showing all time sales by quarter. We're going to take our `fct_orders` model and create a bar chart. We'll show two approaches: a quick **Workspaces chart** and a more robust **Streamlit app**.\n\n### Option A: Workspaces Chart (Quick Visualization)\n\nSnowsight allows you to [visualize query results as charts](https://docs.snowflake.com/en/user-guide/ui-snowsight-visualizations) directly within Workspaces. This is the fastest way to create a quick visualization from your data.\n\n1. In Snowflake, navigate to **Workspaces** in the left sidebar and create a new SQL file. Make sure your role is set to `PC_DBT_ROLE` and your warehouse is set to `PC_DBT_WH`.\u003Cbr\u003E\u003Cbr\u003E\n\n2. Copy and paste the following query into the SQL file and run it:\u003Cbr\u003E\u003Cbr\u003E\n\n    ```sql\n    select\n        date_trunc('quarter', order_date) as quarter,\n        sum(net_item_sales_amount) as sum_net_sales\n    from pc_dbt_db.production.fct_orders\n    group by quarter\n    order by quarter;\n    ```\n\n    You should see results showing quarterly aggregated sales data.\u003Cbr\u003E\u003Cbr\u003E\n\n3. Now let's transform our results into a chart. Above the results table, click the **Chart** button to bring up the chart view and options panel.\u003Cbr\u003E\u003Cbr\u003E\n\n    Snowsight will automatically generate a chart based on your results. Let's customize it:\n\n    - Click on the chart type selector and change it to **Bar**.\n    - In the Data section, ensure `QUARTER` is set as the X-axis and `SUM_NET_SALES` is set as the Y-axis.\n    - In the Appearance section, you can optionally adjust label orientation or add a title.\u003Cbr\u003E\u003Cbr\u003E\n\n    You should now see a bar chart showing quarterly net sales over time. It looks like total sales remained very steady with the exception of the last quarter in 1998. We'll need to check in with the sales team about that!\u003Cbr\u003E\u003Cbr\u003E\n\n    ![Workspaces Chart](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_workspaces_chart.png?v=95292079)\n\n### Option B: Streamlit App (Production-Ready Visualization)\n\nFor a more robust, shareable, and interactive visualization, Snowflake offers [Streamlit in Snowflake](https://docs.snowflake.com/en/developer-guide/streamlit/about-streamlit). Streamlit apps run natively inside Snowflake and are the recommended replacement for the legacy Snowsight Dashboards feature.\n\n1. In the Snowflake UI, navigate to **Projects \u003E Streamlit** in the left sidebar. Click the **+ Streamlit App** button in the upper right hand corner.\u003Cbr\u003E\u003Cbr\u003E\n\n2. Give your app a name like `Quarterly Sales Dashboard`. Select the `PC_DBT_DB` database, the `PRODUCTION` schema, and the `PC_DBT_WH` warehouse. Click **Create**.\u003Cbr\u003E\u003Cbr\u003E\n\n3. Replace the default code in the editor with the following:\n\n    ```python\n    import streamlit as st\n    from snowflake.snowpark.context import get_active_session\n\n    session = get_active_session()\n\n    st.title(\"Quarterly Sales Dashboard\")\n    st.write(\"All-time net sales aggregated by quarter from the fct_orders model.\")\n\n    df = session.sql(\"\"\"\n        select\n            date_trunc('quarter', order_date) as quarter,\n            sum(net_item_sales_amount) as sum_net_sales\n        from pc_dbt_db.production.fct_orders\n        group by quarter\n        order by quarter\n    \"\"\").to_pandas()\n\n    st.bar_chart(df, x=\"QUARTER\", y=\"SUM_NET_SALES\")\n\n    st.metric(\n        label=\"Total Net Sales (All Time)\",\n        value=f\"${df['SUM_NET_SALES'].sum():,.2f}\"\n    )\n    ```\n\n4. Click **Run** in the upper right corner to see your Streamlit app render. You should see an interactive bar chart showing quarterly sales alongside a metric card with total sales.\u003Cbr\u003E\u003Cbr\u003E\n![Streamlit Chart](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/Snowflake_streamlit_chart.png?v=95292079)\n\n    The Streamlit app provides several advantages over a simple Workspaces chart:\n    - It can be shared with stakeholders via a URL\n    - It supports interactive filters, multiple charts, and custom layouts\n    - It runs natively in Snowflake with no external infrastructure required\n    - It can be version controlled and managed alongside your dbt project\u003Cbr\u003E\u003Cbr\u003E\n\n    Congrats! You've built the visualization the sales team was looking for using both a quick Workspaces chart and a production-ready Streamlit app.\n\n\u003C!-- ------------------------ --\u003E\n\n## Conclusion & Next Steps\n\nCongratulations on completing the lab!\n\nToday you learned how to use dbt and Snowflake to build data transformation pipelines for analytics. You're now ready to apply these fundamentals to your own data. We encourage you to continue with your free trial by loading your own sample or production data, and by continuing to dive into some of the more advanced functionality of dbt platform and Snowflake.\n\n### What We've Covered\n\n* How to build scalable data transformation pipelines using dbt & Snowflake\n\n* How to establish data trust with stakeholders by incorporating key dbt testing capabilities\n\n* How to scale Snowflake compute capabilities with the dbt workflow\n\n* How to visualize query results using Workspaces charts and Streamlit apps in Snowflake\n\n### Additional Resources \n\n* Join our [dbt community Slack ](https://community.getdbt.com/)which contains more than 29,000 data practitioners today. We have a dedicated slack channel #db-snowflake to Snowflake related content.\n\n* Check out the rest of the demo on [Snowflake's Demo Hub](https://developers.snowflake.com/demos/data-transformations-dbt-cloud-snowflake/).\n\n* To continue your dbt education, check out the [dbt Learn site](https://learn.getdbt.com/).\n\n* Contact the [dbt platform Sales team](https://www.getdbt.com/contact/) if you're interested in exploring dbt platform for your team or organization.\n\n* Learn more about [Streamlit in Snowflake](https://docs.snowflake.com/en/developer-guide/streamlit/about-streamlit) for building interactive data apps.\n\n* Explore [Visualizing data in Workspaces](https://docs.snowflake.com/en/user-guide/ui-snowsight-visualizations) for quick chart creation.\n\n*  [Download Reference Architecture](/content/dam/snowflake-site/developers/2024/03/Data-Transformations-with-DBT-cloud-and-Snowflake.pdf)\n*  [Read the Blog](https://medium.com/snowflake/unlocking-reliable-data-and-team-efficiency-with-dbt-cloud-a-hands-on-experience-3d26da7f1bac)\n*  [Watch Demo](https://youtu.be/84RA7TuhCpg?list=TLGGGzOh827JGPQxOTA5MjAyNQ)\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":[],":type":"snowflake-site/components/contentfragment","model":"snowflake-site/models/quickstart-article"},"flexible_column_cont":{"id":"flexible-column-container-827107ff5a","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-ee4da923fc",":items":{"quickstart_last_modi":{"id":"quickstart-last-modified-c51f27966d","icon":{"id":"icon","icon":"calendar",":type":"snowflake-site/components/icon","appliedCssClassNames":"snowflake-icon-blue"},"lastModifiedDatePrefix":"Updated","lastModifiedDate":"2026-05-07",":type":"snowflake-site/components/quickstart/quickstart-last-modified","appliedCssClassNames":"snowflake-responsive-component-top-padding-small"},"text":{"id":"text-4d6af61c15","additionalClasses":"qs-disclaimer-text","text":"\u003Cp\u003E\u003Cspan style=\"color: #666;\"\u003EThis content is provided as is, and is not maintained on an ongoing basis. It may be out of date with current Snowflake instances\u003C/span\u003E\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"snowflake-responsive-component-top-padding-small"}},":itemsOrder":["quickstart_last_modi","text"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-0794394271",":items":{},":itemsOrder":[],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["contentfragment","flexible_column_cont"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-cf04ee462c",":items":{"quickstart_table_of_":{"layout":"SIMPLE","id":"container-b2456a23aa","isDeveloperGuidesPage":false,":items":{"quickstart_table_of_":{"id":"quickstart-table-of-content-47d25d05e4",":type":"snowflake-site/components/quickstart/quickstart-table-of-content","fragmentPath":"/content/dam/snowflake-site/en/content-fragments/quickstarts/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab","headings":["\u003Ch2\u003EOverview\u003C/h2\u003E","\u003Ch2\u003EArchitecture and Use Case Overview\u003C/h2\u003E","\u003Ch2\u003ELet's Get Started With Snowflake\u003C/h2\u003E","\u003Ch2\u003ELaunching dbt platform via Partner Connect\u003C/h2\u003E","\u003Ch2\u003EIDE Walkthrough\u003C/h2\u003E","\u003Ch2\u003EFoundational Structure\u003C/h2\u003E","\u003Ch2\u003ESources and Staging\u003C/h2\u003E","\u003Ch2\u003ESeeds and Incremental Materialization\u003C/h2\u003E","\u003Ch2\u003ETransformed Models\u003C/h2\u003E","\u003Ch2\u003ETests and Docs\u003C/h2\u003E","\u003Ch2\u003EDeployment\u003C/h2\u003E","\u003Ch2\u003EVisualizing Your Data in Snowflake\u003C/h2\u003E","\u003Ch2\u003EConclusion & Next Steps\u003C/h2\u003E"]},"quickstart_button":{"id":"quickstart-button-9064fba4c8",":type":"snowflake-site/components/quickstart/quickstart-button","fragmentPath":"/content/dam/snowflake-site/en/content-fragments/quickstarts/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab","appliedCssClassNames":"snowflake-responsive-component-top-padding-none"}},":itemsOrder":["quickstart_table_of_","quickstart_button"],":type":"snowflake-site/components/quickstart/quickstart-table-of-content/quickstart-table-of-content-container"}},":itemsOrder":["quickstart_table_of_"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"},"markup_editor":{"id":"markup-editor-165dfb91e8","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-911db95188",":items":{},":itemsOrder":[],":type":"snowflake-site/components/modal/modal-container"},"experiencefragment-footer":{"id":"experiencefragment-2909152185","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master/jcr:content","configured":true,":items":{"root":{"additionalClasses":"sf-footer","layout":"SIMPLE","id":"container-8fdf7881fe",":items":{"container_copy":{"additionalClasses":"sf-footer__inner","gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"flexible_column_cont":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-bd9ef24344","appliedCssClassNames":"snowflake-container snowflake-responsive-container-inner-padding-small",":items":{"flexible_column_cont":{"id":"flexible-column-container-0714d8325f","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-24de72ac3c",":items":{"container":{"additionalClasses":"sf-footer-grid__inner","gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","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"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-dffa640226","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"container_1622723482":{"additionalClasses":"sf-footer__column","gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"container":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-7fb4629fe9","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"container":{"additionalClasses":"sf-footer__newsletter-group","gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12","marketo_v2":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-8451a70aa7","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"text":{"id":"text-01300262c9","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-9949e4d7e9","marketoForm":{"edit":false,"successUrl":null,"formId":"45871","script":null,"hidden":null,"values":null},"munchkinId":"252-RFO-227","serverInstance":"252-RFO-227.mktoweb.com","marketoConfigured":true,"formConfigured":true,":type":"snowflake-site/components/form/marketo-v2"}},":itemsOrder":["text","marketo_v2"],":type":"snowflake-site/components/container"}},":itemsOrder":["container"],":type":"snowflake-site/components/container"},"container":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"text_copy":"aem-GridColumn aem-GridColumn--default--12","text":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-24848248f5","appliedCssClassNames":"snowflake-responsive-container-inner-padding-medium",":items":{"text":{"id":"text-ae717e7350","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-485c3cf2db","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"],":type":"snowflake-site/components/container"},"container_copy_copy":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-d85f7cb855","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"text":{"id":"text-9fcaa87ca8","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"],":type":"snowflake-site/components/container"},"container_copy":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-6bb968a803","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"text":{"id":"text-a2a38a66c0","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"],":type":"snowflake-site/components/container"},"container_copy_copy_":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-a1b87d3590","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"text":{"id":"text-402d4f882f","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"],":type":"snowflake-site/components/container"}},":itemsOrder":["container_1622723482","container","container_copy_copy","container_copy","container_copy_copy_"],":type":"snowflake-site/components/container"}},":itemsOrder":["container"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["flexible_column_cont"],":type":"snowflake-site/components/container"},"container_573483281_":{"additionalClasses":"sf-footer__bottom","gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"container_112062425":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-c7f20e364c","appliedCssClassNames":"snowflake-responsive-container-inner-padding-none",":items":{"container_112062425":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"flexible_column_cont":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-a1618ecc8c","appliedCssClassNames":"snowflake-container snowflake-responsive-container-inner-padding-small",":items":{"flexible_column_cont":{"id":"flexible-column-container-63abf256c6","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-748b789826",":items":{"container":{"additionalClasses":"sf-footer__legal-container","gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","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"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-fa28f6c824","appliedCssClassNames":"snowflake-responsive-container-inner-padding-none",":items":{"container":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"image":"aem-GridColumn aem-GridColumn--default--12"},"layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-f7564c6d1d","appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small",":items":{"image":{"id":"image-70461444f0","additionalClasses":"sf-footer__logo","lazyEnabled":true,"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master/_jcr_content/root/container_573483281_/container_112062425/flexible_column_cont/flexible_column_content_container_1/container/container/image.coreimg.svg/1747882370694/nav-icon-snowflake-bug.svg","alt":"Snowflake logo","imageLink":{"valid":true,"url":"/en/"},":type":"snowflake-site/components/image"}},":itemsOrder":["image"],":type":"snowflake-site/components/container"},"text_copy_copy_16360":{"id":"text-9176c34c91","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-c84d0cc754","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"],":type":"snowflake-site/components/container"}},":itemsOrder":["container"],":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container"},"isBlogPage":false,"isActiveTOC":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["flexible_column_cont"],":type":"snowflake-site/components/container"}},":itemsOrder":["container_112062425"],":type":"snowflake-site/components/container"},"markup_editor_copy":{"id":"markup-editor-a39f36374a","title":"New css","cssContent":".snowflake-image-container img{background-color:transparent}div.snowflake-person-chip-avatar{width:80px !important}#snowflake-blog-template-main-container .aem-GridColumn:has(.vertical-video){background-color:#000;border-radius:16px;overflow:hidden}#snowflake-blog-template-main-container .vertical-video{max-width:240px;margin-left:auto;margin-right:auto}@media screen and (min-width:1367px){.dynamic .heading-1-v2 .snowflake-title-v2-line{font-size:72px !important;line-height:60px !important}}.snowflake-flexible-column-container-items-alignment-match-height .download-card,.snowflake-flexible-column-container-items-alignment-match-height .download-card\u003E.container{height:100%}.download-card div.code-toolbar\u003E.toolbar .copy-to-clipboard-button{background-color:white;border:1px solid #a9e1f6;margin-right:4px;top:6px;border-radius:16px;height:26px;width:40px}.download-card .snowflake-code-snippet\u003Ediv.code-toolbar\u003E.toolbar\u003E.toolbar-item\u003Ebutton:before{content:'';background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9' y='9' width='13' height='13' rx='2' ry='2' style='stroke:%23249EDC;'%3E%3C/rect%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1' style='stroke:%23249EDC;'%3E%3C/path%3E%3C/svg%3E\");background-size:auto 65%;background-position:center;background-repeat:no-repeat;top:0;left:0;width:100%;height:100%}.download-card .snowflake-code-snippet\u003Ediv.code-toolbar\u003E.toolbar\u003E.toolbar-item\u003Ebutton:hover:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='9' y='9' width='13' height='13' rx='2' ry='2' style='stroke:%23fff;'%3E%3C/rect%3E%3Cpath d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1' style='stroke:%23fff;'%3E%3C/path%3E%3C/svg%3E\")}.download-card\u003Ediv{background-color:#fff;border:1px solid #ccc;border-radius:8px;padding:24px}.download-chip__headline{border-bottom:1px solid #ccc;padding-bottom:16px;margin-bottom:16px}.download-chip{padding:8px 12px !important;border-radius:4px;transition:300ms ease background-color}.download-chip .black-blue-text-color .snowflake-title-v2-line{color:#000 !important;padding-right:24px;font-family:'Lato',sans-serif;font-size:14px !important;font-weight:500 !important}.download-chip .black-blue-text-color .snowflake-title-v2-line:not(:first-child){opacity:.6;font-style:italic !important}.download-chip .snowflake-content-chip-button{display:none}.download-chip.is-external-link{background-size:16px 16px;background-image:url(\"data:image/svg+xml,%3Csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.06055 13.0607L11.8605 2.26067M13.0605 10.6607V1.06067H3.46055' stroke='%23249EDC' stroke-width='2.12132' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A\")}.download-chip{background-image:url(\"data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_883_7979)'%3E%3Cpath d='M3.375 16.875H14.625' stroke='%23249EDC' stroke-width='1.40625' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9 1.125V11.25' stroke='%23249EDC' stroke-width='1.40625' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M4.5 7.875L9 12.375L13.5 7.875' stroke='%23249EDC' stroke-width='1.40625' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_883_7979'%3E%3Crect width='18' height='18' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\");background-size:24px auto;background-repeat:no-repeat;background-position:calc(100% - 12px) center}.download-chip__headline{display:flex;gap:16px;flex-direction:row !important;flex-wrap:nowrap}.download-chip__headline::before{content:'';display:inline-block;width:24px;height:24px;background-position:center;background-image:url(\"data:image/svg+xml,%3Csvg width='21' height='21' viewBox='0 0 21 21' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7.50005 9.89999C8.13657 9.89999 8.74702 9.64713 9.19711 9.19704C9.64719 8.74696 9.90005 8.13651 9.90005 7.49999V2.69999C9.90005 2.06347 9.64719 1.45302 9.19711 1.00293C8.74702 .552844 8.13657 .299988 7.50005 .299988H2.70005C2.06353 .299988 1.45308 .552844 1.00299 1.00293C.552905 1.45302 .300049 2.06347 .300049 2.69999V7.49999C.300049 8.13651 .552905 8.74696 1.00299 9.19704C1.45308 9.64713 2.06353 9.89999 2.70005 9.89999H7.50005ZM7.50005 7.49999H2.70005V2.69999H7.50005V7.49999Z' fill='%23249EDC' stroke='white' stroke-width='.6'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7.50005 20.3C8.13657 20.3 8.74702 20.0472 9.19711 19.5971C9.64719 19.147 9.90005 18.5365 9.90005 17.9V13.1C9.90005 12.4635 9.64719 11.853 9.19711 11.403C8.74702 10.9529 8.13657 10.7 7.50005 10.7H2.70005C2.06353 10.7 1.45308 10.9529 1.00299 11.403C.552905 11.853 .300049 12.4635 .300049 13.1V17.9C.300049 18.5365 .552905 19.147 1.00299 19.5971C1.45308 20.0472 2.06353 20.3 2.70005 20.3H7.50005ZM7.50005 17.9H2.70005V13.1H7.50005V17.9Z' fill='%23249EDC' stroke='white' stroke-width='.6'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M17.9001 9.89999C18.5366 9.89999 19.147 9.64713 19.5971 9.19704C20.0472 8.74696 20.3001 8.13651 20.3001 7.49999V2.69999C20.3001 2.06347 20.0472 1.45302 19.5971 1.00293C19.147 .552844 18.5366 .299988 17.9001 .299988H13.1001C12.4636 .299988 11.8531 .552844 11.403 1.00293C10.9529 1.45302 10.7001 2.06347 10.7001 2.69999V7.49999C10.7001 8.13651 10.9529 8.74696 11.403 9.19704C11.8531 9.64713 12.4636 9.89999 13.1001 9.89999H17.9001ZM17.9001 7.49999H13.1001V2.69999H17.9001V7.49999Z' fill='%23249EDC' stroke='white' stroke-width='.6'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M17.9001 20.3C18.5366 20.3 19.147 20.0472 19.5971 19.5971C20.0472 19.147 20.3001 18.5365 20.3001 17.9V13.1C20.3001 12.4635 20.0472 11.853 19.5971 11.403C19.147 10.9529 18.5366 10.7 17.9001 10.7H13.1001C12.4636 10.7 11.8531 10.9529 11.403 11.403C10.9529 11.853 10.7001 12.4635 10.7001 13.1V17.9C10.7001 18.5365 10.9529 19.147 11.403 19.5971C11.8531 20.0472 12.4636 20.3 13.1001 20.3H17.9001ZM17.9001 17.9H13.1001V13.1H17.9001V17.9Z' fill='%23249EDC' stroke='white' stroke-width='.6'/%3E%3C/svg%3E%0A\");background-size:contain;background-repeat:no-repeat}.download-chip__headline.is-cli::before{background-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 17L10 11L4 5' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 19H20' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A\")}.download-card pre[class*=language-]{padding:8px 12px;background-color:var(--ui-background-05);overflow:hidden}.download-chip__headline.is-windows,.download-chip__headline.is-mac{gap:12px}.download-chip__headline.is-windows::before{width:16px;height:20px;background-image:url(\"data:image/svg+xml,%3Csvg width='4875' height='4875' viewBox='0 0 4875 4875' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_122_201)'%3E%3Cpath d='M0 0H2311V2310H0V0ZM2564 0H4875V2310H2564V0ZM0 2564H2311V4875H0V2564ZM2564 2564H4875V4875H2564' fill='%23000'/%3E%3C/g%3E%3C/svg%3E\")}.download-chip__headline.is-mac::before{width:16px;height:20px;background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns:x='ns_extend;' xmlns:i='ns_ai;' xmlns:graph='ns_graphs;' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0' y='0' viewBox='0 0 41.5 51' style='enable-background:new 0 0 41.5 51;' xml:space='preserve'%3E%3Cmetadata%3E%3Csfw xmlns='ns_sfw;'%3E%3Cslices%3E%3C/slices%3E%3CsliceSourceBounds bottomLeftOrigin='true' height='51' width='41.5' x='166.1' y='-208.1'%3E%3C/sliceSourceBounds%3E%3C/sfw%3E%3C/metadata%3E%3Cg%3E%3Cpath d='M40.2,17.4c-3.4,2.1-5.5,5.7-5.5,9.7c0,4.5,2.7,8.6,6.8,10.3c-.8,2.6-2,5-3.5,7.2c-2.2,3.1-4.5,6.3-7.9,6.3s-4.4-2-8.4-2 c-3.9,0-5.3,2.1-8.5,2.1s-5.4-2.9-7.9-6.5C2,39.5,.1,33.7,0,27.6c0-9.9,6.4-15.2,12.8-15.2c3.4,0,6.2,2.2,8.3,2.2 c2,0,5.2-2.3,9-2.3C34.1,12.2,37.9,14.1,40.2,17.4z M28.3,8.1C30,6.1,30.9,3.6,31,1c0-.3,0-.7-.1-1c-2.9,.3-5.6,1.7-7.5,3.9 c-1.7,1.9-2.7,4.3-2.8,6.9c0,.3,0,.6,.1,.9c.2,0,.5,.1,.7,.1C24.1,11.6,26.6,10.2,28.3,8.1z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\")}.download-chip__headline.is-desktop::before{background-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='.8'%3E%3Cpath d='M1.5 21H22.5V18H1.5V21Z' fill='%23000' stroke='white' stroke-width='.75'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M19.5 15C20.2956 15 21.0587 14.6839 21.6213 14.1213C22.1839 13.5587 22.5 12.7956 22.5 12V6C22.5 5.20435 22.1839 4.44129 21.6213 3.87868C21.0587 3.31607 20.2956 3 19.5 3H4.5C3.70435 3 2.94129 3.31607 2.37868 3.87868C1.81607 4.44129 1.5 5.20435 1.5 6V12C1.5 12.7956 1.81607 13.5587 2.37868 14.1213C2.94129 14.6839 3.70435 15 4.5 15H19.5ZM19.5 12H4.5V6H19.5V12Z' fill='%23000' stroke='white' stroke-width='.75'/%3E%3C/g%3E%3C/svg%3E%0A\")}.download-card .snowflake-code-snippet,.download-card .snowflake-code-snippet code,.download-card .snowflake-code-snippet pre{font-size:14px;color:#000;text-shadow:none !important}.download-chip:hover{background-color:var(--ui-background-05) !important;transition:300ms ease background-color}body:has(.snowflake-skip-to-content[style]) #subNav,.pushdown-banner-dismissed #subNav{top:var(--scroll-padding-top) !important;transition:300ms ease top}body:has(.snowflake-skip-to-content[style*=\"58\"]) #subNav{top:34px !important}body:has(.snowflake-skip-to-content[style*=\"82\"]) #subNav{top:58px !important}body:has(.snowflake-skip-to-content[style*=\"130\"]) #subNav{top:106px !important}body:has(.snowflake-skip-to-content[style*=\"138\"]) #subNav{top:114px !important}body:has(.snowflake-skip-to-content[style*=\"146\"]) #subNav{top:122px !important}.is-hidden .snowflake-person-chip-avatar{display:none}.is-small .snowflake-person-chip-avatar{width:56px;height:56px}.ai-summary ul{margin:16px 0 0 0 !important;padding:0 !important;list-style-type:none}.ai-summary li{margin:0;padding:0 0 0 32px;position:relative}.ai-summary li::before{content:\"\";display:block;border-radius:100%;background:#29b5e8;width:18px;height:18px;position:absolute;top:4px;left:0;border:5px solid #e5f2f7;box-sizing:border-box}.ai-summary li:not(:last-child){margin-bottom:1rem}.snowflake-content-chip-image__image{aspect-ratio:5 / 3 !important}.content-chip-new .snowflake-content-chip-image__image{height:100% !important;aspect-ratio:unset !important}.snapshot-card .snowflake-text p:not(:first-child){margin-top:var(--spacing-01)}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(2) p:has(b){font-family:'Texta',sans-serif;margin-top:24px}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(2) p b{font-weight:700 !important}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(2){border-bottom:1px solid #ccc;padding-bottom:24px}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(3) p:first-child:has(b){font-family:'Texta',sans-serif;font-size:20px !important;margin-bottom:1rem !important}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(3) li{display:inline-block}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(3) li a{display:inline-block;text-decoration:none;padding:4px 16px !important;border:1px solid #ccc;border-radius:24px;color:#666 !important}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(3) ul{list-style-type:none;display:flex;padding:0 !important;margin:0 !important;gap:12px}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container img{width:90%;max-width:240px;margin:0 auto}.snapshot-card\u003E.container\u003E.cmp-container\u003E.aem-container{padding:40px;max-width:450px;margin:0 0 0 auto;background-color:#fff;box-shadow:0 2px 6px 0 rgba(152,162,179,.25),0 10px 20px 0 rgba(152,162,179,.10);border-radius:8px;border-top:4px solid var(--ui-01)}.ai-summary{background-color:#f3fbfe;border-left:2px solid var(--ui-01);padding:40px}.ai-summary\u003Espan p:last-child:has(i){color:#666;font-size:14px !important}.ai-summary\u003Espan p:last-child:has(i) a{color:#666 !important;text-decoration:underline !important}.ai-summary\u003Espan p:last-child:has(i) a:hover{color:var(--ui-01) !Important}.ai-summary\u003Espan p:first-child:has(b)::after{content:'';display:inline-block;width:20px;height:20px;background-image:url(\"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9.3158 3.15226C8.6475 6.2258 6.22698 8.64545 3.15232 9.31587C2.94923 9.36072 2.94923 9.63928 3.15232 9.68413C6.22698 10.3522 8.6475 12.7742 9.3158 15.8477C9.36067 16.0508 9.63933 16.0508 9.6842 15.8477C10.3525 12.7742 12.773 10.3545 15.8477 9.68413C16.0508 9.63928 16.0508 9.36072 15.8477 9.31587C12.773 8.64781 10.3525 6.2258 9.6842 3.15226C9.63933 2.94925 9.36067 2.94925 9.3158 3.15226Z' fill='%23249EDC'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M17.3725 11.5461C16.9098 13.6739 15.2341 15.3491 13.1054 15.8132C12.9649 15.8443 12.9649 16.0371 13.1054 16.0681C15.2341 16.5307 16.9098 18.2074 17.3725 20.3353C17.4035 20.4758 17.5965 20.4758 17.6275 20.3353C18.0902 18.2074 19.7659 16.5323 21.8946 16.0681C22.0352 16.0371 22.0352 15.8443 21.8946 15.8132C19.7659 15.3507 18.0902 13.6739 17.6275 11.5461C17.5965 11.4055 17.4035 11.4055 17.3725 11.5461Z' fill='%23249EDC'/%3E%3C/svg%3E%0A\");background-repeat:no-repeat;background-size:contain;background-position:center;vertical-align:middle;margin-left:8px}.ai-summary\u003Espan p:first-child:has(b){color:var(--ui-01) !important;text-transform:uppercase}.border-top{border-top:1px solid rgba(0,0,0,.2)}.border-top\u003Espan{display:block;padding-top:32px}body .snowflake-card-v2-advanced-image__image{aspect-ratio:16 / 9 !important}.content-chip-new .snowflake-content-chip-image__image{border-radius:0;object-fit:cover;height:100%}.sf-footer #ot-sdk-btn.ot-sdk-show-settings,.sf-footer #ot-sdk-btn.optanon-show-settings{color:rgba(255,255,255,.7) !important;text-underline-offset:4px;border-top:none;border-left:none;border-right:none;border-bottom:1px dotted transparent;background-color:transparent !important;background-image:none !important;transition:300ms ease text-decoration-color;padding:0 !important;font-size:12px;font-family:'Lato',sans-serif}.sf-footer #ot-sdk-btn.ot-sdk-show-settings:hover,.sf-footer #ot-sdk-btn.optanon-show-settings:hover{color:rgba(255,255,255,1) !important;border-bottom:1px dotted var(--ui-01);transition:300ms ease text-decoration-color}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:last-child{flex-shrink:0}.sf-footer__disclaimers{background-color:#042130}.sf-footer__disclaimers .snowflake-simple-stat-disclaimer p a{color:inherit;text-decoration:none !important}.sf-footer__disclaimers .snowflake-simple-stat-disclaimer p sup{margin-right:2px}.sf-footer__disclaimers .snowflake-simple-stat-disclaimer p{text-indent:-5px;padding-left:5px}.sf-footer__disclaimers-inner{border-top:1px solid rgba(255,255,255,.25);padding:40px 0}.sf-footer__disclaimers .snowflake-simple-stat{align-items:flex-start;text-align:left;color:rgba(255,255,255,.7);margin-bottom:10px}.sf-footer__social{display:flex;justify-content:center;gap:12px}.sf-footer .snowflake-footer-social-item{margin:0 !important}.sf-footer .snowflake-footer-social-item a{line-height:0;background-color:rgba(3,24,35,.8);display:inline-block;width:48px !important;height:48px;border-radius:8px;display:inline-flex;justify-content:center;align-items:center;transition:300ms ease background-color}.sf-footer .snowflake-footer-social-item a:hover{background-color:var(--ui-01) !important;transition:300ms ease background-color}.sf-footer__bottom{padding-bottom:40px}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoError .mktoErrorMsg{max-width:100%;color:#fff}.sf-footer .mktoForm .mktoError .mktoErrorMsg .mktoErrorDetail{display:inline-block}.sf-footer .mktoFormRow:has(.mktoHtmlText:empty){display:none}.sf-footer .mktoFormRow .mktoHtmlText span{color:#fff !important}.sf-footer{background-color:#042130}.sf-footer .optanon-toggle-display:hover{text-decoration-color:var(--ui-01) !important;cursor:pointer !important;text-underline-offset:4px;text-decoration-style:dotted !important;text-decoration-color:var(--ui-01);color:#fff !important;transition:300ms ease text-decoration-color;text-decoration:underline;opacity:1}.sf-footer__logo{width:40px}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container{row-gap:32px}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;justify-content:space-between;align-items:center;text-align:center;row-gap:16px}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:nth-child(2){text-align:center;flex-grow:1}.sf-footer__legal-links li button,.sf-footer__legal-links li a,.sf-footer__legal-links li{margin:0;color:rgba(255,255,255,.7) !important;font-weight:500}.sf-footer__legal-links li a:hover{color:rgba(255,255,255,1) !important}.sf-footer div.sf-footer__copyright p,.sf-footer div.sf-footer__legal-links li,.sf-footer div.sf-footer__legal-links a,.sf-footer div.sf-footer__legal-links p{font-size:12px !important}.sf-footer__legal-links ul{list-style-type:none;margin:0;padding:0;display:flex;gap:20px;row-gap:4px;justify-content:center;flex-wrap:wrap;text-align:center}.sf-footer__legal-links li:last-child{width:100%}.sf-footer .mktoFormRow:has(.mktoPlaceholder),.sf-footer .mktoFormRow:has(input[type=\"hidden\"]){display:none !important}.sf-footer .mktoFormCol{margin-bottom:0 !important}.sf-footer label[for=\"adhoc1\"]{width:auto !important;flex-grow:1;margin-left:16px}.sf-footer .mktoFieldWrap:has(label[for=\"adhoc1\"]){display:flex;flex-direction:row-reverse;margin-top:22px}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoCheckboxList input[type=checkbox]{background-color:transparent !important;border:1px solid rgba(255,255,255,.4) !important;border-radius:4px !important}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoEmailField,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoTelField,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoTextField,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap select{background-color:transparent !important;color:#fff !important;height:auto !important;border:1px solid rgba(255,255,255,.4) !important;border-radius:4px !important;padding:12px 18px !important}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoEmailField:focus,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoTelField:focus,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoTextField:focus,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap select:focus{border-color:var(--ui-01) !important}.sf-footer .mktoForm *{padding:0 !important}.sf-footer .mktoForm,.sf-footer .snowflake-marketo-form-container{padding:0 !important;background:transparent;margin-bottom:0;box-shadow:none}.sf-footer .mktoHtmlText.mktoHasWidth{width:100% !important;margin:24px 0}.sf-footer .mktoFormRow{flex-direction:column}.sf-footer .mktoForm .mktoButtonWrap{margin:0 !important}.sf-footer select{background-image:url(\"data:image/svg+xml,%3Csvg width='14' height='8' viewBox='0 0 14 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.981445 1.43496L6.90897 7.32496L12.9314 1.33496' stroke='white' stroke-width='1.33333' stroke-miterlimit='10' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A\") !important}.sf-footer .snowflake-marketo-form .mktoButtonWrap.mktoNative{justify-content:flex-start}.sf-footer *::placeholder{color:#fff !important;opacity:.8}.sf-footer .mktoForm .mktoButtonWrap.mktoSimple .mktoButton{background-color:var(--ui-01) !important;color:#fff !important;width:100% !important;padding:12px 16px !important;border:1px solid var(--ui-01) !important;background-image:none !important;border-radius:48px;text-transform:uppercase;font-weight:800 !important;font-family:'Texta',sans-serif !important;font-size:16px !important;line-height:1.2}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoHtmlText\u003Espan,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap .mktoLabel\u003Espan,.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap label.mktoLabel{color:#fff !important}.sf-footer__newsletter-title p:not(:first-child){margin-top:8px !important}.sf-footer__newsletter-title p b{font-weight:800 !important;font-family:'Texta',sans-serif !important;font-size:22px !important;line-height:1.2}.sf-footer__newsletter-title p:last-child{font-size:14px !important;opacity:.8}.sf-footer__link-group li a[target=\"_blank\"]::after{content:'';display:inline-block;width:10px;height:10px;margin-left:5px;background-image:url(\"data:image/svg+xml,%3Csvg width='11' height='11' viewBox='0 0 11 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.72222 1.22222C6.38471 1.22222 6.11111 .948616 6.11111 .611111C6.11111 .273607 6.38471 0 6.72222 0H10.3889C10.551 0 10.7064 .0643867 10.821 .178988C10.9356 .293596 11 .449032 11 .611111V4.27778C11 4.61529 10.7264 4.88889 10.3889 4.88889C10.0514 4.88889 9.77778 4.61529 9.77778 4.27778V2.08647L4.09879 7.76545C3.86013 8.00409 3.4732 8.00409 3.23454 7.76545C2.99589 7.52681 2.99589 7.13986 3.23454 6.90122L8.91355 1.22222H6.72222ZM0 2.44444C0 1.76943 .547207 1.22222 1.22222 1.22222H4.27778C4.61529 1.22222 4.88889 1.49583 4.88889 1.83333C4.88889 2.17084 4.61529 2.44444 4.27778 2.44444H1.22222V9.77778H8.55556V6.72222C8.55556 6.38471 8.82915 6.11111 9.16667 6.11111C9.50418 6.11111 9.77778 6.38471 9.77778 6.72222V9.77778C9.77778 10.4528 9.23059 11 8.55556 11H1.22222C.547207 11 0 10.4528 0 9.77778V2.44444Z' fill='white'/%3E%3C/svg%3E%0A\");background-size:contain;background-repeat:no-repeat;background-position:center}.sf-footer__link-group ul,.sf-footer__link-group li{margin:0;padding:0;list-style-type:none}.sf-footer__link-group ul{margin-top:20px !important}.sf-footer__link-group li{margin-top:15px}.sf-footer div.sf-footer__link-group\u003Espan\u003Ep\u003Ea,.sf-footer div.sf-footer__link-group\u003Espan\u003Ep{color:var(--ui-01) !important;font-weight:800 !important;font-family:'Texta',sans-serif !important;font-size:20px !important;line-height:1.2}.sf-footer__link-group li a{opacity:.9;color:#fff !important;font-weight:500 !important;font-size:15px !important;line-height:1.3}.sf-footer__link-group li a:hover{opacity:1}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container::before,.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container::after{display:none}.sf-footer__column{flex-grow:1}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:not(:first-child){width:50%}@media (min-width:800px){.sf-footer__legal-links ul{justify-content:flex-start;text-align:left}.sf-footer__social{justify-content:flex-end}.sf-footer__legal-links ul{padding-left:24px}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container{text-align:right;flex-wrap:nowrap}.sf-footer__legal-links.align-left ul{justify-content:flex-start}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;justify-content:space-between;flex-direction:row}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:auto !important;max-width:200px}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:first-child{flex-grow:1;order:2;width:100% !important;max-width:none}.sf-footer__legal-container\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:auto}}@media screen and (min-width:1380px){.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container{flex-wrap:nowrap}.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:first-child{padding-right:48px;max-width:380px;background-color:rgba(3,24,35,.4);padding:32px;margin-left:48px;border-radius:16px}.sf-footer__link-group li,.sf-footer__link-group li a{font-size:14px !important;line-height:1.3}}@media screen and (max-width:991px){.sf-footer-grid__inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv:first-child{order:2;margin-top:24px !important}}@media screen and (max-width:420px){.is-reduced-mobile .heading-1-v2,.is-reduced-mobile .heading-1-v2-sm{font-size:32px;line-height:28px}}.quote-content-chip{background-color:var(--ui-background-05);padding:24px;border-radius:12px;position:relative}.quote-content-chip .black-blue-text-color .snowflake-title-v2-line\u003Espan{color:rgba(0,0,0,.8) !important;font-size:15px !important;line-height:1.5 !important;font-family:'Lato',sans-serif;font-weight:400 !important}.quote-content-chip .black-blue-text-color .snowflake-title-v2-line\u003Espan:not(:first-child){max-width:calc(100% - 200px)}.quote-content-chip .black-blue-text-color .snowflake-title-v2-line\u003Espan:nth-child(2){font-family:'Texta',sans-serif;color:#000 !important;font-size:20px !important;font-weight:800 !important;margin-top:24px}.quote-content-chip .snowflake-content-chip-image{width:140px !important}@media screen and (min-width:992px){.quote-content-chip .snowflake-content-chip-image{position:absolute !important;bottom:24px;right:16px}}@media screen and (max-width:991px){.quote-content-chip .snowflake-content-chip-image{margin-bottom:40px}.quote-content-chip{flex-direction:column}}#spa-root{background-color:#fff}.lowercase .snowflake-title-v2-line{text-transform:none !important}.centered .snowflake-logo-content-container-inner{justify-content:center}div.snowflake-linklist-dropdown-menu{max-height:380px}.first-line-blue .snowflake-typographyv2 .snowflake-title-v2-line:first-child{color:var(--ui-01) !important}.is-front{position:relative;z-index:2}.use-case-body .snowflake-text h1,.use-case-body .snowflake-text h2,.use-case-body .snowflake-text h3,.use-case-body .snowflake-text h4,.use-case-body .snowflake-text h5,.use-case-body .snowflake-text h6{font-family:'Texta',sans-serif;color:#000;margin:.25rem 0 0 0}.pc-hero .button-group\u003E.container\u003E.cmp-container\u003E.aem-container{justify-content:flex-start}.sf-footer .mktoFormRow .mktoHtmlText span{font-family:'Lato',sans-serif !important}.snowflake-button-primary.snowflake-button-blue .snowflake-button-container{justify-content:center}.related-chip-25{background-color:#fff;border:1px solid rgba(204,204,204,.5);border-radius:8px;padding:20px;position:relative}.related-chip-25:hover{box-shadow:rgba(152,162,179,.1) 0 10px 20px 0}.related-chip-25:hover::after{right:24px;transition:300ms ease right}.related-chip-25::after{content:'';display:block;transition:300ms ease right;background-image:url(\"data:image/svg+xml,%3Csvg width='8' height='14' viewBox='0 0 8 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7.66699 7C7.66699 6.6571 7.53559 6.32825 7.30169 6.08578L2.34446 .947072C1.84529 .429617 1.0164 .429617 .517219 .947072C.0427878 1.43887 .042788 2.21798 .517219 2.70978L4.65591 7L.51722 11.2902C.0427889 11.782 .0427887 12.5611 .51722 13.0529C1.0164 13.5704 1.84529 13.5704 2.34447 13.0529L7.30169 7.91421C7.53559 7.67175 7.66699 7.34289 7.66699 7Z' fill='%2329B5E8'/%3E%3C/svg%3E%0A\");width:8px;height:14px;display:block;position:absolute;right:30px;top:50%;transform:translateY(-50%);background-size:contain;background-position:center;background-repeat:no-repeat}.related-chip-25 .heading-5-v2{font-size:22px;line-height:1.1}.related-chip-25 .snowflake-content-chip-image{width:48px;flex-shrink:0}.related-chip-25 .snowflake-content-chip-image__image{aspect-ratio:1;height:auto;object-fit:contain}.related-chip-25 .snowflake-content-chip-button{display:none}.related-chip-25 .snowflake-content-chip-content-without-tag{flex-grow:1;padding-right:24px}.case-study-25.small-logo .snowflake-case-study-card-logo img{width:60px !important}.swiper-slide .case-study-25{width:95%;margin-left:auto;margin-right:auto}.case-study-25 .snowflake-case-study-card-logo img{width:140px !important;height:auto !important;transform:none !important;margin:24px 0 8px 0}.case-study-25 .snowflake-case-study-card-image__image{object-position:left center}.case-study-25 .snowflake-case-study-card-information-container{padding-right:24px}.case-study-25 ul{list-style-type:none;padding:0;margin:8px 0 0 0}.case-study-25 li{font-size:15px !important;line-height:1.3 !important;display:flex;flex-direction:column;border-left:4px solid var(--ui-01);padding-left:24px;margin-top:24px;color:#535862;gap:4px}.case-study-25 li b{display:block;font-family:'Texta',sans-serif;font-weight:900 !important;font-size:48px !important;line-height:.9 !important;color:var(--ui-01)}.case-study-25 .snowflake-case-study-card-description p{color:#535862}.case-study-25 .snowflake-case-study-card-description p:nth-child(2):not(:has(a)){color:#000;font-family:Texta;font-size:30px !important;line-height:1 !important;font-style:normal;font-weight:700;text-indent:-8px}.case-study-25.is-story .snowflake-case-study-card-description p:nth-child(2):not(:has(a)){text-indent:0}.case-study-25 .snowflake-case-study-card-key-card{background-color:transparent}.case-study-25 .snowflake-case-study-card-button{display:none}.case-study-25{border-radius:24px;overflow:hidden}@media screen and (min-width:1024px){.case-study-25 .snowflake-case-study-card-left-container{position:static;width:60%;min-height:0}.case-study-25 .snowflake-case-study-card-right-container::after{content:'';display:block;width:60%;max-width:340px;padding-bottom:50%;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 22 16' class='snowflake-pushdown-banner-placeholder-arrow'%3E%3Cpath fill='%2329B5E8' fill-rule='evenodd' d='M17.865 8.756c.088-.274.124-.555.118-.834a2.551 2.551 0 0 0-1.3-2.142L7.887.76C6.645.055 5.063.475 4.35 1.7a2.535 2.535 0 0 0 .947 3.494l4.916 2.809-4.916 2.801a2.543 2.543 0 0 0-.947 3.502c.713 1.222 2.295 1.64 3.537.934l8.796-5.024a2.541 2.541 0 0 0 1.182-1.46Z' clip-rule='evenodd'%3E%3C/path%3E%3C/svg%3E\");background-size:contain;background-repeat:no-repeat;position:absolute;top:-10%;left:-20%}.case-study-25 .snowflake-case-study-card-right-container{max-width:none;width:40%;position:absolute;top:-5%;right:-5%;z-index:0;height:110%}}@media screen and (min-width:768px){.case-study-25 li{max-width:50%}.case-study-25 ul{display:flex;gap:48px}}.snowflake-text.section-eyebrow p{margin-left:auto;margin-right:auto;margin-bottom:16px !important}.snowflake-text.section-eyebrow p,.snowflake-text.eyebrow-text p{text-transform:uppercase;font-family:'Texta',sans-serif !important;font-weight:800 !important;letter-spacing:.025em;margin-bottom:12px;line-height:1.1 !important}.snowflake-title-v2.dynamic .heading-2-v2 span.snowflake-title-v2-line{font-size:clamp(2.5rem,4.5vw,4rem) !important;line-height:.82 !important}.checklist ul{padding:0;margin:0}.checklist ul li{list-style-type:none;padding-left:32px;position:relative}.checklist ul li:not(:last-child){margin-bottom:1em}.checklist ul li::before{content:'';display:inline-block;width:20px;height:20px;background-image:url(\"data:image/svg+xml,%3Csvg width='24' height='25' viewBox='0 0 24 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='.985352' width='24' height='24' rx='12' fill='%23D4F0FA'/%3E%3Cpath d='M7.28613 13.2967L10.7147 16.7253L17.5718 9.86816' stroke='%2329B5E8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A\");background-size:contain;background-repeat:no-repeat;position:absolute;top:3px;left:0}.last-line-blue .snowflake-typographyv2 .snowflake-title-v2-line:last-child{color:var(--ui-01)}.snowflake-text p sup{line-height:0}.snowflake-title-v2.lowercase .heading-3-v2{font-size:28px;line-height:1;text-transform:none;font-weight:700}.snowflake-title-v2.lowercase .heading-2-v2{font-size:32px;line-height:1;text-transform:none;font-weight:700}.content-chip-new{border:1px solid rgba(204,204,204,.5);border-radius:16px;overflow:hidden}.content-chip-new .snowflake-image-container{border-radius:0;display:none}.content-chip-new .snowflake-content-chip-image{margin-right:0;max-width:180px;flex-shrink:0}.content-chip-new .snowflake-content-chip-content{padding:24px}.content-chip-new .black-blue-text-color .snowflake-title-v2-line:first-child{font-size:24px;line-height:1.1}.content-chip-new .black-blue-text-color .snowflake-title-v2-line:not(:first-child){font-family:'Lato',sans-serif;font-size:17px;color:#535862 !important;font-weight:500;line-height:1.45;margin-top:8px;display:none}div.snowflake-text a{font-weight:normal;color:var(--ui-01);text-decoration:underline;text-underline-offset:4px;text-decoration-style:dotted !important;text-decoration-color:transparent;transition:300ms ease text-decoration-color}div.snowflake-text a:hover{text-decoration-color:var(--ui-01);transition:300ms ease text-decoration-color}.footer-nav__link-group .snowflake-button-container,.subnav__item--button,.snowflake-card-v2-advanced-button .snowflake-button-container{justify-content:flex-start}.button-container\u003E.container\u003E.cmp-container\u003E.aem-container{align-items:center}.button-container\u003E.container\u003E.cmp-container\u003E.aem-container .snowflake-button-primary+.snowflake-button-link{margin-left:12px !important}.snowflake-button-regular.snowflake-button-link .snowflake-button-container{font-size:18px !important;text-align:left;justify-content:flex-start;line-height:1.4 !important}body .snowflake-card-v2-advanced{border:1px solid rgba(204,204,204,.5);border-radius:var(--spacing-02);transition:300ms ease all}body .snowflake-card-v2-advanced:hover{transform:translateY(-10px);box-shadow:rgba(152,162,179,.1) 0 10px 20px 0;transition:300ms ease all}body .snowflake-card-v2-advanced-inner{border-bottom:none}body .snowflake-card-v2-advanced-image{line-height:0}body .snowflake-card-v2-advanced-image__image{aspect-ratio:16 / 9}body .snowflake-card-v2-advanced-content{position:relative}body .snowflake-card-v2-advanced-content::after{content:'';display:block;position:absolute;bottom:0;left:0;transition:300ms ease all;width:20%;height:4px;background-color:var(--ui-01);opacity:0}body .snowflake-card-v2-advanced:hover .snowflake-card-v2-advanced-content::after{width:100%;opacity:1;transition:300ms ease all}body .snowflake-card-v2-advanced .snowflake-button-link.snowflake-button-blue .snowflake-button-container\u003E.link-icon{transition:300ms ease transform}body .snowflake-card-v2-advanced:hover .snowflake-button-link.snowflake-button-blue .snowflake-button-container\u003E.link-icon{transform:translateX(4px);transition:300ms ease transform}.six-columns\u003E.container\u003E.cmp-container\u003E.aem-container,.three-columns\u003E.container\u003E.cmp-container\u003E.aem-container,.four-columns\u003E.container\u003E.cmp-container\u003E.aem-container,.five-columns\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;flex-wrap:wrap;gap:24px}.six-columns.align-center\u003E.container\u003E.cmp-container\u003E.aem-container,.three-columns.align-center\u003E.container\u003E.cmp-container\u003E.aem-container,.four-columns.align-center\u003E.container\u003E.cmp-container\u003E.aem-container,.five-columns.align-center\u003E.container\u003E.cmp-container\u003E.aem-container{justify-content:center}.three-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:100%;margin:0 !important}.six-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv,.four-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv,.five-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(50% - 12px);margin:0 !important}@media screen and (min-width:768px){.three-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(50% - 12px)}.six-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv,.four-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv,.five-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(33.333% - 16px)}}@media screen and (min-width:1024px){.snowflake-title-v2.lowercase .heading-3-v2{font-size:34px}.snowflake-title-v2.lowercase.larger .heading-2-v2{font-size:44px;line-height:.95}.three-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(33.333% - 16px)}.four-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(25% - 18px)}.five-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(20% - 19.2px)}.six-columns\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(16.6666% - 20px)}.snowflake-title-v2.lowercase .heading-3-v2{font-size:28px !important}}@media screen and (min-width:1200px){.snowflake-title-v2.lowercase .heading-2-v2{font-size:40px}.content-chip-new .snowflake-content-chip-content{padding:32px}.content-chip-new .snowflake-image-container,.content-chip-new .black-blue-text-color .snowflake-title-v2-line:not(:first-child){display:block}}.promo-banner-25{border-radius:16px;overflow:hidden}.promo-banner-25 .snowflake-premium-content-banner-image-container{position:relative;max-width:380px}.promo-banner-25 .snowflake-text{color:#535862}.promo-banner-25 .snowflake-premium-content-banner-image__image{transform:translateY(8px);transition:300ms ease transform;border-radius:0;width:85%;margin:0 auto;display:block;position:relative;z-index:1}.promo-banner-25 .snowflake-premium-content-banner-image__link:hover .snowflake-premium-content-banner-image__image{transform:translateY(0);transition:300ms ease transform}.promo-banner-25 .snowflake-premium-content-banner-image__inner{height:auto;padding-top:24px}.promo-banner-25 .snowflake-premium-content-banner-image__link{position:relative;z-index:1;height:auto}.promo-banner-25 .snowflake-premium-content-banner-image__link::after{content:'';display:block;position:absolute;clip-path:polygon(0 0,66% 0,100% 100%,0 100%);bottom:0;left:0;width:100%;height:100%;background:var(--ui-01);transition:300ms ease width}.promo-banner-25 .snowflake-premium-content-banner-image__link:hover::after{width:110%;transition:300ms ease width}.sf-footer .snowflake-marketo-form .mktoFormRow .mktoFieldWrap select{background-position:95% 50%}.sf-footer__disclaimers .text-size-small .snowflake-text p{color:#fff !important;font-size:10px !important;opacity:.8}@media screen and (min-width:768px){.sf-footer__disclaimers .text-size-small .snowflake-text p{font-size:12px !important}}@media screen and (max-width:1023px){.mobile-top-padding{padding-top:64px}}@media (max-width:799px){.sf-footer .snowflake-marketo-form .mktoButtonWrap.mktoNative .mktoButton{width:100% !important}.sf-footer__logo{text-align:center;display:block;margin:0 auto}}.customer-card .snowflake-card-v2-advanced-image{aspect-ratio:4.35 / 1}.customer-card .snowflake-card-v2-advanced-image__image{width:100%;height:100%;padding-left:8px;object-fit:contain;object-position:left center;margin:0 !important;aspect-ratio:initial}.customer-card .snowflake-card-v2-advanced-image__inner{height:110px}.customer-card .snowflake-card-v2-advanced-tag-indicator{display:none}.pc-hero .snowflake-container-arrow-small-gray-image{top:-34% !important;width:18% !important}.pc-hero .snowflake-container-arrow-small-gray-image path{fill:var(--ui-01);opacity:1}@media screen and (max-width:767px){.mobile-padding-top{padding-top:64px}.hide-mobile{display:none !important}.pc-hero{padding-top:52px}.pc-hero .snowflake-text p,.pc-hero .left-alignment .snowflake-title-v2-line,.pc-hero h1 span{text-align:center !important}}div.snowflake-pushdown-banner-button{margin-top:0}.button-group.align-center\u003E.container\u003E.cmp-container\u003E.aem-container{align-items:center;justify-content:center !important}.text-center .snowflake-breadcrumb-swiper .swiper-wrapper{justify-content:center}div.snowflake-breadcrumb a.snowflake-breadcrumb-item,.snowflake-breadcrumb div.snowflake-breadcrumb-item{text-transform:none;font-weight:500}.snowflake-breadcrumb svg{display:none !important}.snowflake-breadcrumb a:has(svg)::after{content:'/';margin:0 12px;color:#666}.hide-filters .snowflake-filterable-and-searchable-grid-top-part{display:none !important}.page-section{padding-left:24px;padding-right:24px}@media screen and (min-width:768px){.page-section{padding-left:48px;padding-right:48px}}.download-card pre[class*=language-]{overflow-x:scroll !important}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false}},":itemsOrder":["container_copy","container_573483281_","markup_editor_copy"],":type":"snowflake-site/components/container"}},":itemsOrder":["root"],":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf"},"markup_editor":{"id":"markup-editor-ef10a5d42e","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"],":mappedPath":"/en/developers/guides/accelerating-data-teams-with-snowflake-and-dbt-cloud-hands-on-lab/","coveoConfig":{"apiKey":"xx335921a6-2a0a-40f2-a167-e390b4766c3d","organizationId":"snowflakecomputingproduction8neljofn","searchHub":"snowflake.com","pipeline":"snowflake.com"},":type":"snowflake-site/components/structure/page","locale":"en"}
  