{"allowedRenditionsWidth":["320","480","640","768","960","1200","1440","1920"],"templateName":"quickstart-page-template","cssClassNames":"page basicpage summit-page","description":"このガイドでは、Snowpark Pythonカテゴリーを使用してデータエンジニアリングパイプラインを構築する方法について詳細に説明します。","language":"ja","title":"Snowpark Pythonによるデータエンジニアリングパイプライン","analyticsPageType":"quickstart-page-template","analyticsCategory":"general","analyticsSubCategory":"","excludeFromAnalytics":false,":hierarchyType":"page",":path":"/content/snowflake-site/global/ja/developers/guides/data-engineering-pipelines-with-snowpark-python-ja","analyticsContentTags":["snowflake-site:taxonomy/product/data-engineering","snowflake-site:taxonomy/solution-center/certification/quickstart"],"analyticsEnabled":true,"coveoConfig":{"pipeline":"snowflake.com","apiKey":"xx335921a6-2a0a-40f2-a167-e390b4766c3d","organizationId":"snowflakecomputingproduction8neljofn","searchHub":"snowflake.com"},"isPasswordProtected":false,"analyticsDebugMode":false,"analyticsData":{"excludeFromAnalytics":false,"subCategory":"","pageType":"quickstart-page-template","templateName":"quickstart-page-template","siteName":"snowflake","pageUrl":"/content/snowflake-site/global/ja/developers/guides/data-engineering-pipelines-with-snowpark-python-ja","language":"ja","category":"general","pageName":"Snowpark Pythonによるデータエンジニアリングパイプライン","contentTags":["snowflake-site:taxonomy/product/data-engineering","snowflake-site:taxonomy/solution-center/certification/quickstart"]},":type":"snowflake-site/components/structure/page",":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-5109f1ab42","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/ja/site/pushdown-banner/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":items":{"root":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"pushdown_banner_copy":"aem-GridColumn aem-GridColumn--default--12"},"id":"container-b0fab05dcc","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container",":items":{"pushdown_banner_copy":{"id":"pushdown-banner-4fe21b4cab","contentHeadline":"SNOWFLAKE WORLD TOUR TOKYO（9月10日〜11日 東京開催）","contentDescription":"今なら、一般登録に先駆けてセッション登録ができる早期登録者特典が得られます。","contentJustifyContent":"center","linkStyle":"text-white","linkCTA":{"id":"link-cta","heapButtonClasses":["pushdown_banner"],"showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://www.snowflake.com/ja/world-tour/tokyo/?utm_cta=homepage-pushdown-banner"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"今すぐ登録"},":type":"snowflake-site/components/pushdown-banner","appliedCssClassNames":"snowflake-pushdown-banner-text-white snowflake-pushdown-banner-background-black"}},":itemsOrder":["pushdown_banner_copy"]},"image":{":type":"nt:unstructured"},"cq:metadata":{":type":"nt:unstructured"}},":itemsOrder":["root","image","cq:metadata"]},"experiencefragment-header":{"id":"experiencefragment-bbbc3c5826","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/ja/site/mega-nav-header/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":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"},"id":"container-c7cf37e30e","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container",":items":{"markup_editor":{"id":"markup-editor-207d1c7b69","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:'Snowflakeで実現できること\u003E';display:block;color:var(--ui-01);margin-top:16px}.nav-item__platform-parent .snowflake-mega-nav-nav-item-description::after{content:'プラットフォームを見る\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","id":"container-3a533064de","layout":"SIMPLE",":type":"snowflake-site/components/mega-header","appliedCssClassNames":"snowflake-header-container white",":items":{"nav_mega":{"activeItem":"item_1719963657751_c_663444255","id":"tabs-59c39ba9c1",":type":"snowflake-site/components/nav/nav-mega",":items":{"item_1719963657751_c_663444255":{"id":"nav-dropdown-menu-902bea51c5","enableDropdown":true,"nav_column_container":{"id":"container-9d4726f124","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column":{"additionalClasses":"nav-platform-sidebar","numberOfSubColumns":"one-column","minWidth":"230","maxWidth":"350","id":"container-c1f0537f95","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_copy_2_793631646":{"id":"nav-item-c8c8b76d59","additionalClasses":"nav-item__platform-parent","linkDescription":"データの種類や規模に関係なくビジネスをセキュアに接続するフルマネージドのプラットフォームで、AIプロダクトやアプリなどを開発できます。","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/platform/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflakeプラットフォーム"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-8cb4ecec2e","additionalClasses":"nav-item nav-item--si","linkDescription":"あらゆる知識を集約、信頼のエンタープライズAIエージェントが応える","flag":"NOW GA","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/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-f88e72c68c","additionalClasses":"blue-icon","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/analytics/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"アナリティクス"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy_2":{"id":"nav-item-c81610ebc5","additionalClasses":"blue-icon","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/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-e7cde18a0f","additionalClasses":"blue-icon","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/data-engineering/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"データエンジニアリング"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634_929542939":{"id":"nav-item-a94431f95f","additionalClasses":"blue-icon","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/applications-and-collaboration/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"アプリケーションとコラボレーション"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634_115249434":{"id":"nav-item-478c9d82b2","additionalClasses":"blue-icon","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/transactions/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"トランザクション"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-65621bc020",":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_copy_2_793631646","nav_item_copy","nav_item_copy_copy_2_836345186","nav_item_copy_copy_2","nav_item_copy_copy_2_1314771042","nav_item_copy_144634_929542939","nav_item_copy_144634_115249434","nav_item"]},"nav_column_copy_copy":{"additionalClasses":"meganav-platform-features","navColumnTitle":"注目の機能","numberOfSubColumns":"two-columns","id":"container-319c5a55c6","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_212715_1193254885":{"id":"nav-item-d5fdd30411","linkDescription":"SnowflakeネイティブAIコーディングエージェント","flag":"New","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/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_898460603":{"id":"nav-item-1d26e998c7","linkDescription":"Snowflake上で動作する、完全な互換性を備えたオープンソースのPostgres","flag":"NOW GA","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/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_716480505":{"id":"nav-item-a4e56cf1b2","propertiesId":"testID","linkDescription":"業界をリードするLLMへのほぼ即時のアクセス","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/features/cortex/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Cortex AI"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_212715":{"id":"nav-item-bac6031196","linkDescription":"統合のためのスムーズなデータ移動","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/features/openflow/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Openflow"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_655386423":{"id":"nav-item-aea8fc3ff6","propertiesId":"testID","linkDescription":"数分で接続可能なサードパーティデータソース","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/features/marketplace/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"マーケットプレイス"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590_718021728":{"id":"nav-item-996557a32d","linkDescription":"データチームやAIチームのためのインタラクティブな開発環境","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/features/notebooks/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Notebook"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590_622392430":{"id":"nav-item-bf805fef15","linkDescription":"Pythonやその他の言語を実行するためのライブラリとコード実行環境","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/features/snowpark/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowpark"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565":{"id":"nav-item-010d7f2f63","linkDescription":"プライバシーを保護したデータコラボレーション","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/features/data-clean-rooms/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"データクリーンルーム"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590_983061516":{"id":"nav-item-4db39689e0","linkDescription":"Pythonスクリプトをウェブアプリに変換するためのフレームワーク","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/streamlit-in-snowflake/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Streamlit（英語）"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_258535199_c":{"id":"nav-item-d44bb184d9","propertiesId":"workload-nav-1","linkDescription":"Snowflakeネイティブなアプリのエンドツーエンドでの作成と配布","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/features/native-apps/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"ネイティブアプリ"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_212715_1193254885","nav_item_898460603","nav_item_copy_716480505","nav_item_copy_212715","nav_item_copy_655386423","nav_item_copy_660590_718021728","nav_item_copy_660590_622392430","nav_item_copy_185565","nav_item_copy_660590_983061516","nav_item_258535199_c"]},"nav_column_676020780":{"numberOfSubColumns":"one-column","maxWidth":"300","id":"container-72f4040cde","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_copy":{"id":"nav-item-dac90e605b","additionalClasses":"is-light-gray-icon","linkDescription":"ユニバーサルAIカタログ","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/product/features/horizon/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Horizonカタログ"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_660590":{"id":"nav-item-bd95090e4a","linkDescription":"一元化されたUIによる合理化されたモデル開発とMLOps","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/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_41538387_co":{"id":"nav-item-be03263009","linkDescription":"Snowflakeでトランザクションワークロードと分析ワークロードを統合し、さらなる簡素化を実現","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/product/features/unistore/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"ユニストア（英語）"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_copy","nav_item_copy_660590","nav_item_41538387_co"]}},":itemsOrder":["nav_column","nav_column_copy_copy","nav_column_676020780"]},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"プロダクト"},"nav_dropdown_menu_2":{"id":"nav-dropdown-menu-09d3a87783","enableDropdown":true,"nav_column_container":{"id":"container-d8a19faace","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column":{"navColumnTitle":"業界","numberOfSubColumns":"one-column","minWidth":"280","id":"container-684f584106","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column","appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small",":items":{"nav_item_copy_1533429516":{"id":"nav-item-35ba21c28b","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/manufacturing/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"製造"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-440648d906","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/financial-services/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"金融サービス"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1149488919":{"id":"nav-item-1300ab2ab4","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/retail-consumer-goods/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"小売・消費財"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_361384674":{"id":"nav-item-80b6ab66c9","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/telecom/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"通信"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_57417040":{"id":"nav-item-cc38406914","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/technology/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"テクノロジー"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-824b1ac643","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/advertising-media-entertainment/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"広告・メディア・エンターテイメント"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-4bfe59fa94","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/healthcare-and-life-sciences/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"ヘルスケア・ライフサイエンス"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_361384":{"id":"nav-item-0d3c62816a","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/travel-hospitality/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"旅行・ホスピタリティ"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144445":{"id":"nav-item-2ea417ee55","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/public-sector/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"官公庁・公的機関"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1444458226":{"id":"nav-item-3107a12034","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/industries/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"すべての業種"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_1533429516","nav_item_copy","nav_item_copy_1149488919","nav_item_copy_361384674","nav_item_copy_57417040","nav_item","nav_item_copy_1970515619","nav_item_copy_361384","nav_item_copy_144445","nav_item_copy_1444458226"]},"nav_column_copy":{"navColumnTitle":"部門","numberOfSubColumns":"one-column","minWidth":"160","id":"container-430d111b57","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-e10d9a2170","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/departments/finance/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"財務"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-464c0ae2c4","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/departments/information-technology/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"IT"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-d9dd536284","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/departments/marketing/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"マーケティング"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1533429516":{"id":"nav-item-d90cf1ff99","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/solutions/departments/cybersecurity/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"サイバーセキュリティ"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_1970515619","nav_item_copy_1533429516"]},"nav_column_833417450":{"navColumnTitle":"イネーブルメントソリューション","numberOfSubColumns":"one-column","id":"container-46685851dc","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_107772":{"id":"nav-item-da0aeaa5fb","linkDescription":"統合プラットフォームへの移行の不安を解消","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/migrate-to-the-cloud/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"AIデータクラウドへの移行"},"icon":{"id":"icon","alt":"Cloud icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1779170239130/nav-icon-cloud.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy":{"id":"nav-item-8e115d2845","linkDescription":"Snowflakeのエキスパートがビジネスの加速と目標達成を支援","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/solutions/services-delivery/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"サービス提供（英語）"},"icon":{"id":"icon","alt":"Migrate icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1779170420240/nav-icon--migrate.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_107772","nav_item_copy_copy"]},"nav_column_copy_copy":{"navColumnTitle":"パートナーソリューション","numberOfSubColumns":"one-column","id":"container-4804f05d27","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-204d22aaf2","linkDescription":"製品、ソリューション、クラウドのパートナープログラム","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/why-snowflake/partners/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflakeパートナーネットワーク"},"icon":{"id":"icon","alt":"Partner Network icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1779170253125/nav-icon--partner-network.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-b9cab957b9","linkDescription":"展開強化のためのパートナー、アプリ、ソリューション","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":"パートナーを見つける（英語）"},"icon":{"id":"icon","alt":"Partner Finder icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1764979537932/nav-icon--partner-finder.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1970515619":{"id":"nav-item-40551ac5d6","linkDescription":"ライブイベントやバーチャルイベントの開催","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":"パートナーのためのイベント（英語）"},"icon":{"id":"icon","alt":"Calendar icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740635895261/nav-icon--events.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_1970515619"]}},":itemsOrder":["nav_column","nav_column_copy","nav_column_833417450","nav_column_copy_copy"]},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"ソリューション"},"item_1719963657751_c":{"id":"nav-dropdown-menu-3787525461","enableDropdown":true,"nav_column_container":{"id":"container-8ad6139590","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column":{"numberOfSubColumns":"one-column","minWidth":"230","maxWidth":"350","id":"container-8b30b63f22","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy_copy_2_793631646":{"id":"nav-item-4154fef608","additionalClasses":"nav-item__platform-parent-why-sf","linkDescription":"ローカルまたはグローバルなコラボレーションにより、新たなインサイトの発見やこれまで認識できなかったビジネス機会の創出が可能になり、シームレスな体験の実現を通じて顧客理解が深まります。","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/why-snowflake/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"Snowflakeを選ぶ理由"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item_copy_copy_2_793631646"]},"nav_column_copy_copy":{"additionalClasses":"meganav-platform-features","numberOfSubColumns":"two-columns","id":"container-8ef55b398b","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-95e16a58de","propertiesId":"testID","linkDescription":"グローバルな組織によるSnowflakeの活用事例をケーススタディと動画で紹介","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/customers/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"カスタマーストーリー"},"icon":{"id":"icon","alt":"Customer icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740635941203/nav-icon--partner-network.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_258535199":{"id":"nav-item-5c9c2bc2ca","propertiesId":"workload-nav-1","linkDescription":"データやアプリの接続、共有、統合を可能にするAIデータクラウドの概要紹介","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/why-snowflake/what-is-data-cloud/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"AIデータクラウドとは"},"icon":{"id":"icon","alt":"Cloud icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740635973565/nav-icon-cloud.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_185565":{"id":"nav-item-77de9410fe","linkDescription":"組み込みの機能やクラウドインフラストラクチャの堅牢な保護などによる包括的なセキュリティ","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/why-snowflake/snowflake-security-hub/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"セキュリティハブ"},"icon":{"id":"icon","alt":"User with security lock icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1779169641095/user-security-admins-ciso-icon.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-d454e5c3b9","additionalClasses":"is-light-gray-icon","linkDescription":"TCOの最小化と継続的な価格性能比の最適化を通じて、経済的価値の最大化を実現","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/pricing-options/cost-and-performance-optimization/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"コストとパフォーマンスの最適化"},"icon":{"id":"icon","alt":"Cost Optimization icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1764979571095/nav-icon-cost-optimization-performance.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_1860117577":{"id":"nav-item-7087eb4afa","linkDescription":"AIデータクラウドでアプリケーションを構築するスタートアップ企業","button":{"id":"button","showOutboundIcon":false,"accessibilityLabel":"Snowflake for Startups","buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/why-snowflake/startup-program/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"スタートアップ企業のためのSnowflake（英語）"},"icon":{"id":"icon","alt":"Launch icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719963657751_c/nav_column_container/nav_column_copy_copy/nav_item_1860117577/icon.coreimg.svg/1779172755133/launch.svg","lazyEnabled":true,"width":"65","height":"64",":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_1860117577"]}},":itemsOrder":["nav_column","nav_column_copy_copy"]},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"Snowflakeを選ぶ理由"},"item_1719961362824":{"id":"nav-dropdown-menu-bac290858c","enableDropdown":true,"nav_column_container":{"id":"container-7a184a064c","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column_copy":{"navColumnTitle":"つながる","numberOfSubColumns":"one-column","minWidth":"200","id":"container-eb39f65e05","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-4074ab525c","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/blog/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"ブログ"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_180298689":{"id":"nav-item-4c5dccb604","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/events/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"イベント"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_1639361946":{"id":"nav-item-aff4974e73","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/support/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"サポート（英語）"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_680912746":{"id":"nav-item-f9233ee292","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/contact/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"お問い合わせ"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_180298689","nav_item_1639361946","nav_item_680912746"]},"nav_column_44600420__826130542":{"navColumnTitle":"学ぶ","numberOfSubColumns":"two-columns","id":"container-5341604f4a","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item_copy":{"id":"nav-item-df15d3391f","linkDescription":"eBook、ポッドキャスト、動画、ホワイトペーパー、その他","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/resources/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"リソースライブラリ"},"icon":{"id":"icon","alt":"Notebooks icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1779171979417/nav-icon--notebooks.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item":{"id":"nav-item-a86aa5d61a","linkDescription":"Snowflakeの教育オファリングの概要","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/resources/learn/training/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"トレーニング（英語）"},"icon":{"id":"icon","alt":"Training icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636044421/nav-icon--training.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_144634_1984107859":{"id":"nav-item-b10e07a125","linkDescription":"エキスパートによる、さまざまな業界やユースケースについてのディスカッションとデモ","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/webinars/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"ウェビナー"},"icon":{"id":"icon","alt":"Webinars icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1773154143134/nav-icon--webinars.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1438098918":{"id":"nav-item-263994cf29","linkDescription":"Snowflakeの技術業界プロフェッショナル認定資格","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/resources/learn/certifications/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"認定資格"},"icon":{"id":"icon","alt":"Certification icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636064365/nav-icon--cert.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_143809":{"id":"nav-item-7f4a134f15","linkDescription":"主要な機能を紹介する、毎週開催の製品デモとライブQ&A","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/live-demo/?lang=ja"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"ライブデモ"},"icon":{"id":"icon","alt":"Live Demo icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636024013/nav-icon--live-demo.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_333890638":{"id":"nav-item-0d21bd2189","linkDescription":"習熟度に応じた、オンデマンドまたはインストラクターによるトレーニングコース","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://learn.snowflake.com/en/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Snowflake University（英語）"},"icon":{"id":"icon","alt":"Education icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636071015/nav-icon--education.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_189945_905223977":{"id":"nav-item-156fe57f75","linkDescription":"Snowflakeの主要な機能を体験できる、インストラクターによるバーチャルワークショップ","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/virtual-hands-on-lab/?lang=ja"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"ハンズオンラボ"},"icon":{"id":"icon","alt":"Hands-on Labs icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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_905223977/icon.coreimg.svg/1740636037740/nav-icon--labs.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_189945":{"id":"nav-item-0d90e318ed","linkDescription":"Snowflakeの研究者が執筆した学術論文","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/resources/publications/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Snowflake研究開発資料（英語）"},"icon":{"id":"icon","alt":"Data Sheet","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1779173639149/data-sheet.svg","lazyEnabled":true,"width":"65","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_35712637":{"id":"nav-item-c28243a328","linkDescription":"AIとデータに関する情報記事","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/fundamentals/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"AIデータクラウドの基礎"},"icon":{"id":"icon","alt":"Fundamentals","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/site/mega-nav-header/master/_jcr_content/root/mega_header/nav_mega/item_1719961362824/nav_column_container/nav_column_44600420__826130542/nav_item_35712637/icon.coreimg.svg/1779172273319/nav-icon--notebooks.svg","lazyEnabled":true,"width":"64","height":"64",":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_905223977","nav_item_copy_189945","nav_item_35712637"]}},":itemsOrder":["nav_column_copy","nav_column_44600420__826130542"]},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"リソースのご紹介"},"item_1719963657751":{"id":"nav-dropdown-menu-a08986df08","enableDropdown":true,"nav_column_container":{"id":"container-3a0cb8eb93","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column/nav-column-container",":items":{"nav_column_copy_copy":{"navColumnTitle":"構築する","numberOfSubColumns":"one-column","id":"container-651a1e88e4","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-c22d876b76","propertiesId":"testID","linkDescription":"構築とスケーリングに必要な開発リソースの概要","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"開発者のためのSnowflake（英語）"},"icon":{"id":"icon","alt":"Developers icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1779172469867/nav-icon--devs.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1855651246":{"id":"nav-item-00280a646e","linkDescription":"リファレンスアーキテクチャ、ユースケース、ベストプラクティス","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/ja/developers/guides/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"開発者ガイド"},"icon":{"id":"icon","alt":"Solution Center icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1761757650759/nav-icon--solution-center.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-68f757d72b","additionalClasses":"is-light-gray-icon","linkDescription":"最新のソフトウェアバージョン、ドライバー、ライブラリ、関連ドキュメント","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/downloads/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"ダウンロード（英語）"},"icon":{"id":"icon","alt":"Download icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636104927/nav-icon-download.svg","lazyEnabled":true,"width":"28","height":"28",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy_1855651246","nav_item_copy"]},"nav_column_copy_copy_1367930678":{"navColumnTitle":"学ぶ","numberOfSubColumns":"one-column","id":"container-fd52fa4208","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-6739b366cf","propertiesId":"testID","linkDescription":"リファレンス、ガイド、チュートリアル、発表資料","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://docs.snowflake.com/ja"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"ドキュメント"},"icon":{"id":"icon","alt":"Docs icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636111253/nav-icon--docs.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy":{"id":"nav-item-6aa81619d6","additionalClasses":"is-light-gray-icon","linkDescription":"Snowflakeエンジニアが保守およびサポートしている重要プロジェクト","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/open-source/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"オープンソース（英語）"},"icon":{"id":"icon","alt":"Open Source icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636127119/nav-icon-open-source.svg","lazyEnabled":true,"width":"32","height":"32",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_copy":{"id":"nav-item-dabdae3a51","additionalClasses":"is-light-gray-icon","linkDescription":"Snowflakeスキル向上のためのオンラインと対面のクラスやワークショップ","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/developers/northstar/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","text":"ビルダー教育（英語）"},"icon":{"id":"icon","alt":"Northstar logo","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636131947/nav-icon--northstar.svg","lazyEnabled":true,"width":"32","height":"32",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy","nav_item_copy_copy"]},"nav_column_copy_copy_1101894776":{"navColumnTitle":"Connect","numberOfSubColumns":"one-column","id":"container-644bea9986","layout":"SIMPLE",":type":"snowflake-site/components/nav/nav-column",":items":{"nav_item":{"id":"nav-item-d813efc10d","propertiesId":"testID","linkDescription":"Snowflakeの技術リーダーによる機能のビルドについての情報","button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://www.snowflake.com/engineering-blog/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"エンジニアリングブログ（英語）"},"icon":{"id":"icon","alt":"Developers icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636137545/nav-icon--developer-center.svg","lazyEnabled":true,"width":"32","height":"32",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"},"nav_item_copy_1855651246":{"id":"nav-item-9a11d5c7f4","linkDescription":"Snowflake開発者とのヒント、コツ、ディスカッションの共有","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":"コミュニティ（英語）"},"icon":{"id":"icon","alt":"Partner Network icon","src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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/1740636144841/nav-icon--partner-network.svg","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"},":type":"snowflake-site/components/nav/nav-item"}},":itemsOrder":["nav_item","nav_item_copy_1855651246"]}},":itemsOrder":["nav_column_copy_copy","nav_column_copy_copy_1367930678","nav_column_copy_copy_1101894776"]},":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"開発者向け"},"item_1718247180324":{"id":"nav-dropdown-menu-5017917b0e","enableDropdown":false,"link_url":"/ja/pricing-options/",":type":"snowflake-site/components/nav/nav-dropdown-menu","cq:panelTitle":"料金"}},":itemsOrder":["item_1719963657751_c_663444255","nav_dropdown_menu_2","item_1719963657751_c","item_1719961362824","item_1719963657751","item_1718247180324"]},"languagenavigation":{"id":"language-navigation-7cef92d872","languageNavItems":[{"title":"English","path":"/en/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/","locale":"en","active":false},{"title":"日本語","path":"/ja/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/","locale":"ja","active":true},{"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":{"id":"button-27eb8263d5","heapButtonClasses":["contact_nav","heap-nav-contact"],"showOutboundIcon":true,"buttonLink":{"valid":true,"url":"/ja/contact-sales/"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_INTERNAL",":type":"snowflake-site/components/button","appliedCssClassNames":"snowflake-button-secondary snowflake-button-blue snowflake-button-compact","text":"営業部門に問い合わせる"},"button_288358396":{"id":"button-6f371e50b3","heapButtonClasses":["start_for_free_nav","heap-nav-start-for-free"],"showOutboundIcon":true,"buttonLink":{"valid":true,"url":"https://signup.snowflake.com/?_l=ja"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","appliedCssClassNames":"snowflake-button-primary snowflake-button-blue snowflake-button-compact","text":"無料で開始"}},":itemsOrder":["nav_mega","languagenavigation","button","button_288358396"]}},":itemsOrder":["markup_editor","mega_header"]}},":itemsOrder":["root"]},"markup_editor_1950346551":{"id":"markup-editor-887aac2618","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-acc97f8639","quickstartHeroForkRepoLink":{"id":"button-388fdb2dda","showOutboundIcon":false,"buttonLink":{"valid":true,"attributes":{"target":"_blank"},"url":"https://github.com/Snowflake-Labs/sfquickstarts/tree/master/site/sfguides/src/data-engineering-pipelines-with-snowpark-python-ja"},"linkTargetContentType":"GENERIC","linkType":"SNOWFLAKE_EXTERNAL",":type":"snowflake-site/components/button","text":"Fork Repo"},"quickstartHeroFirstCertifiedTag":{"tagText":"Quickstart","tagColor":"#29B5E8","tagPath":"/content/cq:tags/snowflake-site/taxonomy/solution-center/certification/quickstart","tagIcon":""},"isDeveloperGuidesPage":false,":type":"snowflake-site/components/quickstart/quickstart-hero","quickstartHeroTitle":{"lines":["Snowpark Pythonによるデータエンジニアリングパイプライン"],"type":"heading2",":type":"snowflake-site/components/title-v2"},"quickstartHeroAuthor":"Jeremiah Hansen","quickstartHeroBreadcrumbs":[{"title":"Snowpark Pythonによるデータエンジニアリングパイプライン","url":"https://www.snowflake.com/content/snowflake-site/global/ja/developers/guides/data-engineering-pipelines-with-snowpark-python-ja","currentPage":true},{"title":"開発者ガイド","url":"https://www.snowflake.com/content/snowflake-site/global/ja/developers/guides","currentPage":false},{"title":"Snowflake for Developers","url":"https://www.snowflake.com/content/snowflake-site/global/ja/developers","currentPage":false}],"fragmentPath":"/content/dam/snowflake-site/ja/content-fragments/quickstarts/data-engineering-pipelines-with-snowpark-python-ja"},"flexible_column_cont":{"id":"flexible-column-container-268ca2401e","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":{"id":"container-2beb5e968c","layout":"SIMPLE",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"contentfragment":{"id":"contentfragment-4d7ad117fd","description":"このガイドでは、Snowpark Pythonカテゴリーを使用してデータエンジニアリングパイプラインを構築する方法について詳細に説明します。","paragraphs":["&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003E概要\u003C/h2\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E「データエンジニアは、さまざまな手順でデータを転送し、データを使用可能な状態にするデータパイプラインの構築と保守に重点を置いています。データエンジニアリングプロセスには、場所から場所へのデータ転送を自動化し、そのデータを特定の種類の分析に使用できるように特定の形式に変換する\u003Cstrong\u003Eデータパイプライン\u003C/strong\u003Eの作成に必要な作業全体が含まれます。その意味で、データエンジニアリングは一度だけ行うものではありません。データの収集、準備、変換、提供に関連する継続的な作業です。データパイプラインは、これらのタスクを自動化して確実に反復するのに役立ちます。これは、特定のテクノロジーというよりもプラクティスです」（「初心者向けクラウドデータエンジニアリング」、Snowflake特別版）\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003ESnowpark Pythonの機能を活用してデータエンジニアリングパイプラインを構築したい場合は、このクイックスタートが最適です。ここでは、データサイエンスではなく、Pythonによるデータエンジニアリングパイプラインの構築に焦点を当てます。Snowpark Pythonによるデータサイエンスの例については、「\u003Ca href=\"/en/developers/guides/getting-started-snowpark-machine-learning/\"\u003ESnowpark Pythonによる機械学習：\u003C/a\u003E\u003Ca href=\"/en/developers/guides/getting-started-snowpark-machine-learning/\"\u003E\u003C/a\u003E\u003Ca href=\"/en/developers/guides/getting-started-snowpark-machine-learning/\"\u003E- クレジットカード承認予測\u003C/a\u003E」クイックスタートを参照してください。\u003C/p\u003E\n","\u003Cp\u003Eこのクイックスタートは広範囲をカバーしており、最終的にはSnowpark Pythonストアドプロシージャを使用して堅牢なデータエンジニアリングパイプラインを構築できるようになります。このパイプラインはデータを段階的に処理し、Snowflakeタスクとオーケストレーションされ、CI/CDパイプラインで展開されます。また、Snowflakeの新しい開発者向けCLIツールとVisual Studio Code拡張機能の使用方法も学習します。以下に簡単な概要を図で示します。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\nでは、準備をはじめましょう。\u003C/p\u003E\n","\u003Ch3\u003E前提条件\u003C/h3\u003E\n\u003Cul\u003E\u003Cli\u003EPythonに精通していること\u003C/li\u003E\u003Cli\u003EDataFrame APIに精通していること\u003C/li\u003E\u003Cli\u003ESnowflakeに精通していること\u003C/li\u003E\u003Cli\u003EGitレポジトリとGitHubに精通していること\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003E学習する内容\u003C/h3\u003E\n","\u003Cp\u003Eこのクイックスタートでは、次のSnowflake機能について学習します。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003ESnowflakeのテーブルフォーマット\u003C/li\u003E\u003Cli\u003ECOPYによるデータの取り込み\u003C/li\u003E\u003Cli\u003Eスキーマ推論\u003C/li\u003E\u003Cli\u003Eデータシェアリング/マーケットプレイス（ETLの代わり）\u003C/li\u003E\u003Cli\u003E段階的な処理のためのストリーム（CDC）\u003C/li\u003E\u003Cli\u003Eビューに対するストリーム\u003C/li\u003E\u003Cli\u003EPython UDF（サードパーティパッケージを使用）\u003C/li\u003E\u003Cli\u003EPythonストアドプロシージャ\u003C/li\u003E\u003Cli\u003ESnowpark DataFrame API\u003C/li\u003E\u003Cli\u003ESnowpark Pythonプログラマビリティ\u003C/li\u003E\u003Cli\u003Eウェアハウスの伸縮性（動的スケーリング）\u003C/li\u003E\u003Cli\u003EVisual Studio Code Snowflakeネイティブ拡張\u003C/li\u003E\u003Cli\u003ESnowCLI\u003C/li\u003E\u003Cli\u003Eタスク（ストリームトリガーを使用）\u003C/li\u003E\u003Cli\u003Eタスクの監視\u003C/li\u003E\u003Cli\u003EGitHubアクション（CI/CD）の統合\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003E必要なもの\u003C/h3\u003E\n","\u003Cp\u003E始める前に以下のものが必要です。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003ESnowflake\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003ESnowflakeアカウント\u003C/strong\u003E\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003Eアカウント管理者権限で作成されたSnowflakeユーザー\u003C/strong\u003E。このユーザーは、Snowflakeでの設定に使用されます。\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003E同意された****Anaconda利用規約。\u003C/strong\u003E\u003Ca href=\"https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python-packages.html#getting-started\"\u003Eサードパーティパッケージ\u003C/a\u003Eの「はじめに」セクションを参照してください。\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EMiniconda\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EコンピュータにインストールされたMiniconda。\u003C/strong\u003E\u003Ca href=\"https://conda.io/miniconda.html\"\u003EMiniconda\u003C/a\u003Eをダウンロードしてインストールします。または、Python 3.8で他のPython環境を使用することもできます。\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003ESnowSQL\n\u003Cul\u003E\u003Cli\u003E**コンピュータにインストールされたSnowSQL。**詳細については、\u003Ca href=\"https://developers.snowflake.com/snowsql/\"\u003ESnowSQLのダウンロードページ\u003C/a\u003Eにアクセスし、「\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/snowsql-install-config.html\"\u003ESnowSQLのインストール\u003C/a\u003E」ページを参照してください。\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EGit\n\u003Cul\u003E\u003Cli\u003E**コンピュータにインストールされたGit。**詳細については、「\u003Ca href=\"https://git-scm.com/book/en/v2/Getting-Started-Installing-Git\"\u003Eはじめに - Gitのインストール\u003C/a\u003E」ページを参照してください。\u003C/li\u003E\u003Cli\u003E\u003Cstrong\u003Eユーザー名とメールアドレスが設定されたGit\u003C/strong\u003E。まだ設定していない場合は、ローカルコンピュータで\u003Ca href=\"https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git#setting-your-git-username-for-every-repository-on-your-computer\"\u003EGitのユーザー名\u003C/a\u003Eと\u003Ca href=\"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address#setting-your-email-address-for-every-repository-on-your-computer\"\u003Eメールアドレスを設定\u003C/a\u003Eしてください。\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003EVisual Studio Codeと必要な拡張機能\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EコンピュータにインストールされたVisual Studio Code\u003C/strong\u003E。ダウンロードページへのリンクについては、\u003Ca href=\"https://code.visualstudio.com/\"\u003EVisual Studio Code\u003C/a\u003Eのホームページを確認してください。\u003C/li\u003E\u003Cli\u003E**インストールされたPython拡張機能。**VS Codeの「拡張機能」ペインで「Python」拡張機能を検索し、（Microsoftから）インストールします。\u003C/li\u003E\u003Cli\u003E**インストールされたSnowflake拡張機能。**VS Codeの「拡張機能」ペインで「Snowflake」拡張機能を検索し、（Snowflakeから）インストールします。\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003Eラボのレポジトリがフォークされ、ローカルにクローンされているGitHubアカウント\n\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003EGitHubアカウント\u003C/strong\u003E。まだGitHubアカウントを持っていない場合は、無料で作成できます。はじめに、\u003Ca href=\"https://github.com/signup\"\u003EJoin GitHub\u003C/a\u003Eページをご覧ください。\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003E構築するもの\u003C/h3\u003E\n","\u003Cp\u003Eこのクイックスタートでは、次のことを実行します。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003Eスキーマ推論を使用してParquetデータをSnowflakeにロードする\u003C/li\u003E\u003Cli\u003ESnowflakeマーケットプレイスデータへのアクセスを設定する\u003C/li\u003E\u003Cli\u003E温度を変換するPython UDFを作成する\u003C/li\u003E\u003Cli\u003EPythonストアドプロシージャを使用してデータエンジニアリングパイプラインを作成し、データを段階的に処理する\u003C/li\u003E\u003Cli\u003Eパイプラインをタスクとオーケストレーションする\u003C/li\u003E\u003Cli\u003ESnowsightでパイプラインをモニタリングする\u003C/li\u003E\u003Cli\u003ESnowpark PythonストアドプロシージャをCI/CDパイプラインで展開する\u003C/li\u003E\u003C/ul\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003Eクイックスタート設定\u003C/h2\u003E\n","\u003Ch3\u003Eクイックスタート用レポジトリのフォークとクローン\u003C/h3\u003E\n","\u003Cp\u003EGitHubアカウントでこのクイックスタート用レポジトリのフォークを作成する必要があります。\u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-data-engineering-with-snowpark-python\"\u003ESnowpark Python関連のGitHubレポジトリを含むデータエンジニアリングパイプライン\u003C/a\u003Eにアクセスし、右上の「フォーク」ボタンをクリックします。必須フィールドに入力し、「フォークを作成」をクリックします。\u003C/p\u003E\n","\u003Cp\u003Eデフォルトでは、GitHubアクションはフォークしたレポジトリで定義されているワークフロー（またはCI/CDパイプライン）を無効にします。このレポジトリには、Snowpark Python UDFとストアドプロシージャを展開するワークフローが含まれています。このワークフローは後で使用します。そのため、現時点では、GitHubでフォークしたレポジトリを開き、ページ中央上部の「\u003Ccode\u003EActions\u003C/code\u003E」タブをクリックして、緑の「\u003Ccode\u003EI understand my workflows, go ahead and enable them\u003C/code\u003E」ボタンをクリックすることで、このワークフローを有効にします。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/github-actions-activate.png\" alt=\"assets/github-actions-activate.png\"\u003E\n次に、新しくフォークしたレポジトリをローカルコンピュータにクローンする必要があります。新しいGitレポジトリの接続の詳細については、レポジトリを開き、ページ上部付近にある緑色の「コード」アイコンをクリックして「HTTPS」リンクをコピーします。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/git_repo_url.png\" alt=\"assets/git_repo_url.png\"\u003E\nそのリンクをVS Codeで使用して、コンピュータにレポジトリをクローンします。詳細については、「\u003Ca href=\"https://learn.microsoft.com/en-us/azure/developer/javascript/how-to/with-visual-studio-code/clone-github-repository\"\u003EVisual Studio CodeでGitHubレポジトリをクローンして使用する\u003C/a\u003E」の手順に従ってください。必要に応じて、次のコマンドを実行して、コマンドラインからレポジトリをクローンすることもできます。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Egit clone &lt;your-forked-repo-url&gt;\ncd sfguide-data-engineering-with-snowpark-python/\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eフォークしたレポジトリがローカルコンピュータにクローンされたら、そのフォルダをVS Codeで開きます。\u003C/p\u003E\n","\u003Ch3\u003E認証情報の設定\u003C/h3\u003E\n","\u003Cp\u003Eこのクイックスタートでは、\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/snowsql.html\"\u003ESnowSQLコマンドラインクライアント\u003C/a\u003Eを直接使用しませんが、\u003Ccode\u003E~/.snowsql/config\u003C/code\u003EにあるSnowSQL構成ファイルにSnowflake接続の詳細を保存します。SnowSQL構成ファイルが存在しない場合は、空のファイルを作成してください。\u003C/p\u003E\n","\u003Cp\u003E次のセクションを\u003Ccode\u003E~/.snowsql/config\u003C/code\u003Eファイルに追加して、このラボ用のSnowSQL構成を作成します（accountname、username、passwordを実際の値に置き換えます）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode\u003E[connections.dev]\naccountname = myaccount\nusername = myusername\npassword = mypassword\nrolename = HOL_ROLE\nwarehousename = HOL_WH\ndbname = HOL_DB\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E**注意：**SnowCLIツール（ひいてはこのクイックスタート）は、現在のところキーペア認証では機能しません。共有SnowSQL構成ファイルからユーザー名とパスワードの詳細を取得するだけです。\u003C/p\u003E\n","\u003Ch3\u003EAnaconda環境の作成\u003C/h3\u003E\n","\u003Cp\u003E提供された\u003Ccode\u003Econda_env.yml\u003C/code\u003Eファイルを使用して、このラボ用のconda環境を作成してアクティブにします。ローカルのフォークしたレポジトリのルートにあるターミナルから次のコマンドを実行します。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Econda env create -f conda_env.yml\nconda activate pysnowpark\n\u003C/code\u003E\u003C/pre\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ESnowflakeの設定\u003C/h2\u003E\n","\u003Ch3\u003EVS Code用のSnowflake拡張機能\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeに対してさまざまな方法（Snowsight UI、SnowSQLなど）でSQLクエリを実行できますが、このクイックスタートではVS Code用のSnowflake拡張機能を使用します。SnowflakeのVS Code用ネイティブ拡張機能の概要については、\u003Ca href=\"https://marketplace.visualstudio.com/items?itemName=snowflake.snowflake-vsc\"\u003EVS CodeマーケットプレイスのSnowflake拡張機能ページ\u003C/a\u003Eを参照してください。\u003C/p\u003E\n","\u003Ch3\u003Eスクリプトの実行\u003C/h3\u003E\n","\u003Cp\u003EこのクイックスタートでSnowflakeに必要なすべてのオブジェクトを設定するには、\u003Ccode\u003Esteps/01_setup_snowflake.sql\u003C/code\u003Eスクリプトを実行する必要があります。\u003C/p\u003E\n","\u003Cp\u003Eまず、VS Codeの左側のナビゲーションバーにあるSnowflake拡張機能をクリックします。次に、アカウント管理者権限を持つユーザーでSnowflakeアカウントにログインします。Snowflakeにログインしたら、左側のナビゲーションバーにあるファイルエクスプローラーに戻って、VS Codeで\u003Ccode\u003Esteps/01_setup_snowflake.sql\u003C/code\u003Eスクリプトを開きます。\u003C/p\u003E\n","\u003Cp\u003Eこのスクリプト内のすべてのクエリを実行するには、エディタウィンドウの右上にある「すべてのステートメントを実行」ボタンを使用します。または、複数のチャンクに分けて実行したい場合は、実行するクエリをハイライトしてCMD/CTRL+Enterキーを押します。\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003E未加工ファイルのロード\u003C/h2\u003E\n","\u003Cp\u003Eこのステップでは、未加工のTasty Bytes POSデータとカスタマーロイヤルティデータを、\u003Ccode\u003Es3://sfquickstarts/data-engineering-with-snowpark-python/\u003C/code\u003Eにある未加工のParquetファイルから、Snowflakeの\u003Ccode\u003ERAW_POS\u003C/code\u003Eスキーマと\u003Ccode\u003ERAW_CUSTOMER\u003C/code\u003Eスキーマにロードします。さらに、Snowpark Python APIを使用して、ノートパソコンからPythonでこのプロセスをオーケストレーションします。これは、コンテキストの中では、データフローの概要のステップ**#2**に当たります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003Eスクリプトの実行\u003C/h3\u003E\n","\u003Cp\u003E未加工データをロードするには、\u003Ccode\u003Esteps/02_load_raw.py\u003C/code\u003Eスクリプトを実行します。これはVS Codeでいくつかの方法で実行できます。ターミナルから実行することも、VS Codeで直接実行することもできます。このデモでは、ターミナルからPythonスクリプトを実行する必要があります。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -&gt; 「新しいターミナル」）、\u003Ccode\u003Epysnowpark\u003C/code\u003E conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecd steps\npython 02_load_raw.py\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\u003C/p\u003E\n","\u003Ch3\u003EローカルでのSnowpark Pythonの実行\u003C/h3\u003E\n","\u003Cp\u003Eこのステップでは、ノートパソコンからローカルでSnowpark Pythonコードを実行します。スクリプトの下部に、ローカルデバッグに使用するコードブロックがあります（\u003Ccode\u003Eif __name__ == &quot;__main__&quot;:\u003C/code\u003Eブロックの下）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003E# For local debugging\nif __name__ == &quot;__main__&quot;:\n    # Add the utils package to our path and import the snowpark_utils function\n    import os, sys\n    current_dir = os.getcwd()\n    parent_dir = os.path.dirname(current_dir)\n    sys.path.append(parent_dir)\n\n    from utils import snowpark_utils\n    session = snowpark_utils.get_snowpark_session()\n\n    load_all_raw_tables(session)\n#    validate_raw_tables(session)\n\n    session.close()\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eここでいくつか注意すべき点があります。まず、Snowparkセッションは\u003Ccode\u003Eutils/snowpark_utils.py\u003C/code\u003Eモジュールで作成されます。このモジュールには認証情報を取得するための複数のメソッドがあり、このクイックスタートでは、\u003Ccode\u003E~/.snowsql/config\u003C/code\u003EにあるSnowSQL構成ファイルから取得します。詳細については、\u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-data-engineering-with-snowpark-python/blob/main/utils/snowpark_utils.py\"\u003Eutils/snowpark_utils.pyモジュール\u003C/a\u003Eのコードを参照してください。\u003C/p\u003E\n","\u003Cp\u003E次に、Snowparkセッションを取得した後、手間のかかる作業を行う\u003Ccode\u003Eload_all_raw_tables(session)\u003C/code\u003Eメソッドを呼び出します。次のいくつかのセクションでは、主要な部分について説明します。\u003C/p\u003E\n","\u003Cp\u003E最後に、このクイックスタートのほぼすべてのPythonスクリプトには、ローカルデバッグブロックが含まれています。後でSnowpark PythonストアドプロシージャやUDFを作成しますが、それらのPythonスクリプトにも同様のブロックがあります。そのため、このパターンを理解することが重要です。\u003C/p\u003E\n","\u003Ch3\u003ESnowflakeで起こったことの確認\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeの\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/ui-snowsight-activity.html#query-history\"\u003Eクエリ履歴\u003C/a\u003Eは非常に強力な機能で、Snowflakeアカウントに対して実行されたすべてのクエリを、どのツールやプロセスがそれを開始したかに関係なくログに記録します。これは、クライアントツールやAPIを使用する場合に特に役立ちます。\u003C/p\u003E\n","\u003Cp\u003E先ほど実行したPythonスクリプトは、ローカルで少量の作業を行いました。基本的には、各テーブルをループし、データをロードするためのコマンドをSnowflakeに発行することで、プロセスをオーケストレーションするだけです。一方、手間のかかる作業はすべてSnowflake内部で実行されました。このプッシュダウンはSnowpark APIの特徴であり、これによってSnowflakeのスケーラビリティとコンピューティングパワーを活用できるようになります。\u003C/p\u003E\n","\u003Cp\u003ESnowflakeアカウントにログインし、Snowpark APIによって生成されたSQLを簡単に見てみましょう。これにより、APIが行っていることに関する理解が深まり、問題が発生した場合のデバッグに役立ちます。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/query_history_sproc.png\" alt=\"assets/query_history_sproc.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003Eスキーマ推論\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeの非常に便利な機能の1つに、作業したいステージのファイルのスキーマを推論する機能があります。これは、SQLでは\u003Ca href=\"https://docs.snowflake.com/ja/sql-reference/functions/infer_schema.html\"\u003E\u003Ccode\u003EINFER_SCHEMA()\u003C/code\u003E\u003C/a\u003E関数で実行されます。Snowpark Python APIでは、\u003Ccode\u003Esession.read()\u003C/code\u003Eメソッドを呼び出すと自動的に実行されます。コードスニペットは次のとおりです。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003E    # we can infer schema using the parquet read option\n    df = session.read.option(&quot;compression&quot;, &quot;snappy&quot;) \\\n                            .parquet(location)\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003ECOPYによるデータの取り込み\u003C/h3\u003E\n","\u003Cp\u003EデータをSnowflakeテーブルにロードするために、DataFrameに対して\u003Ccode\u003Ecopy_into_table()\u003C/code\u003Eメソッドを使用します。このメソッドは、推論されたスキーマ（存在しない場合）を使用してSnowflakeでターゲットテーブルを作成し、高度に最適化されたSnowflake \u003Ccode\u003ECOPY INTO &lt;table&gt;\u003C/code\u003E\u003Ca href=\"https://docs.snowflake.com/ja/sql-reference/sql/copy-into-table.html\"\u003Eコマンド\u003C/a\u003Eを呼び出します。コードスニペットは次のとおりです。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003E    df.copy_into_table(&quot;{}&quot;.format(tname))\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003ESnowflakeのテーブルフォーマット\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeの大きな利点の1つは、ファイルベースのデータレイクを管理する必要がなくなることです。Snowflakeは最初からこの目的のために設計されました。このステップでは、未加工データを構造化されたSnowflake管理テーブルにロードしています。しかし、Snowflakeテーブルは構造化データおよび半構造化データをネイティブにサポートでき、Snowflakeの成熟したクラウドテーブルフォーマット（Hudi、Delta、Icebergよりも前から存在しています）に保存されます。\u003C/p\u003E\n","\u003Cp\u003ESnowflakeにロードされたデータは安全に保存および管理されます。未加工ファイルの保護や管理について心配する必要はありません。さらに、データは、未加工データであろうと構造化データであろうと、SnowflakeでSQLまたは好みの言語を使用して変換およびクエリできます。Sparkなどのコンピュートサービスを別途管理する必要はありません。\u003C/p\u003E\n","\u003Cp\u003EこれはSnowflakeユーザーにとって大きなメリットです。\u003C/p\u003E\n","\u003Ch3\u003Eウェアハウスの伸縮性（動的スケーリング）\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeでは、データの処理に使用する言語（SQL、Python、Java、Scala、Javascriptなど）に関係なく、ユーザー定義のコンピュートクラスタは\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/warehouses.html\"\u003E仮想ウェアハウス\u003C/a\u003Eの1種類のみです。このため、Snowflakeでのデータ操作が非常にシンプルになります。また、データのガバナンスはコンピュートクラスタから完全に分離されています。つまり、ウェアハウスの設定や使用する言語に関係なく、Snowflakeのガバナンスをくぐり抜けることはできません。\u003C/p\u003E\n","\u003Cp\u003Eまた、これらの仮想ウェアハウスは、ほとんどの規模のウェアハウスで1秒以内に動的にスケーリングできます。つまり、コードのセクションを短時間で実行するために、コード内でコンピュート環境のサイズを動的に変更して容量を増やした後、再度動的にサイズを変更して容量を減らすことができます。また、秒単位で課金されるため（最低60秒）、コードのセクションを短時間で実行するために追加料金を支払う必要はありません。\u003C/p\u003E\n","\u003Cp\u003Eどれほど簡単か見てみましょう。コードスニペットは次のとおりです。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003E    _ = session.sql(&quot;ALTER WAREHOUSE HOL_WH SET WAREHOUSE_SIZE = XLARGE WAIT_FOR_COMPLETION = TRUE&quot;).collect()\n\n    # Some data processing code\n\n    _ = session.sql(&quot;ALTER WAREHOUSE HOL_WH SET WAREHOUSE_SIZE = XSMALL&quot;).collect()\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E最初の\u003Ccode\u003EALTER WAREHOUSE\u003C/code\u003Eステートメントに\u003Ccode\u003EWAIT_FOR_COMPLETION\u003C/code\u003Eパラメータが含まれていることに注意してください。このパラメータを\u003Ccode\u003ETRUE\u003C/code\u003Eに設定すると、すべてのコンピューティングリソースがサイズ変更されて準備が整うまで、\u003Ccode\u003EALTER WAREHOUSE\u003C/code\u003Eコマンドの戻りがブロックされます。このようにして、クラスターでデータを処理する前にクラスター全体が利用可能であることを確認します。\u003C/p\u003E\n","\u003Cp\u003Eこのクイックスタートではこのパターンをあと数回使用するため、十分に理解しておくことが重要です。\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003E気候データのロード\u003C/h2\u003E\n","\u003Cp\u003Eこのステップでは、未加工の気象データをSnowflakeに「ロード」します。しかし、ここでは「ロード」という言葉は実際には正しくありません。Snowflake独自のデータシェアリング機能を使用しているため、実際にはカスタムETLプロセスでデータをSnowflakeアカウントにコピーする必要はありません。代わりに、SnowflakeマーケットプレイスでWeather Sourceが共有する気象データに直接アクセスできます。これは、コンテキストの中では、データフローの概要のステップ**#3**に当たります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003ESnowflakeマーケットプレイス\u003C/h3\u003E\n","\u003Cp\u003EWeather Sourceは、世界の気象および気候データを提供するリーディングプロバイダーであり、同社のOnPoint Product Suiteは、企業がさまざまな業界の広範なユースケースに適用できる有意義で実用的なインサイトを迅速に生成するために必要な気象および気候データを提供しています。次の手順に従って、SnowflakeマーケットプレイスのWeather Sourceから\u003Ccode\u003EWeather Source LLC: frostbyte\u003C/code\u003Eフィードに接続しましょう。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003ESnowsightにログインする\u003C/li\u003E\u003Cli\u003E左側のナビゲーションバーにある\u003Ccode\u003EMarketplace\u003C/code\u003Eリンクをクリックする\u003C/li\u003E\u003Cli\u003E検索ボックスに「Weather Source LLC: frostbyte」と入力し、「返す」をクリックする\u003C/li\u003E\u003Cli\u003E「Weather Source LLC: frostbyte」のリストタイルをクリックする\u003C/li\u003E\u003Cli\u003E青の「取得」ボタンをクリックする\n\u003Cul\u003E\u003Cli\u003E「オプション」ダイアログを展開する\u003C/li\u003E\u003Cli\u003E「データベース名」を「FROSTBYTE_WEATHERSOURCE」（すべて大文字）に変更する\u003C/li\u003E\u003Cli\u003E「HOL_ROLE」ロールを選択して新しいデータベースにアクセスできるようにする\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E青の「取得」ボタンをクリックする\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003Eこれで完了です。今後は何もしなくてもこのデータが最新の状態に保たれます。プロバイダーが代わりにデータを更新します。つまり、データシェアリングでは、プロバイダーが公開したものが何であれ、それを常に見ることができます。素晴らしいと思いませんか。考えてみてください。これまでは、常に最新のサードパーティデータセットにアクセスするためにさまざまなことを行う必要がありましたが、それらがすべて不要になったのです。\u003C/p\u003E\n","\u003Ch3\u003Eスクリプトの実行\u003C/h3\u003E\n","\u003Cp\u003E左側のナビゲーションバーにあるファイルエクスプローラーから、VS Codeで\u003Ccode\u003Esteps/03_load_weather.sql\u003C/code\u003Eスクリプトを開き、スクリプトを実行します。Snowflakeマーケットプレイスで共有されたデータへのクエリがいかに簡単であるかに注意してください。Snowflakeの他のテーブルやビューと同じようにアクセスします。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT * FROM FROSTBYTE_WEATHERSOURCE.ONPOINT_ID.POSTAL_CODES LIMIT 100;\n\u003C/code\u003E\u003C/pre\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EPOSビューの作成\u003C/h2\u003E\n","\u003Cp\u003Eこのステップでは、6つの異なるテーブルを結合し、必要な列のみを選択することで、未加工のPOSスキーマを簡素化するビューを作成します。しかし、本当に素晴らしいのは、Snowpark DataFrame APIを使用してそのビューを定義することです。次に、そのビューに対するSnowflakeストリームを作成し、POSテーブルの変更を段階的に処理できるようにします。これは、コンテキストの中では、データフローの概要のステップ**#4**に当たります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003Eスクリプトの実行\u003C/h3\u003E\n","\u003Cp\u003Eビューとストリームを作成するには、\u003Ccode\u003Esteps/04_create_pos_view.py\u003C/code\u003Eスクリプトを実行します。ステップ2と同様に、ターミナルから実行しましょう。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -&gt; 「新しいターミナル」）、\u003Ccode\u003Epysnowpark\u003C/code\u003E conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecd steps\npython 04_create_pos_view.py\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\u003C/p\u003E\n","\u003Ch3\u003ESnowpark DataFrame API\u003C/h3\u003E\n","\u003Cp\u003E\u003Ccode\u003Ecreate_pos_view()\u003C/code\u003E関数で最初に目を引くのは、Snowpark DataFrame APIを使用してSnowflakeビューを定義していることです。ビューに必要なロジックをすべて取り込む最終的なDataFrameを定義したら、Snowparkの\u003Ccode\u003Ecreate_or_replace_view()\u003C/code\u003Eメソッドを呼び出すだけです。\u003Ccode\u003Ecreate_pos_view()\u003C/code\u003E関数の最後の行は次のとおりです。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003E    final_df.create_or_replace_view('POS_FLATTENED_V')\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003ESnowpark Python DataFrame APIの詳細については、「\u003Ca href=\"https://docs.snowflake.com/ja/developer-guide/snowpark/python/working-with-dataframes.html\"\u003ESnowpark PythonでのDataFramesの使用\u003C/a\u003E」ページを参照してください。\u003C/p\u003E\n","\u003Ch3\u003E段階的な処理のためのストリーム（CDC）\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeを使用すると、段階的なデータの処理が非常に簡単になります。従来、データエンジニアは、テーブル内の新しいレコードのみを処理するために、高基準値（通常は日時列）を追跡する必要がありました。そのため、基準値を追跡してどこかに保存し、ソーステーブルに対するクエリでそれを使用する必要がありました。しかし、Snowflakeストリームでは、手間のかかる作業はすべてSnowflakeが行います。詳細については、「\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/streams.html\"\u003Eテーブルストリームを使用した変更追跡\u003C/a\u003E」ユーザーガイドを参照してください。\u003C/p\u003E\n","\u003Cp\u003E必要なのは、ベーステーブルまたはビューに対してSnowflakeで\u003Ca href=\"https://docs.snowflake.com/ja/sql-reference/sql/create-stream.html\"\u003E\u003Ccode\u003ESTREAM\u003C/code\u003E\u003C/a\u003Eオブジェクトを作成し、Snowflakeの他のテーブルと同様にそのストリームにクエリを実行することだけです。ストリームは、最後に実行したDMLオプション以降に変更されたレコードのみを返します。変更されたレコードを扱いやすくするために、Snowflakeストリームはベーステーブルまたはビュー列とともに次のメタデータ列を提供します。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003EMETADATA$ACTION\u003C/li\u003E\u003Cli\u003EMETADATA$ISUPDATE\u003C/li\u003E\u003Cli\u003EMETADATA$ROW_ID\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003Eこれらのストリームメタデータ列の詳細については、ドキュメントの「\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/streams-intro.html#stream-columns\"\u003Eストリーム列\u003C/a\u003E」セクションを参照してください。\u003C/p\u003E\n","\u003Ch3\u003Eビューに対するストリーム\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeの段階的な/CDCストリーム機能の優れた点は、ビューに対してストリームを作成できることです。この例では、6つの未加工のPOSテーブルを結合するビューに対してストリームを作成しています。これを行うコードは次のとおりです。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003Edef create_pos_view_stream(session):\n    session.use_schema('HARMONIZED')\n    _ = session.sql('CREATE OR REPLACE STREAM POS_FLATTENED_V_STREAM \\\n                        ON VIEW POS_FLATTENED_V \\\n                        SHOW_INITIAL_ROWS = TRUE').collect()\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eここで、変更されたレコードを見つけるために\u003Ccode\u003EPOS_FLATTENED_V_STREAM\u003C/code\u003Eストリームにクエリを実行すると、Snowflakeは実際にはビューに含まれる6つのテーブルの中から変更されたレコードを検索します。このような非正規化スキーマに関する段階的な/CDCプロセスを構築しようとしたことがある方であれば、Snowflakeがここで提供する信じられないほどパワフルな機能に感謝することでしょう。\u003C/p\u003E\n","\u003Cp\u003E詳細については、ドキュメントの「\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/streams-intro.html#streams-on-views\"\u003Eビューに対するストリーム\u003C/a\u003E」セクションを参照してください。\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003E華氏から摂氏への変換UDF\u003C/h2\u003E\n","\u003Cp\u003Eこのステップでは、最初のSnowpark Pythonオブジェクトであるユーザー定義関数（UDF）を作成し、Snowflakeに展開します。UDFから始めることは非常に基本的ですが、今後のステップではサードパーティのPythonパッケージを含むように更新します。また、このステップでは新しい開発者コマンドラインツールであるSnowCLIを紹介します。SnowCLIを使用することで、開発者はSnowpark Pythonオブジェクトの構築とSnowflakeへの展開を一貫した方法で行うことができます。SnowCLIの詳細については後述します。これは、コンテキストの中では、データフローの概要のステップ**#5**に当たります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EローカルでのUDFの実行\u003C/h3\u003E\n","\u003Cp\u003EUDFをローカルでテストするには、\u003Ccode\u003Esteps/05_fahrenheit_to_celsius_udf/app.py\u003C/code\u003Eスクリプトを実行します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -&gt; 「新しいターミナル」）、\u003Ccode\u003Epysnowpark\u003C/code\u003E conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecd steps/05_fahrenheit_to_celsius_udf\npython app.py 35\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003EUDFを開発している間は、VS Codeでローカルに実行するだけです。また、UDFがSnowflakeのデータをクエリする必要がない場合、このプロセスは完全にローカルで実行されます。\u003C/p\u003E\n","\u003Ch3\u003ESnowflakeへのUDFの展開\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeにUDFを展開するには、SnowCLIツールを使用します。SnowCLIツールは、アプリケーションのパッケージ化、Snowflakeステージへのコピー、Snowflakeでのオブジェクトの作成といった手間のかかる作業をすべて行います。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -&gt; 「新しいターミナル」）、\u003Ccode\u003Epysnowpark\u003C/code\u003E conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecd steps/05_fahrenheit_to_celsius_udf\nsnow function create\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\u003C/p\u003E\n","\u003Ch3\u003ESnowflakeでのUDFの実行\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeでUDFを実行するには、いくつかのオプションがあります。SnowflakeのUDFは、次のようにSQLで呼び出すことができます。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT ANALYTICS.FAHRENHEIT_TO_CELSIUS_UDF(35);\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eまた、SnowCLIユーティリティを使用して、次のようにVS CodeのターミナルからUDFを呼び出すこともできます。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow function execute -f &quot;fahrenheit_to_celsius_udf(35)&quot;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eこれにより、SnowCLIツールが上記のSQLクエリを生成し、Snowflakeアカウントに対して実行します。\u003C/p\u003E\n","\u003Ch3\u003ESnowCLIツールの概要\u003C/h3\u003E\n","\u003Cp\u003E\u003Ca href=\"https://github.com/Snowflake-Labs/snowcli\"\u003ESnowCLI\u003C/a\u003Eツールは開発者向けのコマンドラインツールで、コマンドラインから\u003Ccode\u003Esnow\u003C/code\u003Eとして実行されます。\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003E注意\u003C/strong\u003E - \u003Ca href=\"https://docs.snowflake.com/ja/user-guide/snowsql.html\"\u003ESnowSQL\u003C/a\u003Eコマンドラインツールと混同しないでください。これはSnowflakeに接続してSQLクエリを実行し、すべてのDDLおよびDML操作を実行するためのクライアントであり、コマンドラインから\u003Ccode\u003Esnowsql\u003C/code\u003Eとして実行されます。\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003ESnowCLIは、次のSnowflakeオブジェクトの開発と展開を簡素化します。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003ESnowpark Python UDF\u003C/li\u003E\u003Cli\u003ESnowpark Pythonストアドプロシージャ\u003C/li\u003E\u003Cli\u003EStreamlitアプリケーション\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003Eこのクイックスタートでは、最初の2つに焦点を当てます。特に、Snowpark Python UDFとストアドプロシージャに関しては、SnowCLIはオブジェクトをSnowflakeに展開するという手間のかかる作業をすべて実行します。次に、SnowCLIのdeployコマンドが実行するステップを簡単にまとめます。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003Eサードパーティパッケージを処理する\n\u003Cul\u003E\u003Cli\u003EAnacondaチャネルから直接アクセスできるパッケージの場合は、\u003Ccode\u003ECREATE PROCEDURE\u003C/code\u003Eまたは\u003Ccode\u003ECREATE FUNCTION\u003C/code\u003E SQLコマンドの\u003Ccode\u003EPACKAGES\u003C/code\u003Eリストに追加します。\u003C/li\u003E\u003Cli\u003E現在Anacondaチャネルで利用できないパッケージの場合は、コードをダウンロードし、プロジェクトzipファイルに追加します。\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003Eプロジェクトのすべてのファイルを含むzipファイルを作成する\u003C/li\u003E\u003Cli\u003EそのプロジェクトzipファイルをSnowflakeステージにコピーする\u003C/li\u003E\u003Cli\u003ESnowflake関数またはストアドプロシージャオブジェクトを作成する\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003Eこれにより、対応するSnowflakeデータベースオブジェクトでラップすることを心配せずに、Pythonアプリケーションを開発してテストすることもできるようになります。\u003C/p\u003E\n","\u003Ch3\u003ESnowpark Python UDFの詳細\u003C/h3\u003E\n","\u003Cp\u003Eこのステップでは、非常にシンプルなPython UDFをSnowflakeに展開しました。今後のステップでは、サードパーティのパッケージを使用するように更新する予定です。また、SnowCLIコマンドでSnowflakeに展開したため、Snowflakeでオブジェクトを作成するためのSQL DDL構文を気にする必要はありませんでした。ただし、参考までに、「\u003Ca href=\"https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python.html\"\u003EPython UDFの作成\u003C/a\u003E」開発者ガイドを参照してください。\u003C/p\u003E\n","\u003Cp\u003ESnowCLIツールが関数を展開するために生成したSQLクエリは次のとおりです。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE  FUNCTION fahrenheit_to_celsius_udf(temp_f float)\n         RETURNS float\n         LANGUAGE PYTHON\n         RUNTIME_VERSION=3.8\n         IMPORTS=('@HOL_DB.ANALYTICS.deployments/fahrenheit_to_celsius_udftemp_f_float/app.zip')\n         HANDLER='app.main'\n         PACKAGES=();\n\u003C/code\u003E\u003C/pre\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003E注文更新ストアドプロシージャ\u003C/h2\u003E\n","\u003Cp\u003Eこのステップでは、最初のSnowpark Pythonストアドプロシージャ（sproc）を作成し、Snowflakeに展開します。このストアドプロシージャは、\u003Ccode\u003EHARMONIZED.POS_FLATTENED_V_STREAM\u003C/code\u003Eストリームからの変更をターゲットの\u003Ccode\u003EHARMONIZED.ORDERS\u003C/code\u003Eテーブルにマージします。これは、コンテキストの中では、データフローの概要のステップ**#6**に当たります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003Eローカルでのストアドプロシージャの実行\u003C/h3\u003E\n","\u003Cp\u003Eプロシージャをローカルでテストするには、\u003Ccode\u003Esteps/06_orders_update_sp/app.py\u003C/code\u003Eスクリプトを実行します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -&gt; 「新しいターミナル」）、\u003Ccode\u003Epysnowpark\u003C/code\u003E conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecd steps/06_orders_update_sp\npython app.py\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eストアドプロシージャを開発している間は、VS Codeでローカルに実行するだけです。Pythonコードはノートパソコンでローカルに実行されますが、Snowpark DataFrameコードはSnowflakeアカウントにSQLクエリを発行します。\u003C/p\u003E\n","\u003Ch3\u003ESnowflakeへのストアドプロシージャの展開\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeにストアドプロシージャを展開するには、SnowCLIツールを使用します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -&gt; 「新しいターミナル」）、\u003Ccode\u003Epysnowpark\u003C/code\u003E conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecd steps/06_orders_update_sp\nsnow procedure create\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\u003C/p\u003E\n","\u003Ch3\u003ESnowflakeでのストアドプロシージャの実行\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeでストアドプロシージャを実行するには、いくつかのオプションがあります。Snowflakeのストアドプロシージャは、次のようにSQLで呼び出すことができます。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECALL ORDERS_UPDATE_SP();\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eまた、SnowCLIユーティリティを使用して、次のようにVS CodeのターミナルからUDFを呼び出すこともできます。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow procedure execute -p &quot;orders_update_sp()&quot;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eこれにより、SnowCLIツールが上記のSQLクエリを生成し、Snowflakeアカウントに対して実行します。\u003C/p\u003E\n","\u003Ch3\u003ESnowpark Pythonストアドプロシージャの詳細\u003C/h3\u003E\n","\u003Cp\u003Eこのステップでは、PythonストアドプロシージャをSnowflakeに展開しました。また、SnowCLIコマンドでSnowflakeに展開したため、Snowflakeでオブジェクトを作成するためのSQL DDL構文を気にする必要はありませんでした。ただし、参考までに、「\u003Ca href=\"https://docs.snowflake.com/ja/sql-reference/stored-procedures-python.html\"\u003ESnowpark（Python）でのストアドプロシージャの記述\u003C/a\u003E」ガイドを参照してください。\u003C/p\u003E\n","\u003Cp\u003ESnowCLIツールがプロシージャを展開するために生成したSQLクエリは次のとおりです。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE  PROCEDURE orders_update_sp()\n         RETURNS string\n         LANGUAGE PYTHON\n         RUNTIME_VERSION=3.8\n         IMPORTS=('@HOL_DB.HARMONIZED.deployments/orders_update_sp/app.zip')\n         HANDLER='app.main'\n         PACKAGES=('snowflake-snowpark-python','toml')\n        EXECUTE AS CALLER;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003ESnowpark APIの詳細\u003C/h3\u003E\n","\u003Cp\u003Eこのステップでは、Snowpark DataFrame APIを実際に使用してデータ変換を行います。Snowpark APIは、\u003Ca href=\"https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/index.html\"\u003ESpark SQL API\u003C/a\u003Eと同じ機能を提供します。まず、Snowparkセッションオブジェクトを作成する必要があります。PySparkと同様に、これは\u003Ccode\u003ESession.builder.configs().create()\u003C/code\u003Eメソッドを使って行います。ローカルで実行する場合は、\u003Ccode\u003Eutils.snowpark_utils.get_snowpark_session()\u003C/code\u003Eヘルパー関数を使用してセッションオブジェクトを作成します。ただし、Snowflakeに展開すると、セッションオブジェクトはSnowflakeによって自動的にプロビジョニングされます。また、Snowpark Pythonストアドプロシージャを構築する場合、契約では、エントリーポイント（またはハンドラー）関数の最初の引数はSnowparkセッションです。\u003C/p\u003E\n","\u003Cp\u003E\u003Ccode\u003Esteps/06_orders_update_sp/app.py\u003C/code\u003Eスクリプトで最初に目を引くのは、SQLを使用してSnowflakeにオブジェクトを作成したり、オブジェクトのステータスをチェックしたりする関数がいくつかあることです。Snowpark APIを使用してSnowflakeにSQLステートメントを発行するには、予想どおり、\u003Ccode\u003Esession.sql()\u003C/code\u003E関数を使用します。次に例を示します。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003Edef create_orders_stream(session):\n    _ = session.sql(&quot;CREATE STREAM IF NOT EXISTS HARMONIZED.ORDERS_STREAM ON TABLE HARMONIZED.ORDERS \\\n                    SHOW_INITIAL_ROWS = TRUE;&quot;).collect()\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E2番目のポイントは、DataFrameを使用してソースビューからターゲットテーブルに変更をマージする方法です。Snowpark DataFrame APIは、最終的にSnowflakeで\u003Ccode\u003EMERGE\u003C/code\u003Eコマンドを生成する\u003Ccode\u003Emerge()\u003C/code\u003Eメソッドを提供します。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003E    source = session.table('HARMONIZED.POS_FLATTENED_V_STREAM')\n    target = session.table('HARMONIZED.ORDERS')\n\n    # TODO: Is the if clause supposed to be based on &quot;META_UPDATED_AT&quot;?\n    cols_to_update = {c: source[c] for c in source.schema.names if &quot;METADATA&quot; not in c}\n    metadata_col_to_update = {&quot;META_UPDATED_AT&quot;: F.current_timestamp()}\n    updates = {**cols_to_update, **metadata_col_to_update}\n\n    # merge into DIM_CUSTOMER\n    target.merge(source, target['ORDER_DETAIL_ID'] == source['ORDER_DETAIL_ID'], \\\n                        [F.when_matched().update(updates), F.when_not_matched().insert(updates)])\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E繰り返しますが、Snowpark Python DataFrame APIの詳細については、「\u003Ca href=\"https://docs.snowflake.com/ja/developer-guide/snowpark/python/working-with-dataframes.html\"\u003ESnowpark PythonでのDataFramesの使用\u003C/a\u003E」ページを参照してください。\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003EDaily Cityメトリック更新ストアドプロシージャ\u003C/h2\u003E\n","\u003Cp\u003Eこのステップでは、2番目のSnowpark Pythonストアドプロシージャを作成し、Snowflakeに展開します。このストアドプロシージャは、\u003Ccode\u003EHARMONIZED.ORDERS\u003C/code\u003EデータとWeather Sourceデータを結合して、\u003Ccode\u003EANALYTICS.DAILY_CITY_METRICS\u003C/code\u003Eという分析用の最終集計テーブルを作成します。別のSnowflakeストリームを使用して、\u003Ccode\u003EHARMONIZED.ORDERS\u003C/code\u003Eテーブルからデータを段階的に処理します。また、Snowpark DataFrame \u003Ccode\u003Emerge()\u003C/code\u003Eメソッドを再度使用してデータをマージ/アップサートします。これは、コンテキストの中では、データフローの概要のステップ**#7**に当たります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003Eローカルでのストアドプロシージャの実行\u003C/h3\u003E\n","\u003Cp\u003Eプロシージャをローカルでテストするには、\u003Ccode\u003Esteps/07_daily_city_metrics_update_sp/app.py\u003C/code\u003Eスクリプトを実行します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -&gt; 「新しいターミナル」）、\u003Ccode\u003Epysnowpark\u003C/code\u003E conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecd steps/07_daily_city_metrics_update_sp\npython app.py\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eストアドプロシージャを開発している間は、VS Codeでローカルに実行するだけです。Pythonコードはノートパソコンでローカルに実行されますが、Snowpark DataFrameコードはSnowflakeアカウントにSQLクエリを発行します。\u003C/p\u003E\n","\u003Ch3\u003ESnowflakeへのストアドプロシージャの展開\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeにストアドプロシージャを展開するには、SnowCLIツールを使用します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -&gt; 「新しいターミナル」）、\u003Ccode\u003Epysnowpark\u003C/code\u003E conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecd steps/07_daily_city_metrics_update_sp\nsnow procedure create\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\u003C/p\u003E\n","\u003Ch3\u003ESnowflakeでのストアドプロシージャの実行\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeでストアドプロシージャを実行するには、いくつかのオプションがあります。Snowflakeのストアドプロシージャは、次のようにSQLで呼び出すことができます。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECALL DAILY_CITY_METRICS_UPDATE_SP();\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eまた、SnowCLIユーティリティを使用して、次のようにVS CodeのターミナルからUDFを呼び出すこともできます。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Esnow procedure execute -p &quot;daily_city_metrics_update_sp()&quot;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eこれにより、SnowCLIツールが上記のSQLクエリを生成し、Snowflakeアカウントに対して実行します。\u003C/p\u003E\n","\u003Ch3\u003Eデータモデリングのベストプラクティス\u003C/h3\u003E\n","\u003Cp\u003E分析のためにデータをモデリングするときのベストプラクティスは、テーブルのスキーマを明確に定義して管理することです。ステップ2では、Parquetから未加工データをロードする際に、Snowflakeのスキーマ検出機能を利用して、Parquetファイルと同じスキーマのテーブルを作成しました。このステップでは、DataFrame構文でスキーマを明示的に定義し、それを使用してテーブルを作成しています。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003Edef create_daily_city_metrics_table(session):\n    SHARED_COLUMNS= [T.StructField(&quot;DATE&quot;, T.DateType()),\n                                        T.StructField(&quot;CITY_NAME&quot;, T.StringType()),\n                                        T.StructField(&quot;COUNTRY_DESC&quot;, T.StringType()),\n                                        T.StructField(&quot;DAILY_SALES&quot;, T.StringType()),\n                                        T.StructField(&quot;AVG_TEMPERATURE_FAHRENHEIT&quot;, T.DecimalType()),\n                                        T.StructField(&quot;AVG_TEMPERATURE_CELSIUS&quot;, T.DecimalType()),\n                                        T.StructField(&quot;AVG_PRECIPITATION_INCHES&quot;, T.DecimalType()),\n                                        T.StructField(&quot;AVG_PRECIPITATION_MILLIMETERS&quot;, T.DecimalType()),\n                                        T.StructField(&quot;MAX_WIND_SPEED_100M_MPH&quot;, T.DecimalType()),\n                                    ]\n    DAILY_CITY_METRICS_COLUMNS = [*SHARED_COLUMNS, T.StructField(&quot;META_UPDATED_AT&quot;, T.TimestampType())]\n    DAILY_CITY_METRICS_SCHEMA = T.StructType(DAILY_CITY_METRICS_COLUMNS)\n\n    dcm = session.create_dataframe([[None]*len(DAILY_CITY_METRICS_SCHEMA.names)], schema=DAILY_CITY_METRICS_SCHEMA) \\\n                        .na.drop() \\\n                        .write.mode('overwrite').save_as_table('ANALYTICS.DAILY_CITY_METRICS')\n    dcm = session.table('ANALYTICS.DAILY_CITY_METRICS')\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003E複雑な集約クエリ\u003C/h3\u003E\n","\u003Cp\u003E\u003Ccode\u003Emerge_daily_city_metrics()\u003C/code\u003E関数には、POSとWeather Sourceからのデータを結合して集約するために使用される複雑な集約クエリが含まれています。表現されている一連の複雑な結合と集約、およびステップ#5で作成したSnowpark UDFをどのようにしてさらに活用しているかをご覧ください。\u003C/p\u003E\n","\u003Cp\u003E複雑な集約クエリは、Snowparkの\u003Ccode\u003Emerge()\u003C/code\u003Eメソッドを使用して最終分析テーブルにマージされます。まだ確認していない場合は、Snowflakeクエリ履歴をチェックして、Snowpark APIによってどのクエリが生成されたかを確認してください。この場合、Snowpark APIはマージを含むすべての複雑なロジックを取得し、実行する単一のSnowflakeクエリを作成したことがわかります。\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003Eジョブのオーケストレーション\u003C/h2\u003E\n","\u003Cp\u003Eこのステップでは、タスクという名前のSnowflakeのネイティブオーケストレーション機能を使用して、新しいSnowparkパイプラインをオーケストレーションします。それぞれのストアドプロシージャに1つずつ、2つのタスクを作成し、それらを連結します。その後、タスクを実行します。これは、コンテキストの中では、データフローの概要のステップ**#8**に当たります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003Eスクリプトの実行\u003C/h3\u003E\n","\u003Cp\u003EこれはSQLスクリプトなので、ネイティブのVS Code拡張機能を使用して実行します。\u003Ccode\u003Esteps/08_orchestrate_jobs.sql\u003C/code\u003EスクリプトをVS Codeで開き、エディタウィンドウの右上にある「すべてのステートメントを実行」ボタンを使用して全体を実行します。\u003C/p\u003E\n","\u003Cp\u003Eスクリプトを実行している間、VS Codeでスクリプトに目を通し、このページを読み進めて何が起こっているのかを理解してください。\u003C/p\u003E\n","\u003Ch3\u003Eタスクの実行\u003C/h3\u003E\n","\u003Cp\u003Eこのステップでは、タスクDAGのスケジュールを作成しなかったため、この時点では、DAGは自動的に実行されません。そのため、このスクリプトでは、次のように手動でDAGを実行していることがわかります。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003EEXECUTE TASK ORDERS_UPDATE_TASK;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E先ほどこのタスクを実行したときに何が起こったかを確認するには、スクリプトにある次のコメント化されたクエリをハイライトして実行します（CMD/CTRL+Enterキーを使用）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT *\nFROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(\n    SCHEDULED_TIME_RANGE_START=&gt;DATEADD('DAY',-1,CURRENT_TIMESTAMP()),\n    RESULT_LIMIT =&gt; 100))\nORDER BY SCHEDULED_TIME DESC\n;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003Eタスク履歴の出力では、\u003Ccode\u003EORDERS_UPDATE_TASK\u003C/code\u003Eタスクがスキップされていることがわかります。\u003Ccode\u003EHARMONIZED.POS_FLATTENED_V_STREAM\u003C/code\u003Eストリームにはデータがないため、これは正常な動作です。次のステップで、新しいデータを追加して再度実行します。\u003C/p\u003E\n","\u003Ch3\u003Eタスクの詳細\u003C/h3\u003E\n","\u003Cp\u003Eタスクは、Snowflakeのネイティブなスケジューリング/オーケストレーション機能です。タスクを使用すると、次のいずれかのタイプのSQLコードを実行できます。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E単一のSQLステートメント\u003C/li\u003E\u003Cli\u003Eストアドプロシージャの呼び出し\u003C/li\u003E\u003Cli\u003ESnowflakeスクリプト開発者ガイドを使用した手続き型ロジック\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003Eこのクイックスタートでは、Snowparkストアドプロシージャを呼び出します。2番目のタスクを作成するためのSQL DDLコードは次のとおりです。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ECREATE OR REPLACE TASK DAILY_CITY_METRICS_UPDATE_TASK\nWAREHOUSE = HOL_WH\nAFTER ORDERS_UPDATE_TASK\nWHEN\n  SYSTEM$STREAM_HAS_DATA('ORDERS_STREAM')\nAS\nCALL ANALYTICS.DAILY_CITY_METRICS_UPDATE_SP();\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E注意すべき点がいくつかあります。まず、\u003Ccode\u003EWAREHOUSE\u003C/code\u003E句でタスク実行時に使用するSnowflake仮想ウェアハウスを指定します。\u003Ccode\u003EAFTER\u003C/code\u003E句を使用すると、タスク間の関係を定義できます。この関係の構造は、ほとんどのオーケストレーションツールが提供するように、有向非巡回グラフ（DAG）です。\u003Ccode\u003EAS\u003C/code\u003E句では、タスクが実行されたときに何をすべきかを定義できます。この場合は、ストアドプロシージャを呼び出します。\u003C/p\u003E\n","\u003Cp\u003E\u003Ccode\u003EWHEN\u003C/code\u003E句は非常に便利です。ストリームがデータの段階的な処理を可能にすることで、Snowflakeでどのように機能するかをすでに確認しました。さらに、（多数のテーブルを結合する）ビューに対してストリームを作成する方法と、そのビューに対してストリームを作成してそのデータを段階的に処理する方法も確認しました。この\u003Ccode\u003EWHEN\u003C/code\u003E句では、指定されたストリームに新しいデータがある場合にtrueを返すシステム関数\u003Ccode\u003ESYSTEM$STREAM_HAS_DATA()\u003C/code\u003Eを呼び出しています。\u003Ccode\u003EWHEN\u003C/code\u003E句が指定されている場合、仮想ウェアハウスはストリームに新しいデータがある場合のみ起動します。つまり、タスクの実行時に新しいデータがなければ、ウェアハウスは起動せず、課金もされません。処理する新しいデータがある場合にのみ課金されます。素晴らしいと思いませんか。\u003C/p\u003E\n","\u003Cp\u003E前述のように、ルートタスクの\u003Ccode\u003ESCHEDULE\u003C/code\u003Eを定義しなかったため、このDAGは自動的には実行されません。このクイックスタートでは問題ありませんが、実際の状況ではスケジュールを定義します。詳細については、「\u003Ca href=\"https://docs.snowflake.com/ja/sql-reference/sql/create-task.html\"\u003Eタスクの作成\u003C/a\u003E」を参照してください。\u003C/p\u003E\n","\u003Cp\u003Eタスクの詳細については、「\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/tasks-intro.html\"\u003Eタスクの紹介\u003C/a\u003E」を参照してください。\u003C/p\u003E\n","\u003Ch3\u003Eタスクのメタデータ\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeは、ユーザーが実行するほとんどすべてのことのメタデータを保持し、そのメタデータをクエリ（およびクエリに関連するあらゆる種類のプロセスの作成）に利用できるようにします。タスクも同様で、Snowflakeはタスク実行のモニタリングに役立つ豊富なメタデータを保持しています。次に、タスク実行のモニタリングに使用できるSQLクエリのサンプルをいくつか紹介します。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003E-- Get a list of tasks\nSHOW TASKS;\n\n-- Task execution history in the past day\nSELECT *\nFROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(\n    SCHEDULED_TIME_RANGE_START=&gt;DATEADD('DAY',-1,CURRENT_TIMESTAMP()),\n    RESULT_LIMIT =&gt; 100))\nORDER BY SCHEDULED_TIME DESC\n;\n\n-- Scheduled task runs\nSELECT\n    TIMESTAMPDIFF(SECOND, CURRENT_TIMESTAMP, SCHEDULED_TIME) NEXT_RUN,\n    SCHEDULED_TIME,\n    NAME,\n    STATE\nFROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY())\nWHERE STATE = 'SCHEDULED'\nORDER BY COMPLETED_TIME DESC;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Ch3\u003Eタスクのモニタリング\u003C/h3\u003E\n","\u003Cp\u003ESnowflakeでは、オペレーションプロセスやモニタリングプロセスを自由に作成できる一方で、Snowsight UIに豊富なタスク監視機能が用意されています。次の手順に従って試してみてください。\u003C/p\u003E\n\u003Col\u003E\u003Cli\u003ESnowsightのナビゲーションメニューで、「\u003Cstrong\u003Eデータ\u003C/strong\u003E」 &raquo; 「**データベース」**をクリックします。\u003C/li\u003E\u003Cli\u003E右側のペインで、オブジェクトエクスプローラーを使用して、データベースとスキーマに移動します。\u003C/li\u003E\u003Cli\u003E選択したスキーマで、「\u003Cstrong\u003Eタスク\u003C/strong\u003E」を選択して展開します。\u003C/li\u003E\u003Cli\u003Eタスクを選択します。「\u003Cstrong\u003Eタスクの詳細」\u003C/strong\u003E、「\u003Cstrong\u003Eグラフ」\u003C/strong\u003E、「**実行履歴」**のサブタブを含むタスク情報が表示されます。\u003C/li\u003E\u003Cli\u003E「**グラフ」**タブを選択します。タスクグラフが表示され、子タスクの階層が表示されます。\u003C/li\u003E\u003Cli\u003E詳細を表示するタスクを選択します。\u003C/li\u003E\u003C/ol\u003E\n","\u003Cp\u003Eタスクグラフは次のように表示されます。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/ui-snowsight-task-graph.png\" alt=\"assets/ui-snowsight-task-graph.png\"\u003E\n次にタスク実行履歴の例を示します。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/ui-snowsight-task-run-history.png\" alt=\"assets/ui-snowsight-task-run-history.png\"\u003E\n詳細とアカウントレベルのタスク履歴の表示については、「\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/ui-snowsight-tasks.html\"\u003Eタスク履歴の表示\u003C/a\u003E」ドキュメントを参照してください。\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003E段階的な処理\u003C/h2\u003E\n","\u003Cp\u003Eこのステップでは、POS注文テーブルに新しいデータを追加し、エンドツーエンドのパイプライン全体を実行して新しいデータを処理します。このパイプライン全体は、Snowflakeの高度なストリーム/CDC機能を活用してデータを段階的に処理します。これは、コンテキストの中では、データフローの概要のステップ**#9**に当たります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003Eスクリプトの実行\u003C/h3\u003E\n","\u003Cp\u003EこれはSQLスクリプトなので、ネイティブのVS Code拡張機能を使用して実行します。\u003Ccode\u003Esteps/09_process_incrementally.sql\u003C/code\u003EスクリプトをVS Codeで開き、エディタウィンドウの右上にある「すべてのステートメントを実行」ボタンを使用して全体を実行します。\u003C/p\u003E\n","\u003Cp\u003E実行中に何が起こっているのか簡単に説明しましょう。ステップ#2と同様に、Parquetから未加工のPOSテーブルにデータをロードします。ステップ#2では、\u003Ccode\u003EORDER_HEADER\u003C/code\u003Eと\u003Ccode\u003EORDER_DETAIL\u003C/code\u003Eの2022年のデータを除くすべての注文データをロードしました。ここでは、残りのデータをロードします。\u003C/p\u003E\n","\u003Cp\u003E今回はPythonではなくSQLを使ってデータをロードしますが、プロセスは同じです。ウェアハウスのサイズを変更します。データをより速くロードできるようにスケールアップし、ロードが完了したらスケールダウンします。新しいデータがロードされたら、タスクDAGを再度実行します。今回は両方のタスクが実行され、新しいデータを処理します。\u003C/p\u003E\n","\u003Ch3\u003Eタスク履歴の表示\u003C/h3\u003E\n","\u003Cp\u003E前のステップと同様に、このタスクDAGを実行したときに何が起こったかを確認するには、スクリプトにある次のコメント化されたクエリをハイライトして実行します（CMD/CTRL+Enterキーを使用）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-sql\"\u003ESELECT *\nFROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(\n    SCHEDULED_TIME_RANGE_START=&gt;DATEADD('DAY',-1,CURRENT_TIMESTAMP()),\n    RESULT_LIMIT =&gt; 100))\nORDER BY SCHEDULED_TIME DESC\n;\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E今回は、\u003Ccode\u003EHARMONIZED.POS_FLATTENED_V_STREAM\u003C/code\u003Eストリームに新しいデータがあるため、\u003Ccode\u003EORDERS_UPDATE_TASK\u003C/code\u003Eタスクがスキップされないことがわかります。数分後には、\u003Ccode\u003EORDERS_UPDATE_TASK\u003C/code\u003Eタスクと\u003Ccode\u003EDAILY_CITY_METRICS_UPDATE_TASK\u003C/code\u003Eタスクの両方が正常に完了したことがわかります。\u003C/p\u003E\n","\u003Ch3\u003Eタスクのクエリ履歴\u003C/h3\u003E\n","\u003Cp\u003Eタスクについて理解しておくべき重要なことは、タスクによって実行されたクエリはデフォルトのクエリ履歴UI設定では表示されないということです。先ほど実行されたクエリを表示するには、次の手順を実行する必要があります。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E後でスケジューリングされたタスクは「システム」として実行されるため、このテーブルの上部にあるフィルターを、ユーザー名を含めて削除します。\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/query_history_remove_filter1.png\" alt=\"\"\u003E\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E「フィルター」をクリックし、フィルターオプションの「ユーザータスクによって実行されたクエリ」を追加し、「フィルターを適用」をクリックします。\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/query_history_remove_filter2.png\" alt=\"\"\u003E\u003C/p\u003E\n","\u003Cp\u003Eこれにより、タスクによって実行されたすべてのクエリが表示されます。クエリ履歴でそれぞれのMERGEコマンドを調べ、各タスクで処理されたレコード数を確認します。先ほどパイプライン全体を段階的に処理したことに注意してください。\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003ECI/CDによる展開\u003C/h2\u003E\n","\u003Cp\u003Eこのステップでは、\u003Ccode\u003EFAHRENHEIT_TO_CELSIUS_UDF()\u003C/code\u003E UDFに変更を加えてから、CI/CDパイプラインで展開します。サードパーティのPythonパッケージを使用するように\u003Ccode\u003EFAHRENHEIT_TO_CELSIUS_UDF()\u003C/code\u003E UDFを更新し、それをフォークしたGitHubレポジトリにプッシュし、最後にGitHubアクションワークフローでSnowCLIを使用して展開します。これは、コンテキストの中では、データフローの概要のステップ**#10**に当たります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003E華氏から摂氏への変換UDFの更新\u003C/h3\u003E\n","\u003Cp\u003Eハードコードされた温度変換を\u003Ccode\u003Escipy\u003C/code\u003Eのパッケージに置き換えます。まず、\u003Ccode\u003Esteps/05_fahrenheit_to_celsius_udf/app.py\u003C/code\u003Eスクリプトにいくつかの変更を加えます。このファイルでは\u003Ccode\u003Eimport\u003C/code\u003Eコマンドを追加し、\u003Ccode\u003Emain()\u003C/code\u003E関数の本文を置き換えます。\u003Ccode\u003Esteps/05_fahrenheit_to_celsius_udf/app.py\u003C/code\u003EスクリプトをVS Codeで開き、次のセクションを置き換えます。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003Eimport sys\n\ndef main(temp_f: float) -&gt; float:\n    return (float(temp_f) - 32) * (5/9)\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E次に置き換えます。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-python\"\u003Eimport sys\nfrom scipy.constants import convert_temperature\n\ndef main(temp_f: float) -&gt; float:\n    return convert_temperature(float(temp_f), 'F', 'C')\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E変更を忘れずに保存してください。\u003C/p\u003E\n","\u003Cp\u003E2番目の変更は、\u003Ccode\u003Erequirements.txt\u003C/code\u003Eファイルに\u003Ccode\u003Escipy\u003C/code\u003Eを追加することです。VS Codeで\u003Ccode\u003Esteps/05_fahrenheit_to_celsius_udf/requirements.txt\u003C/code\u003Eファイルを開き、\u003Ccode\u003Escipy\u003C/code\u003Eを含む改行を追加して保存します。\u003C/p\u003E\n","\u003Ch3\u003Eローカルでの変更のテスト\u003C/h3\u003E\n","\u003Cp\u003EUDFをローカルでテストするには、\u003Ccode\u003Esteps/05_fahrenheit_to_celsius_udf/app.py\u003C/code\u003Eスクリプトを実行します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -&gt; 「新しいターミナル」）、\u003Ccode\u003Epysnowpark\u003C/code\u003E conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\u003C/p\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-bash\"\u003Ecd steps/05_fahrenheit_to_celsius_udf\npip install -r requirements.txt\npython app.py 35\n\u003C/code\u003E\u003C/pre\u003E\n","\u003Cp\u003E今回は、依存パッケージが確実にインストールされるようにpip installも実行していることに注意してください。関数が正常に実行されたら、CI/CDで展開する準備が整います。\u003C/p\u003E\n","\u003Ch3\u003EフォークしたGitHubプロジェクトの設定\u003C/h3\u003E\n","\u003Cp\u003EGitHubアクションワークフローがSnowflakeアカウントに接続できるようにするには、Snowflakeの認証情報をGitHubに保存する必要があります。GitHubのアクションシークレットは、CI/CDパイプラインで使用する値/変数を安全に保存するために使用されます。このステップでは、SnowCLIで使用するパラメータごとにシークレットを作成します。\u003C/p\u003E\n","\u003Cp\u003Eレポジトリから、ページ上部付近にある「\u003Ccode\u003ESettings\u003C/code\u003E」タブをクリックします。「設定」ページで「\u003Ccode\u003ESecrets and variables\u003C/code\u003E」をクリックし、左側のナビゲーションで「\u003Ccode\u003EActions\u003C/code\u003E」タブをクリックします。\u003Ccode\u003EActions\u003C/code\u003Eシークレットが選択されているはずです。以下の各シークレットについて、右上にある「\u003Ccode\u003ENew repository secret\u003C/code\u003E」をクリックし、下記の名前と適切な値（必要に応じて調整）を入力します。\u003C/p\u003E\n\u003Ctable\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth colspan=\"1\" rowspan=\"1\"\u003Eシークレット名\u003C/th\u003E\u003Cth colspan=\"1\" rowspan=\"1\"\u003Eシークレット値\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003ESNOWSQL_ACCOUNT\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003Emyaccount\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003ESNOWSQL_USER\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003Emyusername\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003ESNOWSQL_PWD\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003Emypassword\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003ESNOWSQL_ROLE\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003EHOL_ROLE\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003ESNOWSQL_WAREHOUSE\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003EHOL_WH\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003ESNOWSQL_DATABASE\u003C/td\u003E\u003Ctd colspan=\"1\" rowspan=\"1\"\u003EHOL_DB\u003C/td\u003E\u003C/tr\u003E\u003C/tbody\u003E\u003C/table\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003Eヒント\u003C/strong\u003E - SNOWSQL_ACCOUNTのアカウント名の構成方法の詳細については、「\u003Ca href=\"https://docs.snowflake.com/ja/user-guide/python-connector-install.html#step-2-verify-your-installation\"\u003ESnowflake Pythonコネクターインストールガイド\u003C/a\u003E」にあるアカウント名の説明を参照してください。\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Cp\u003Eすべてのシークレットの追加が完了すると、ページは次のようになります。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/github-actions-secrets.png\" alt=\"assets/github-actions-secrets.png\"\u003E\u003C/p\u003E\n\u003Cblockquote\u003E\n","\u003Cp\u003E\u003Cstrong\u003Eヒント\u003C/strong\u003E - シークレットを管理するためのさらに優れたソリューションとして、\u003Ca href=\"https://docs.github.com/en/actions/reference/environments\"\u003EGitHubアクション環境\u003C/a\u003Eを活用できます。この環境では、シークレットをグループ化し、環境ごとに保護ルールを定義できます。\u003C/p\u003E\n\u003C/blockquote\u003E\n","\u003Ch3\u003Eフォークしたレポジトリへの変更のプッシュ\u003C/h3\u003E\n","\u003Cp\u003E変更の準備とテストが完了し、Snowflake認証情報がGitHubに保存されたので、それらをローカルレポジトリにコミットしてから、フォークしたレポジトリにプッシュしましょう。これはコマンドラインから実行できますが、このステップでは簡単にするためにVS Codeを使用して実行します。\u003C/p\u003E\n","\u003Cp\u003Eまず、左側のナビゲーションバーにある「ソース管理」拡張機能を開くと、変更のある2つのファイルが表示されます。それぞれのファイル名の右側にある\u003Ccode\u003E+\u003C/code\u003E（プラス）記号をクリックして、変更をステージングします。次に、「メッセージ」ボックスにメッセージを入力し、青の「\u003Ccode\u003ECommit\u003C/code\u003E」ボタンをクリックして変更をローカルにコミットします。ボタンをクリックする前は、次のように表示されます。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/vs_code_repo_commit.png\" alt=\"assets/vs_code_repo_commit.png\"\u003E\nこの時点では、これらの変更はローカルにコミットされているだけで、GitHubのフォークしたレポジトリにはまだプッシュされていません。これを行うには、青の「\u003Ccode\u003ESync Changes\u003C/code\u003E」ボタンをクリックして、これらのコミットをGitHubにプッシュします。ボタンをクリックする前は、次のように表示されます。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/vs_code_repo_push.png\" alt=\"assets/vs_code_repo_push.png\"\u003E\u003C/p\u003E\n","\u003Ch3\u003EGitHubアクションワークフローの表示\u003C/h3\u003E\n","\u003Cp\u003Eこのレポジトリには、非常にシンプルなGitHubアクションCI/CDパイプラインがすでに設定されています。このワークフローのコードを確認するには、VS Codeで\u003Ccode\u003E.github/workflows/build_and_deploy.yaml\u003C/code\u003Eファイルを開きます。\u003C/p\u003E\n","\u003Cp\u003EGitHubのフォークしたレポジトリに変更をプッシュすると、すぐにワークフローが開始されます。結果を見るには、GitHubレポジトリのトップページに戻って次の手順を実行します。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003Eレポジトリから、ページの中央上部にある「\u003Ccode\u003EActions\u003C/code\u003E」タブをクリックします。\u003C/li\u003E\u003Cli\u003E左側のナビゲーションバーで、「\u003Ccode\u003EDeploy Snowpark Apps\u003C/code\u003E」というワークフロー名をクリックします。\u003C/li\u003E\u003Cli\u003E最新の特定の実行の名前をクリックします（入力したコメントと一致する必要があります）。\u003C/li\u003E\u003Cli\u003E実行概要ページで\u003Ccode\u003Edeploy\u003C/code\u003Eジョブをクリックし、さまざまなステップの出力を参照します。特に、\u003Ccode\u003EDeploy Snowpark apps\u003C/code\u003Eステップの出力を確認するとよいでしょう。\u003C/li\u003E\u003C/ul\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/github-actions-run-summary.png\" alt=\"assets/github-actions-run-summary.png\"\u003E\n\u003Ccode\u003EDeploy Snowpark apps\u003C/code\u003Eステップの出力はすでに見覚えがあり、前のステップでSnowCLIを実行したときにVS Codeのターミナルに表示されたものと同じはずです。唯一異なるのは出力の順序ですが、何が起きているかはわかるはずです。\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003Eティアダウン\u003C/h2\u003E\n","\u003Cp\u003Eクイックスタートが終了し、クリーンアップしたい場合は、\u003Ccode\u003Esteps/11_teardown.sql\u003C/code\u003Eスクリプトを実行するだけです。これはSQLスクリプトなので、ネイティブのVS Code拡張機能を使用して実行します。\u003Ccode\u003Esteps/11_teardown.sql\u003C/code\u003EスクリプトをVS Codeで開き、エディタウィンドウの右上にある「すべてのステートメントを実行」ボタンを使用して全体を実行します。\u003C/p\u003E\n&lt;!-- ------------------------ --&gt;\n","\u003Ch2\u003Eまとめ\u003C/h2\u003E\n","\u003Cp\u003Eこのクイックスタートでは多くのことを学習しました。ここまでで、Snowpark Pythonストアドプロシージャを使用して堅牢なデータエンジニアリングパイプラインを構築しました。このパイプラインはデータを段階的に処理し、Snowflakeタスクとオーケストレーションされ、CI/CDパイプラインで展開されます。また、Snowflakeの新しい開発者CLIツールとVisual Studio Code拡張機能の使用方法も学習しました。以下に簡単な要約を図で示します。\u003C/p\u003E\n","\u003Cp\u003E\u003Cimg src=\"https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png\" alt=\"assets/data_pipeline_overview.png\"\u003E\nしかし、実際にはSnowparkでできることをほんの少しかじっただけです。これで、Snowpark Pythonを使用して独自のデータエンジニアリングパイプラインを構築するために必要な構成要素と例を入手できたと思います。では、これから何を構築しますか？\u003C/p\u003E\n","\u003Ch3\u003Eここまで学んだ内容\u003C/h3\u003E\n","\u003Cp\u003Eこのクイックスタートでは多くのことを学習しましたが、ここではそのハイライトを紹介します。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003ESnowflakeのテーブルフォーマット\u003C/li\u003E\u003Cli\u003ECOPYによるデータの取り込み\u003C/li\u003E\u003Cli\u003Eスキーマ推論\u003C/li\u003E\u003Cli\u003Eデータシェアリング/マーケットプレイス（ETLの代わり）\u003C/li\u003E\u003Cli\u003E段階的な処理のためのストリーム（CDC）\u003C/li\u003E\u003Cli\u003Eビューに対するストリーム\u003C/li\u003E\u003Cli\u003EPython UDF（サードパーティパッケージを使用）\u003C/li\u003E\u003Cli\u003EPythonストアドプロシージャ\u003C/li\u003E\u003Cli\u003ESnowpark DataFrame API\u003C/li\u003E\u003Cli\u003ESnowpark Pythonプログラマビリティ\u003C/li\u003E\u003Cli\u003Eウェアハウスの伸縮性（動的スケーリング）\u003C/li\u003E\u003Cli\u003EVisual Studio Code Snowflakeネイティブ拡張\u003C/li\u003E\u003Cli\u003ESnowCLI\u003C/li\u003E\u003Cli\u003Eタスク（ストリームトリガーを使用）\u003C/li\u003E\u003Cli\u003Eタスクの監視\u003C/li\u003E\u003Cli\u003EGitHubアクション（CI/CD）の統合\u003C/li\u003E\u003C/ul\u003E\n","\u003Ch3\u003E関連リソース\u003C/h3\u003E\n","\u003Cp\u003E最後に、関連リソースを簡単にまとめます。\u003C/p\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Ca href=\"https://github.com/Snowflake-Labs/sfguide-data-engineering-with-snowpark-python\"\u003EGitHubのソースコード\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/ja/developer-guide/snowpark/python/index.html\"\u003EPython用Snowpark開発者ガイド\u003C/a\u003E\n\u003Cul\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python.html\"\u003EPython UDFの記述\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/ja/sql-reference/stored-procedures-python.html\"\u003ESnowpark（Python）でのストアドプロシージャの記述\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/ja/developer-guide/snowpark/python/working-with-dataframes.html\"\u003ESnowpark PythonでのDataFramesの使用\u003C/a\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003Cli\u003E関連ツール\n\u003Cul\u003E\u003Cli\u003E\u003Ca href=\"https://marketplace.visualstudio.com/items?itemName=snowflake.snowflake-vsc\"\u003ESnowflake Visual Studio Code拡張機能\u003C/a\u003E\u003C/li\u003E\u003Cli\u003E\u003Ca href=\"https://github.com/Snowflake-Labs/snowcli\"\u003ESnowCLIツール\u003C/a\u003E\u003C/li\u003E\u003C/ul\u003E\n\u003C/li\u003E\u003C/ul\u003E"],"title":"Snowpark Pythonによるデータエンジニアリングパイプライン","isDeveloperGuidesPage":false,":type":"snowflake-site/components/contentfragment","elements":{"quickstartArticleBody":{"dataType":"string","value":"\u003C!-- ------------------------ --\u003E\n## 概要\n\n\n\u003E 「データエンジニアは、さまざまな手順でデータを転送し、データを使用可能な状態にするデータパイプラインの構築と保守に重点を置いています。データエンジニアリングプロセスには、場所から場所へのデータ転送を自動化し、そのデータを特定の種類の分析に使用できるように特定の形式に変換する**データパイプライン**の作成に必要な作業全体が含まれます。その意味で、データエンジニアリングは一度だけ行うものではありません。データの収集、準備、変換、提供に関連する継続的な作業です。データパイプラインは、これらのタスクを自動化して確実に反復するのに役立ちます。これは、特定のテクノロジーというよりもプラクティスです」（「初心者向けクラウドデータエンジニアリング」、Snowflake特別版）\n\nSnowpark Pythonの機能を活用してデータエンジニアリングパイプラインを構築したい場合は、このクイックスタートが最適です。ここでは、データサイエンスではなく、Pythonによるデータエンジニアリングパイプラインの構築に焦点を当てます。Snowpark Pythonによるデータサイエンスの例については、「[Snowpark Pythonによる機械学習：](/en/developers/guides/getting-started-snowpark-machine-learning/)[](/en/developers/guides/getting-started-snowpark-machine-learning/)[- クレジットカード承認予測](/en/developers/guides/getting-started-snowpark-machine-learning/)」クイックスタートを参照してください。\n\nこのクイックスタートは広範囲をカバーしており、最終的にはSnowpark Pythonストアドプロシージャを使用して堅牢なデータエンジニアリングパイプラインを構築できるようになります。このパイプラインはデータを段階的に処理し、Snowflakeタスクとオーケストレーションされ、CI/CDパイプラインで展開されます。また、Snowflakeの新しい開発者向けCLIツールとVisual Studio Code拡張機能の使用方法も学習します。以下に簡単な概要を図で示します。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\nでは、準備をはじめましょう。\n\n### 前提条件\n\n* Pythonに精通していること\n* DataFrame APIに精通していること\n* Snowflakeに精通していること\n* GitレポジトリとGitHubに精通していること\n\n### 学習する内容\n\nこのクイックスタートでは、次のSnowflake機能について学習します。\n\n* Snowflakeのテーブルフォーマット\n* COPYによるデータの取り込み\n* スキーマ推論\n* データシェアリング/マーケットプレイス（ETLの代わり）\n* 段階的な処理のためのストリーム（CDC）\n* ビューに対するストリーム\n* Python UDF（サードパーティパッケージを使用）\n* Pythonストアドプロシージャ\n* Snowpark DataFrame API\n* Snowpark Pythonプログラマビリティ\n* ウェアハウスの伸縮性（動的スケーリング）\n* Visual Studio Code Snowflakeネイティブ拡張\n* SnowCLI\n* タスク（ストリームトリガーを使用）\n* タスクの監視\n* GitHubアクション（CI/CD）の統合\n\n### 必要なもの\n\n始める前に以下のものが必要です。\n\n* Snowflake\n  * **Snowflakeアカウント**\n  * **アカウント管理者権限で作成されたSnowflakeユーザー**。このユーザーは、Snowflakeでの設定に使用されます。\n  * **同意された****Anaconda利用規約。**[サードパーティパッケージ](https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python-packages.html#getting-started)の「はじめに」セクションを参照してください。\n* Miniconda\n  * **コンピュータにインストールされたMiniconda。**[Miniconda](https://conda.io/miniconda.html)をダウンロードしてインストールします。または、Python 3.8で他のPython環境を使用することもできます。\n* SnowSQL\n  * **コンピュータにインストールされたSnowSQL。**詳細については、[SnowSQLのダウンロードページ](https://developers.snowflake.com/snowsql/)にアクセスし、「[SnowSQLのインストール](https://docs.snowflake.com/ja/user-guide/snowsql-install-config.html)」ページを参照してください。\n* Git\n  * **コンピュータにインストールされたGit。**詳細については、「[はじめに - Gitのインストール](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)」ページを参照してください。\n  * **ユーザー名とメールアドレスが設定されたGit**。まだ設定していない場合は、ローカルコンピュータで[Gitのユーザー名](https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git#setting-your-git-username-for-every-repository-on-your-computer)と[メールアドレスを設定](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address#setting-your-email-address-for-every-repository-on-your-computer)してください。\n* Visual Studio Codeと必要な拡張機能\n  * **コンピュータにインストールされたVisual Studio Code**。ダウンロードページへのリンクについては、[Visual Studio Code](https://code.visualstudio.com/)のホームページを確認してください。\n  * **インストールされたPython拡張機能。**VS Codeの「拡張機能」ペインで「Python」拡張機能を検索し、（Microsoftから）インストールします。\n  * **インストールされたSnowflake拡張機能。**VS Codeの「拡張機能」ペインで「Snowflake」拡張機能を検索し、（Snowflakeから）インストールします。\n* ラボのレポジトリがフォークされ、ローカルにクローンされているGitHubアカウント\n  * **GitHubアカウント**。まだGitHubアカウントを持っていない場合は、無料で作成できます。はじめに、[Join GitHub](https://github.com/signup)ページをご覧ください。\n\n### 構築するもの\n\nこのクイックスタートでは、次のことを実行します。\n\n* スキーマ推論を使用してParquetデータをSnowflakeにロードする\n* Snowflakeマーケットプレイスデータへのアクセスを設定する\n* 温度を変換するPython UDFを作成する\n* Pythonストアドプロシージャを使用してデータエンジニアリングパイプラインを作成し、データを段階的に処理する\n* パイプラインをタスクとオーケストレーションする\n* Snowsightでパイプラインをモニタリングする\n* Snowpark PythonストアドプロシージャをCI/CDパイプラインで展開する\n\n\u003C!-- ------------------------ --\u003E\n## クイックスタート設定\n\n\n### クイックスタート用レポジトリのフォークとクローン\n\nGitHubアカウントでこのクイックスタート用レポジトリのフォークを作成する必要があります。[Snowpark Python関連のGitHubレポジトリを含むデータエンジニアリングパイプライン](https://github.com/Snowflake-Labs/sfguide-data-engineering-with-snowpark-python)にアクセスし、右上の「フォーク」ボタンをクリックします。必須フィールドに入力し、「フォークを作成」をクリックします。\n\nデフォルトでは、GitHubアクションはフォークしたレポジトリで定義されているワークフロー（またはCI/CDパイプライン）を無効にします。このレポジトリには、Snowpark Python UDFとストアドプロシージャを展開するワークフローが含まれています。このワークフローは後で使用します。そのため、現時点では、GitHubでフォークしたレポジトリを開き、ページ中央上部の「`Actions`」タブをクリックして、緑の「`I understand my workflows, go ahead and enable them`」ボタンをクリックすることで、このワークフローを有効にします。\n\n![assets/github-actions-activate.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/github-actions-activate.png)\n次に、新しくフォークしたレポジトリをローカルコンピュータにクローンする必要があります。新しいGitレポジトリの接続の詳細については、レポジトリを開き、ページ上部付近にある緑色の「コード」アイコンをクリックして「HTTPS」リンクをコピーします。\n\n![assets/git_repo_url.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/git_repo_url.png)\nそのリンクをVS Codeで使用して、コンピュータにレポジトリをクローンします。詳細については、「[Visual Studio CodeでGitHubレポジトリをクローンして使用する](https://learn.microsoft.com/en-us/azure/developer/javascript/how-to/with-visual-studio-code/clone-github-repository)」の手順に従ってください。必要に応じて、次のコマンドを実行して、コマンドラインからレポジトリをクローンすることもできます。\n\n```bash\ngit clone \u003Cyour-forked-repo-url\u003E\ncd sfguide-data-engineering-with-snowpark-python/\n```\n\nフォークしたレポジトリがローカルコンピュータにクローンされたら、そのフォルダをVS Codeで開きます。\n\n### 認証情報の設定\n\nこのクイックスタートでは、[SnowSQLコマンドラインクライアント](https://docs.snowflake.com/ja/user-guide/snowsql.html)を直接使用しませんが、`~/.snowsql/config`にあるSnowSQL構成ファイルにSnowflake接続の詳細を保存します。SnowSQL構成ファイルが存在しない場合は、空のファイルを作成してください。\n\n次のセクションを`~/.snowsql/config`ファイルに追加して、このラボ用のSnowSQL構成を作成します（accountname、username、passwordを実際の値に置き換えます）。\n\n```\n[connections.dev]\naccountname = myaccount\nusername = myusername\npassword = mypassword\nrolename = HOL_ROLE\nwarehousename = HOL_WH\ndbname = HOL_DB\n```\n\n**注意：**SnowCLIツール（ひいてはこのクイックスタート）は、現在のところキーペア認証では機能しません。共有SnowSQL構成ファイルからユーザー名とパスワードの詳細を取得するだけです。\n\n### Anaconda環境の作成\n\n提供された`conda_env.yml`ファイルを使用して、このラボ用のconda環境を作成してアクティブにします。ローカルのフォークしたレポジトリのルートにあるターミナルから次のコマンドを実行します。\n\n```bash\nconda env create -f conda_env.yml\nconda activate pysnowpark\n```\n\n\u003C!-- ------------------------ --\u003E\n## Snowflakeの設定\n\n\n### VS Code用のSnowflake拡張機能\n\nSnowflakeに対してさまざまな方法（Snowsight UI、SnowSQLなど）でSQLクエリを実行できますが、このクイックスタートではVS Code用のSnowflake拡張機能を使用します。SnowflakeのVS Code用ネイティブ拡張機能の概要については、[VS CodeマーケットプレイスのSnowflake拡張機能ページ](https://marketplace.visualstudio.com/items?itemName=snowflake.snowflake-vsc)を参照してください。\n\n### スクリプトの実行\n\nこのクイックスタートでSnowflakeに必要なすべてのオブジェクトを設定するには、`steps/01_setup_snowflake.sql`スクリプトを実行する必要があります。\n\nまず、VS Codeの左側のナビゲーションバーにあるSnowflake拡張機能をクリックします。次に、アカウント管理者権限を持つユーザーでSnowflakeアカウントにログインします。Snowflakeにログインしたら、左側のナビゲーションバーにあるファイルエクスプローラーに戻って、VS Codeで`steps/01_setup_snowflake.sql`スクリプトを開きます。\n\nこのスクリプト内のすべてのクエリを実行するには、エディタウィンドウの右上にある「すべてのステートメントを実行」ボタンを使用します。または、複数のチャンクに分けて実行したい場合は、実行するクエリをハイライトしてCMD/CTRL+Enterキーを押します。\n\n\u003C!-- ------------------------ --\u003E\n## 未加工ファイルのロード\n\n\nこのステップでは、未加工のTasty Bytes POSデータとカスタマーロイヤルティデータを、`s3://sfquickstarts/data-engineering-with-snowpark-python/`にある未加工のParquetファイルから、Snowflakeの`RAW_POS`スキーマと`RAW_CUSTOMER`スキーマにロードします。さらに、Snowpark Python APIを使用して、ノートパソコンからPythonでこのプロセスをオーケストレーションします。これは、コンテキストの中では、データフローの概要のステップ**#2**に当たります。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\n### スクリプトの実行\n\n未加工データをロードするには、`steps/02_load_raw.py`スクリプトを実行します。これはVS Codeでいくつかの方法で実行できます。ターミナルから実行することも、VS Codeで直接実行することもできます。このデモでは、ターミナルからPythonスクリプトを実行する必要があります。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -\u003E 「新しいターミナル」）、`pysnowpark` conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\n\n```bash\ncd steps\npython 02_load_raw.py\n```\n\nこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\n\n### ローカルでのSnowpark Pythonの実行\n\nこのステップでは、ノートパソコンからローカルでSnowpark Pythonコードを実行します。スクリプトの下部に、ローカルデバッグに使用するコードブロックがあります（`if __name__ == \"__main__\":`ブロックの下）。\n\n```python\n# For local debugging\nif __name__ == \"__main__\":\n    # Add the utils package to our path and import the snowpark_utils function\n    import os, sys\n    current_dir = os.getcwd()\n    parent_dir = os.path.dirname(current_dir)\n    sys.path.append(parent_dir)\n\n    from utils import snowpark_utils\n    session = snowpark_utils.get_snowpark_session()\n\n    load_all_raw_tables(session)\n#    validate_raw_tables(session)\n\n    session.close()\n```\n\nここでいくつか注意すべき点があります。まず、Snowparkセッションは`utils/snowpark_utils.py`モジュールで作成されます。このモジュールには認証情報を取得するための複数のメソッドがあり、このクイックスタートでは、`~/.snowsql/config`にあるSnowSQL構成ファイルから取得します。詳細については、[utils/snowpark_utils.pyモジュール](https://github.com/Snowflake-Labs/sfguide-data-engineering-with-snowpark-python/blob/main/utils/snowpark_utils.py)のコードを参照してください。\n\n次に、Snowparkセッションを取得した後、手間のかかる作業を行う`load_all_raw_tables(session)`メソッドを呼び出します。次のいくつかのセクションでは、主要な部分について説明します。\n\n最後に、このクイックスタートのほぼすべてのPythonスクリプトには、ローカルデバッグブロックが含まれています。後でSnowpark PythonストアドプロシージャやUDFを作成しますが、それらのPythonスクリプトにも同様のブロックがあります。そのため、このパターンを理解することが重要です。\n\n### Snowflakeで起こったことの確認\n\nSnowflakeの[クエリ履歴](https://docs.snowflake.com/ja/user-guide/ui-snowsight-activity.html#query-history)は非常に強力な機能で、Snowflakeアカウントに対して実行されたすべてのクエリを、どのツールやプロセスがそれを開始したかに関係なくログに記録します。これは、クライアントツールやAPIを使用する場合に特に役立ちます。\n\n先ほど実行したPythonスクリプトは、ローカルで少量の作業を行いました。基本的には、各テーブルをループし、データをロードするためのコマンドをSnowflakeに発行することで、プロセスをオーケストレーションするだけです。一方、手間のかかる作業はすべてSnowflake内部で実行されました。このプッシュダウンはSnowpark APIの特徴であり、これによってSnowflakeのスケーラビリティとコンピューティングパワーを活用できるようになります。\n\nSnowflakeアカウントにログインし、Snowpark APIによって生成されたSQLを簡単に見てみましょう。これにより、APIが行っていることに関する理解が深まり、問題が発生した場合のデバッグに役立ちます。\n\n![assets/query_history_sproc.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/query_history_sproc.png)\n### スキーマ推論\n\nSnowflakeの非常に便利な機能の1つに、作業したいステージのファイルのスキーマを推論する機能があります。これは、SQLでは[`INFER_SCHEMA()`](https://docs.snowflake.com/ja/sql-reference/functions/infer_schema.html)関数で実行されます。Snowpark Python APIでは、`session.read()`メソッドを呼び出すと自動的に実行されます。コードスニペットは次のとおりです。\n\n```python\n    # we can infer schema using the parquet read option\n    df = session.read.option(\"compression\", \"snappy\") \\\n                            .parquet(location)\n```\n\n### COPYによるデータの取り込み\n\nデータをSnowflakeテーブルにロードするために、DataFrameに対して`copy_into_table()`メソッドを使用します。このメソッドは、推論されたスキーマ（存在しない場合）を使用してSnowflakeでターゲットテーブルを作成し、高度に最適化されたSnowflake `COPY INTO \u003Ctable\u003E`[コマンド](https://docs.snowflake.com/ja/sql-reference/sql/copy-into-table.html)を呼び出します。コードスニペットは次のとおりです。\n\n```python\n    df.copy_into_table(\"{}\".format(tname))\n```\n\n### Snowflakeのテーブルフォーマット\n\nSnowflakeの大きな利点の1つは、ファイルベースのデータレイクを管理する必要がなくなることです。Snowflakeは最初からこの目的のために設計されました。このステップでは、未加工データを構造化されたSnowflake管理テーブルにロードしています。しかし、Snowflakeテーブルは構造化データおよび半構造化データをネイティブにサポートでき、Snowflakeの成熟したクラウドテーブルフォーマット（Hudi、Delta、Icebergよりも前から存在しています）に保存されます。\n\nSnowflakeにロードされたデータは安全に保存および管理されます。未加工ファイルの保護や管理について心配する必要はありません。さらに、データは、未加工データであろうと構造化データであろうと、SnowflakeでSQLまたは好みの言語を使用して変換およびクエリできます。Sparkなどのコンピュートサービスを別途管理する必要はありません。\n\nこれはSnowflakeユーザーにとって大きなメリットです。\n\n### ウェアハウスの伸縮性（動的スケーリング）\n\nSnowflakeでは、データの処理に使用する言語（SQL、Python、Java、Scala、Javascriptなど）に関係なく、ユーザー定義のコンピュートクラスタは[仮想ウェアハウス](https://docs.snowflake.com/ja/user-guide/warehouses.html)の1種類のみです。このため、Snowflakeでのデータ操作が非常にシンプルになります。また、データのガバナンスはコンピュートクラスタから完全に分離されています。つまり、ウェアハウスの設定や使用する言語に関係なく、Snowflakeのガバナンスをくぐり抜けることはできません。\n\nまた、これらの仮想ウェアハウスは、ほとんどの規模のウェアハウスで1秒以内に動的にスケーリングできます。つまり、コードのセクションを短時間で実行するために、コード内でコンピュート環境のサイズを動的に変更して容量を増やした後、再度動的にサイズを変更して容量を減らすことができます。また、秒単位で課金されるため（最低60秒）、コードのセクションを短時間で実行するために追加料金を支払う必要はありません。\n\nどれほど簡単か見てみましょう。コードスニペットは次のとおりです。\n\n```python\n    _ = session.sql(\"ALTER WAREHOUSE HOL_WH SET WAREHOUSE_SIZE = XLARGE WAIT_FOR_COMPLETION = TRUE\").collect()\n\n    # Some data processing code\n\n    _ = session.sql(\"ALTER WAREHOUSE HOL_WH SET WAREHOUSE_SIZE = XSMALL\").collect()\n```\n\n最初の`ALTER WAREHOUSE`ステートメントに`WAIT_FOR_COMPLETION`パラメータが含まれていることに注意してください。このパラメータを`TRUE`に設定すると、すべてのコンピューティングリソースがサイズ変更されて準備が整うまで、`ALTER WAREHOUSE`コマンドの戻りがブロックされます。このようにして、クラスターでデータを処理する前にクラスター全体が利用可能であることを確認します。\n\nこのクイックスタートではこのパターンをあと数回使用するため、十分に理解しておくことが重要です。\n\n\u003C!-- ------------------------ --\u003E\n## 気候データのロード\n\n\nこのステップでは、未加工の気象データをSnowflakeに「ロード」します。しかし、ここでは「ロード」という言葉は実際には正しくありません。Snowflake独自のデータシェアリング機能を使用しているため、実際にはカスタムETLプロセスでデータをSnowflakeアカウントにコピーする必要はありません。代わりに、SnowflakeマーケットプレイスでWeather Sourceが共有する気象データに直接アクセスできます。これは、コンテキストの中では、データフローの概要のステップ**#3**に当たります。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\n### Snowflakeマーケットプレイス\n\nWeather Sourceは、世界の気象および気候データを提供するリーディングプロバイダーであり、同社のOnPoint Product Suiteは、企業がさまざまな業界の広範なユースケースに適用できる有意義で実用的なインサイトを迅速に生成するために必要な気象および気候データを提供しています。次の手順に従って、SnowflakeマーケットプレイスのWeather Sourceから`Weather Source LLC: frostbyte`フィードに接続しましょう。\n\n* Snowsightにログインする\n* 左側のナビゲーションバーにある`Marketplace`リンクをクリックする\n* 検索ボックスに「Weather Source LLC: frostbyte」と入力し、「返す」をクリックする\n* 「Weather Source LLC: frostbyte」のリストタイルをクリックする\n* 青の「取得」ボタンをクリックする\n  * 「オプション」ダイアログを展開する\n  * 「データベース名」を「FROSTBYTE_WEATHERSOURCE」（すべて大文字）に変更する\n  * 「HOL_ROLE」ロールを選択して新しいデータベースにアクセスできるようにする\n* 青の「取得」ボタンをクリックする\n\nこれで完了です。今後は何もしなくてもこのデータが最新の状態に保たれます。プロバイダーが代わりにデータを更新します。つまり、データシェアリングでは、プロバイダーが公開したものが何であれ、それを常に見ることができます。素晴らしいと思いませんか。考えてみてください。これまでは、常に最新のサードパーティデータセットにアクセスするためにさまざまなことを行う必要がありましたが、それらがすべて不要になったのです。\n\n### スクリプトの実行\n\n左側のナビゲーションバーにあるファイルエクスプローラーから、VS Codeで`steps/03_load_weather.sql`スクリプトを開き、スクリプトを実行します。Snowflakeマーケットプレイスで共有されたデータへのクエリがいかに簡単であるかに注意してください。Snowflakeの他のテーブルやビューと同じようにアクセスします。\n\n```sql\nSELECT * FROM FROSTBYTE_WEATHERSOURCE.ONPOINT_ID.POSTAL_CODES LIMIT 100;\n```\n\n\u003C!-- ------------------------ --\u003E\n## POSビューの作成\n\n\nこのステップでは、6つの異なるテーブルを結合し、必要な列のみを選択することで、未加工のPOSスキーマを簡素化するビューを作成します。しかし、本当に素晴らしいのは、Snowpark DataFrame APIを使用してそのビューを定義することです。次に、そのビューに対するSnowflakeストリームを作成し、POSテーブルの変更を段階的に処理できるようにします。これは、コンテキストの中では、データフローの概要のステップ**#4**に当たります。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\n### スクリプトの実行\n\nビューとストリームを作成するには、`steps/04_create_pos_view.py`スクリプトを実行します。ステップ2と同様に、ターミナルから実行しましょう。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -\u003E 「新しいターミナル」）、`pysnowpark` conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\n\n```bash\ncd steps\npython 04_create_pos_view.py\n```\n\nこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\n\n### Snowpark DataFrame API\n\n`create_pos_view()`関数で最初に目を引くのは、Snowpark DataFrame APIを使用してSnowflakeビューを定義していることです。ビューに必要なロジックをすべて取り込む最終的なDataFrameを定義したら、Snowparkの`create_or_replace_view()`メソッドを呼び出すだけです。`create_pos_view()`関数の最後の行は次のとおりです。\n\n```python\n    final_df.create_or_replace_view('POS_FLATTENED_V')\n```\n\nSnowpark Python DataFrame APIの詳細については、「[Snowpark PythonでのDataFramesの使用](https://docs.snowflake.com/ja/developer-guide/snowpark/python/working-with-dataframes.html)」ページを参照してください。\n\n### 段階的な処理のためのストリーム（CDC）\n\nSnowflakeを使用すると、段階的なデータの処理が非常に簡単になります。従来、データエンジニアは、テーブル内の新しいレコードのみを処理するために、高基準値（通常は日時列）を追跡する必要がありました。そのため、基準値を追跡してどこかに保存し、ソーステーブルに対するクエリでそれを使用する必要がありました。しかし、Snowflakeストリームでは、手間のかかる作業はすべてSnowflakeが行います。詳細については、「[テーブルストリームを使用した変更追跡](https://docs.snowflake.com/ja/user-guide/streams.html)」ユーザーガイドを参照してください。\n\n必要なのは、ベーステーブルまたはビューに対してSnowflakeで[`STREAM`](https://docs.snowflake.com/ja/sql-reference/sql/create-stream.html)オブジェクトを作成し、Snowflakeの他のテーブルと同様にそのストリームにクエリを実行することだけです。ストリームは、最後に実行したDMLオプション以降に変更されたレコードのみを返します。変更されたレコードを扱いやすくするために、Snowflakeストリームはベーステーブルまたはビュー列とともに次のメタデータ列を提供します。\n\n* METADATA$ACTION\n* METADATA$ISUPDATE\n* METADATA$ROW_ID\n\nこれらのストリームメタデータ列の詳細については、ドキュメントの「[ストリーム列](https://docs.snowflake.com/ja/user-guide/streams-intro.html#stream-columns)」セクションを参照してください。\n\n### ビューに対するストリーム\n\nSnowflakeの段階的な/CDCストリーム機能の優れた点は、ビューに対してストリームを作成できることです。この例では、6つの未加工のPOSテーブルを結合するビューに対してストリームを作成しています。これを行うコードは次のとおりです。\n\n```python\ndef create_pos_view_stream(session):\n    session.use_schema('HARMONIZED')\n    _ = session.sql('CREATE OR REPLACE STREAM POS_FLATTENED_V_STREAM \\\n                        ON VIEW POS_FLATTENED_V \\\n                        SHOW_INITIAL_ROWS = TRUE').collect()\n```\n\nここで、変更されたレコードを見つけるために`POS_FLATTENED_V_STREAM`ストリームにクエリを実行すると、Snowflakeは実際にはビューに含まれる6つのテーブルの中から変更されたレコードを検索します。このような非正規化スキーマに関する段階的な/CDCプロセスを構築しようとしたことがある方であれば、Snowflakeがここで提供する信じられないほどパワフルな機能に感謝することでしょう。\n\n詳細については、ドキュメントの「[ビューに対するストリーム](https://docs.snowflake.com/ja/user-guide/streams-intro.html#streams-on-views)」セクションを参照してください。\n\n\u003C!-- ------------------------ --\u003E\n## 華氏から摂氏への変換UDF\n\n\nこのステップでは、最初のSnowpark Pythonオブジェクトであるユーザー定義関数（UDF）を作成し、Snowflakeに展開します。UDFから始めることは非常に基本的ですが、今後のステップではサードパーティのPythonパッケージを含むように更新します。また、このステップでは新しい開発者コマンドラインツールであるSnowCLIを紹介します。SnowCLIを使用することで、開発者はSnowpark Pythonオブジェクトの構築とSnowflakeへの展開を一貫した方法で行うことができます。SnowCLIの詳細については後述します。これは、コンテキストの中では、データフローの概要のステップ**#5**に当たります。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\n### ローカルでのUDFの実行\n\nUDFをローカルでテストするには、`steps/05_fahrenheit_to_celsius_udf/app.py`スクリプトを実行します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -\u003E 「新しいターミナル」）、`pysnowpark` conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\n\n```bash\ncd steps/05_fahrenheit_to_celsius_udf\npython app.py 35\n```\n\nUDFを開発している間は、VS Codeでローカルに実行するだけです。また、UDFがSnowflakeのデータをクエリする必要がない場合、このプロセスは完全にローカルで実行されます。\n\n### SnowflakeへのUDFの展開\n\nSnowflakeにUDFを展開するには、SnowCLIツールを使用します。SnowCLIツールは、アプリケーションのパッケージ化、Snowflakeステージへのコピー、Snowflakeでのオブジェクトの作成といった手間のかかる作業をすべて行います。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -\u003E 「新しいターミナル」）、`pysnowpark` conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\n\n```bash\ncd steps/05_fahrenheit_to_celsius_udf\nsnow function create\n```\n\nこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\n\n### SnowflakeでのUDFの実行\n\nSnowflakeでUDFを実行するには、いくつかのオプションがあります。SnowflakeのUDFは、次のようにSQLで呼び出すことができます。\n\n```sql\nSELECT ANALYTICS.FAHRENHEIT_TO_CELSIUS_UDF(35);\n```\n\nまた、SnowCLIユーティリティを使用して、次のようにVS CodeのターミナルからUDFを呼び出すこともできます。\n\n```bash\nsnow function execute -f \"fahrenheit_to_celsius_udf(35)\"\n```\n\nこれにより、SnowCLIツールが上記のSQLクエリを生成し、Snowflakeアカウントに対して実行します。\n\n### SnowCLIツールの概要\n\n[SnowCLI](https://github.com/Snowflake-Labs/snowcli)ツールは開発者向けのコマンドラインツールで、コマンドラインから`snow`として実行されます。\n\n\u003E **注意** - [SnowSQL](https://docs.snowflake.com/ja/user-guide/snowsql.html)コマンドラインツールと混同しないでください。これはSnowflakeに接続してSQLクエリを実行し、すべてのDDLおよびDML操作を実行するためのクライアントであり、コマンドラインから`snowsql`として実行されます。\n\nSnowCLIは、次のSnowflakeオブジェクトの開発と展開を簡素化します。\n\n* Snowpark Python UDF\n* Snowpark Pythonストアドプロシージャ\n* Streamlitアプリケーション\n\nこのクイックスタートでは、最初の2つに焦点を当てます。特に、Snowpark Python UDFとストアドプロシージャに関しては、SnowCLIはオブジェクトをSnowflakeに展開するという手間のかかる作業をすべて実行します。次に、SnowCLIのdeployコマンドが実行するステップを簡単にまとめます。\n\n* サードパーティパッケージを処理する\n  * Anacondaチャネルから直接アクセスできるパッケージの場合は、`CREATE PROCEDURE`または`CREATE FUNCTION` SQLコマンドの`PACKAGES`リストに追加します。\n  * 現在Anacondaチャネルで利用できないパッケージの場合は、コードをダウンロードし、プロジェクトzipファイルに追加します。\n* プロジェクトのすべてのファイルを含むzipファイルを作成する\n* そのプロジェクトzipファイルをSnowflakeステージにコピーする\n* Snowflake関数またはストアドプロシージャオブジェクトを作成する\n\nこれにより、対応するSnowflakeデータベースオブジェクトでラップすることを心配せずに、Pythonアプリケーションを開発してテストすることもできるようになります。\n\n### Snowpark Python UDFの詳細\n\nこのステップでは、非常にシンプルなPython UDFをSnowflakeに展開しました。今後のステップでは、サードパーティのパッケージを使用するように更新する予定です。また、SnowCLIコマンドでSnowflakeに展開したため、Snowflakeでオブジェクトを作成するためのSQL DDL構文を気にする必要はありませんでした。ただし、参考までに、「[Python UDFの作成](https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python.html)」開発者ガイドを参照してください。\n\nSnowCLIツールが関数を展開するために生成したSQLクエリは次のとおりです。\n\n```sql\nCREATE OR REPLACE  FUNCTION fahrenheit_to_celsius_udf(temp_f float)\n         RETURNS float\n         LANGUAGE PYTHON\n         RUNTIME_VERSION=3.8\n         IMPORTS=('@HOL_DB.ANALYTICS.deployments/fahrenheit_to_celsius_udftemp_f_float/app.zip')\n         HANDLER='app.main'\n         PACKAGES=();\n```\n\n\u003C!-- ------------------------ --\u003E\n## 注文更新ストアドプロシージャ\n\n\nこのステップでは、最初のSnowpark Pythonストアドプロシージャ（sproc）を作成し、Snowflakeに展開します。このストアドプロシージャは、`HARMONIZED.POS_FLATTENED_V_STREAM`ストリームからの変更をターゲットの`HARMONIZED.ORDERS`テーブルにマージします。これは、コンテキストの中では、データフローの概要のステップ**#6**に当たります。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\n### ローカルでのストアドプロシージャの実行\n\nプロシージャをローカルでテストするには、`steps/06_orders_update_sp/app.py`スクリプトを実行します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -\u003E 「新しいターミナル」）、`pysnowpark` conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\n\n```bash\ncd steps/06_orders_update_sp\npython app.py\n```\n\nストアドプロシージャを開発している間は、VS Codeでローカルに実行するだけです。Pythonコードはノートパソコンでローカルに実行されますが、Snowpark DataFrameコードはSnowflakeアカウントにSQLクエリを発行します。\n\n### Snowflakeへのストアドプロシージャの展開\n\nSnowflakeにストアドプロシージャを展開するには、SnowCLIツールを使用します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -\u003E 「新しいターミナル」）、`pysnowpark` conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\n\n```bash\ncd steps/06_orders_update_sp\nsnow procedure create\n```\n\nこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\n\n### Snowflakeでのストアドプロシージャの実行\n\nSnowflakeでストアドプロシージャを実行するには、いくつかのオプションがあります。Snowflakeのストアドプロシージャは、次のようにSQLで呼び出すことができます。\n\n```sql\nCALL ORDERS_UPDATE_SP();\n```\n\nまた、SnowCLIユーティリティを使用して、次のようにVS CodeのターミナルからUDFを呼び出すこともできます。\n\n```bash\nsnow procedure execute -p \"orders_update_sp()\"\n```\n\nこれにより、SnowCLIツールが上記のSQLクエリを生成し、Snowflakeアカウントに対して実行します。\n\n### Snowpark Pythonストアドプロシージャの詳細\n\nこのステップでは、PythonストアドプロシージャをSnowflakeに展開しました。また、SnowCLIコマンドでSnowflakeに展開したため、Snowflakeでオブジェクトを作成するためのSQL DDL構文を気にする必要はありませんでした。ただし、参考までに、「[Snowpark（Python）でのストアドプロシージャの記述](https://docs.snowflake.com/ja/sql-reference/stored-procedures-python.html)」ガイドを参照してください。\n\nSnowCLIツールがプロシージャを展開するために生成したSQLクエリは次のとおりです。\n\n```sql\nCREATE OR REPLACE  PROCEDURE orders_update_sp()\n         RETURNS string\n         LANGUAGE PYTHON\n         RUNTIME_VERSION=3.8\n         IMPORTS=('@HOL_DB.HARMONIZED.deployments/orders_update_sp/app.zip')\n         HANDLER='app.main'\n         PACKAGES=('snowflake-snowpark-python','toml')\n        EXECUTE AS CALLER;\n```\n\n### Snowpark APIの詳細\n\nこのステップでは、Snowpark DataFrame APIを実際に使用してデータ変換を行います。Snowpark APIは、[Spark SQL API](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/index.html)と同じ機能を提供します。まず、Snowparkセッションオブジェクトを作成する必要があります。PySparkと同様に、これは`Session.builder.configs().create()`メソッドを使って行います。ローカルで実行する場合は、`utils.snowpark_utils.get_snowpark_session()`ヘルパー関数を使用してセッションオブジェクトを作成します。ただし、Snowflakeに展開すると、セッションオブジェクトはSnowflakeによって自動的にプロビジョニングされます。また、Snowpark Pythonストアドプロシージャを構築する場合、契約では、エントリーポイント（またはハンドラー）関数の最初の引数はSnowparkセッションです。\n\n`steps/06_orders_update_sp/app.py`スクリプトで最初に目を引くのは、SQLを使用してSnowflakeにオブジェクトを作成したり、オブジェクトのステータスをチェックしたりする関数がいくつかあることです。Snowpark APIを使用してSnowflakeにSQLステートメントを発行するには、予想どおり、`session.sql()`関数を使用します。次に例を示します。\n\n```python\ndef create_orders_stream(session):\n    _ = session.sql(\"CREATE STREAM IF NOT EXISTS HARMONIZED.ORDERS_STREAM ON TABLE HARMONIZED.ORDERS \\\n                    SHOW_INITIAL_ROWS = TRUE;\").collect()\n```\n\n2番目のポイントは、DataFrameを使用してソースビューからターゲットテーブルに変更をマージする方法です。Snowpark DataFrame APIは、最終的にSnowflakeで`MERGE`コマンドを生成する`merge()`メソッドを提供します。\n\n```python\n    source = session.table('HARMONIZED.POS_FLATTENED_V_STREAM')\n    target = session.table('HARMONIZED.ORDERS')\n\n    # TODO: Is the if clause supposed to be based on \"META_UPDATED_AT\"?\n    cols_to_update = {c: source[c] for c in source.schema.names if \"METADATA\" not in c}\n    metadata_col_to_update = {\"META_UPDATED_AT\": F.current_timestamp()}\n    updates = {**cols_to_update, **metadata_col_to_update}\n\n    # merge into DIM_CUSTOMER\n    target.merge(source, target['ORDER_DETAIL_ID'] == source['ORDER_DETAIL_ID'], \\\n                        [F.when_matched().update(updates), F.when_not_matched().insert(updates)])\n```\n\n繰り返しますが、Snowpark Python DataFrame APIの詳細については、「[Snowpark PythonでのDataFramesの使用](https://docs.snowflake.com/ja/developer-guide/snowpark/python/working-with-dataframes.html)」ページを参照してください。\n\n\u003C!-- ------------------------ --\u003E\n## Daily Cityメトリック更新ストアドプロシージャ\n\n\nこのステップでは、2番目のSnowpark Pythonストアドプロシージャを作成し、Snowflakeに展開します。このストアドプロシージャは、`HARMONIZED.ORDERS`データとWeather Sourceデータを結合して、`ANALYTICS.DAILY_CITY_METRICS`という分析用の最終集計テーブルを作成します。別のSnowflakeストリームを使用して、`HARMONIZED.ORDERS`テーブルからデータを段階的に処理します。また、Snowpark DataFrame `merge()`メソッドを再度使用してデータをマージ/アップサートします。これは、コンテキストの中では、データフローの概要のステップ**#7**に当たります。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\n### ローカルでのストアドプロシージャの実行\n\nプロシージャをローカルでテストするには、`steps/07_daily_city_metrics_update_sp/app.py`スクリプトを実行します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -\u003E 「新しいターミナル」）、`pysnowpark` conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\n\n```bash\ncd steps/07_daily_city_metrics_update_sp\npython app.py\n```\n\nストアドプロシージャを開発している間は、VS Codeでローカルに実行するだけです。Pythonコードはノートパソコンでローカルに実行されますが、Snowpark DataFrameコードはSnowflakeアカウントにSQLクエリを発行します。\n\n### Snowflakeへのストアドプロシージャの展開\n\nSnowflakeにストアドプロシージャを展開するには、SnowCLIツールを使用します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -\u003E 「新しいターミナル」）、`pysnowpark` conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\n\n```bash\ncd steps/07_daily_city_metrics_update_sp\nsnow procedure create\n```\n\nこのコマンドを実行している間、VS Codeでスクリプトを開いてこのページを読み進め、何が起こっているのかを理解してください。\n\n### Snowflakeでのストアドプロシージャの実行\n\nSnowflakeでストアドプロシージャを実行するには、いくつかのオプションがあります。Snowflakeのストアドプロシージャは、次のようにSQLで呼び出すことができます。\n\n```sql\nCALL DAILY_CITY_METRICS_UPDATE_SP();\n```\n\nまた、SnowCLIユーティリティを使用して、次のようにVS CodeのターミナルからUDFを呼び出すこともできます。\n\n```bash\nsnow procedure execute -p \"daily_city_metrics_update_sp()\"\n```\n\nこれにより、SnowCLIツールが上記のSQLクエリを生成し、Snowflakeアカウントに対して実行します。\n\n### データモデリングのベストプラクティス\n\n分析のためにデータをモデリングするときのベストプラクティスは、テーブルのスキーマを明確に定義して管理することです。ステップ2では、Parquetから未加工データをロードする際に、Snowflakeのスキーマ検出機能を利用して、Parquetファイルと同じスキーマのテーブルを作成しました。このステップでは、DataFrame構文でスキーマを明示的に定義し、それを使用してテーブルを作成しています。\n\n```python\ndef create_daily_city_metrics_table(session):\n    SHARED_COLUMNS= [T.StructField(\"DATE\", T.DateType()),\n                                        T.StructField(\"CITY_NAME\", T.StringType()),\n                                        T.StructField(\"COUNTRY_DESC\", T.StringType()),\n                                        T.StructField(\"DAILY_SALES\", T.StringType()),\n                                        T.StructField(\"AVG_TEMPERATURE_FAHRENHEIT\", T.DecimalType()),\n                                        T.StructField(\"AVG_TEMPERATURE_CELSIUS\", T.DecimalType()),\n                                        T.StructField(\"AVG_PRECIPITATION_INCHES\", T.DecimalType()),\n                                        T.StructField(\"AVG_PRECIPITATION_MILLIMETERS\", T.DecimalType()),\n                                        T.StructField(\"MAX_WIND_SPEED_100M_MPH\", T.DecimalType()),\n                                    ]\n    DAILY_CITY_METRICS_COLUMNS = [*SHARED_COLUMNS, T.StructField(\"META_UPDATED_AT\", T.TimestampType())]\n    DAILY_CITY_METRICS_SCHEMA = T.StructType(DAILY_CITY_METRICS_COLUMNS)\n\n    dcm = session.create_dataframe([[None]*len(DAILY_CITY_METRICS_SCHEMA.names)], schema=DAILY_CITY_METRICS_SCHEMA) \\\n                        .na.drop() \\\n                        .write.mode('overwrite').save_as_table('ANALYTICS.DAILY_CITY_METRICS')\n    dcm = session.table('ANALYTICS.DAILY_CITY_METRICS')\n```\n\n### 複雑な集約クエリ\n\n`merge_daily_city_metrics()`関数には、POSとWeather Sourceからのデータを結合して集約するために使用される複雑な集約クエリが含まれています。表現されている一連の複雑な結合と集約、およびステップ#5で作成したSnowpark UDFをどのようにしてさらに活用しているかをご覧ください。\n\n複雑な集約クエリは、Snowparkの`merge()`メソッドを使用して最終分析テーブルにマージされます。まだ確認していない場合は、Snowflakeクエリ履歴をチェックして、Snowpark APIによってどのクエリが生成されたかを確認してください。この場合、Snowpark APIはマージを含むすべての複雑なロジックを取得し、実行する単一のSnowflakeクエリを作成したことがわかります。\n\n\u003C!-- ------------------------ --\u003E\n## ジョブのオーケストレーション\n\n\nこのステップでは、タスクという名前のSnowflakeのネイティブオーケストレーション機能を使用して、新しいSnowparkパイプラインをオーケストレーションします。それぞれのストアドプロシージャに1つずつ、2つのタスクを作成し、それらを連結します。その後、タスクを実行します。これは、コンテキストの中では、データフローの概要のステップ**#8**に当たります。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\n### スクリプトの実行\n\nこれはSQLスクリプトなので、ネイティブのVS Code拡張機能を使用して実行します。`steps/08_orchestrate_jobs.sql`スクリプトをVS Codeで開き、エディタウィンドウの右上にある「すべてのステートメントを実行」ボタンを使用して全体を実行します。\n\nスクリプトを実行している間、VS Codeでスクリプトに目を通し、このページを読み進めて何が起こっているのかを理解してください。\n\n### タスクの実行\n\nこのステップでは、タスクDAGのスケジュールを作成しなかったため、この時点では、DAGは自動的に実行されません。そのため、このスクリプトでは、次のように手動でDAGを実行していることがわかります。\n\n```sql\nEXECUTE TASK ORDERS_UPDATE_TASK;\n```\n\n先ほどこのタスクを実行したときに何が起こったかを確認するには、スクリプトにある次のコメント化されたクエリをハイライトして実行します（CMD/CTRL+Enterキーを使用）。\n\n```sql\nSELECT *\nFROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(\n    SCHEDULED_TIME_RANGE_START=\u003EDATEADD('DAY',-1,CURRENT_TIMESTAMP()),\n    RESULT_LIMIT =\u003E 100))\nORDER BY SCHEDULED_TIME DESC\n;\n```\n\nタスク履歴の出力では、`ORDERS_UPDATE_TASK`タスクがスキップされていることがわかります。`HARMONIZED.POS_FLATTENED_V_STREAM`ストリームにはデータがないため、これは正常な動作です。次のステップで、新しいデータを追加して再度実行します。\n\n### タスクの詳細\n\nタスクは、Snowflakeのネイティブなスケジューリング/オーケストレーション機能です。タスクを使用すると、次のいずれかのタイプのSQLコードを実行できます。\n\n* 単一のSQLステートメント\n* ストアドプロシージャの呼び出し\n* Snowflakeスクリプト開発者ガイドを使用した手続き型ロジック\n\nこのクイックスタートでは、Snowparkストアドプロシージャを呼び出します。2番目のタスクを作成するためのSQL DDLコードは次のとおりです。\n\n```sql\nCREATE OR REPLACE TASK DAILY_CITY_METRICS_UPDATE_TASK\nWAREHOUSE = HOL_WH\nAFTER ORDERS_UPDATE_TASK\nWHEN\n  SYSTEM$STREAM_HAS_DATA('ORDERS_STREAM')\nAS\nCALL ANALYTICS.DAILY_CITY_METRICS_UPDATE_SP();\n```\n\n注意すべき点がいくつかあります。まず、`WAREHOUSE`句でタスク実行時に使用するSnowflake仮想ウェアハウスを指定します。`AFTER`句を使用すると、タスク間の関係を定義できます。この関係の構造は、ほとんどのオーケストレーションツールが提供するように、有向非巡回グラフ（DAG）です。`AS`句では、タスクが実行されたときに何をすべきかを定義できます。この場合は、ストアドプロシージャを呼び出します。\n\n`WHEN`句は非常に便利です。ストリームがデータの段階的な処理を可能にすることで、Snowflakeでどのように機能するかをすでに確認しました。さらに、（多数のテーブルを結合する）ビューに対してストリームを作成する方法と、そのビューに対してストリームを作成してそのデータを段階的に処理する方法も確認しました。この`WHEN`句では、指定されたストリームに新しいデータがある場合にtrueを返すシステム関数`SYSTEM$STREAM_HAS_DATA()`を呼び出しています。`WHEN`句が指定されている場合、仮想ウェアハウスはストリームに新しいデータがある場合のみ起動します。つまり、タスクの実行時に新しいデータがなければ、ウェアハウスは起動せず、課金もされません。処理する新しいデータがある場合にのみ課金されます。素晴らしいと思いませんか。\n\n前述のように、ルートタスクの`SCHEDULE`を定義しなかったため、このDAGは自動的には実行されません。このクイックスタートでは問題ありませんが、実際の状況ではスケジュールを定義します。詳細については、「[タスクの作成](https://docs.snowflake.com/ja/sql-reference/sql/create-task.html)」を参照してください。\n\nタスクの詳細については、「[タスクの紹介](https://docs.snowflake.com/ja/user-guide/tasks-intro.html)」を参照してください。\n\n### タスクのメタデータ\n\nSnowflakeは、ユーザーが実行するほとんどすべてのことのメタデータを保持し、そのメタデータをクエリ（およびクエリに関連するあらゆる種類のプロセスの作成）に利用できるようにします。タスクも同様で、Snowflakeはタスク実行のモニタリングに役立つ豊富なメタデータを保持しています。次に、タスク実行のモニタリングに使用できるSQLクエリのサンプルをいくつか紹介します。\n\n```sql\n-- Get a list of tasks\nSHOW TASKS;\n\n-- Task execution history in the past day\nSELECT *\nFROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(\n    SCHEDULED_TIME_RANGE_START=\u003EDATEADD('DAY',-1,CURRENT_TIMESTAMP()),\n    RESULT_LIMIT =\u003E 100))\nORDER BY SCHEDULED_TIME DESC\n;\n\n-- Scheduled task runs\nSELECT\n    TIMESTAMPDIFF(SECOND, CURRENT_TIMESTAMP, SCHEDULED_TIME) NEXT_RUN,\n    SCHEDULED_TIME,\n    NAME,\n    STATE\nFROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY())\nWHERE STATE = 'SCHEDULED'\nORDER BY COMPLETED_TIME DESC;\n```\n\n### タスクのモニタリング\n\nSnowflakeでは、オペレーションプロセスやモニタリングプロセスを自由に作成できる一方で、Snowsight UIに豊富なタスク監視機能が用意されています。次の手順に従って試してみてください。\n\n1. Snowsightのナビゲーションメニューで、「**データ**」 » 「**データベース」**をクリックします。\n2. 右側のペインで、オブジェクトエクスプローラーを使用して、データベースとスキーマに移動します。\n3. 選択したスキーマで、「**タスク**」を選択して展開します。\n4. タスクを選択します。「**タスクの詳細」**、「**グラフ」**、「**実行履歴」**のサブタブを含むタスク情報が表示されます。\n5. 「**グラフ」**タブを選択します。タスクグラフが表示され、子タスクの階層が表示されます。\n6. 詳細を表示するタスクを選択します。\n\nタスクグラフは次のように表示されます。\n\n![assets/ui-snowsight-task-graph.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/ui-snowsight-task-graph.png)\n次にタスク実行履歴の例を示します。\n\n![assets/ui-snowsight-task-run-history.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/ui-snowsight-task-run-history.png)\n詳細とアカウントレベルのタスク履歴の表示については、「[タスク履歴の表示](https://docs.snowflake.com/ja/user-guide/ui-snowsight-tasks.html)」ドキュメントを参照してください。\n\n\u003C!-- ------------------------ --\u003E\n## 段階的な処理\n\n\nこのステップでは、POS注文テーブルに新しいデータを追加し、エンドツーエンドのパイプライン全体を実行して新しいデータを処理します。このパイプライン全体は、Snowflakeの高度なストリーム/CDC機能を活用してデータを段階的に処理します。これは、コンテキストの中では、データフローの概要のステップ**#9**に当たります。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\n### スクリプトの実行\n\nこれはSQLスクリプトなので、ネイティブのVS Code拡張機能を使用して実行します。`steps/09_process_incrementally.sql`スクリプトをVS Codeで開き、エディタウィンドウの右上にある「すべてのステートメントを実行」ボタンを使用して全体を実行します。\n\n実行中に何が起こっているのか簡単に説明しましょう。ステップ#2と同様に、Parquetから未加工のPOSテーブルにデータをロードします。ステップ#2では、`ORDER_HEADER`と`ORDER_DETAIL`の2022年のデータを除くすべての注文データをロードしました。ここでは、残りのデータをロードします。\n\n今回はPythonではなくSQLを使ってデータをロードしますが、プロセスは同じです。ウェアハウスのサイズを変更します。データをより速くロードできるようにスケールアップし、ロードが完了したらスケールダウンします。新しいデータがロードされたら、タスクDAGを再度実行します。今回は両方のタスクが実行され、新しいデータを処理します。\n\n### タスク履歴の表示\n\n前のステップと同様に、このタスクDAGを実行したときに何が起こったかを確認するには、スクリプトにある次のコメント化されたクエリをハイライトして実行します（CMD/CTRL+Enterキーを使用）。\n\n```sql\nSELECT *\nFROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(\n    SCHEDULED_TIME_RANGE_START=\u003EDATEADD('DAY',-1,CURRENT_TIMESTAMP()),\n    RESULT_LIMIT =\u003E 100))\nORDER BY SCHEDULED_TIME DESC\n;\n```\n\n今回は、`HARMONIZED.POS_FLATTENED_V_STREAM`ストリームに新しいデータがあるため、`ORDERS_UPDATE_TASK`タスクがスキップされないことがわかります。数分後には、`ORDERS_UPDATE_TASK`タスクと`DAILY_CITY_METRICS_UPDATE_TASK`タスクの両方が正常に完了したことがわかります。\n\n### タスクのクエリ履歴\n\nタスクについて理解しておくべき重要なことは、タスクによって実行されたクエリはデフォルトのクエリ履歴UI設定では表示されないということです。先ほど実行されたクエリを表示するには、次の手順を実行する必要があります。\n\n* 後でスケジューリングされたタスクは「システム」として実行されるため、このテーブルの上部にあるフィルターを、ユーザー名を含めて削除します。\n\n![](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/query_history_remove_filter1.png)\n\n* 「フィルター」をクリックし、フィルターオプションの「ユーザータスクによって実行されたクエリ」を追加し、「フィルターを適用」をクリックします。\n\n![](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/query_history_remove_filter2.png)\n\nこれにより、タスクによって実行されたすべてのクエリが表示されます。クエリ履歴でそれぞれのMERGEコマンドを調べ、各タスクで処理されたレコード数を確認します。先ほどパイプライン全体を段階的に処理したことに注意してください。\n\n\u003C!-- ------------------------ --\u003E\n## CI/CDによる展開\n\n\nこのステップでは、`FAHRENHEIT_TO_CELSIUS_UDF()` UDFに変更を加えてから、CI/CDパイプラインで展開します。サードパーティのPythonパッケージを使用するように`FAHRENHEIT_TO_CELSIUS_UDF()` UDFを更新し、それをフォークしたGitHubレポジトリにプッシュし、最後にGitHubアクションワークフローでSnowCLIを使用して展開します。これは、コンテキストの中では、データフローの概要のステップ**#10**に当たります。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\n### 華氏から摂氏への変換UDFの更新\n\nハードコードされた温度変換を`scipy`のパッケージに置き換えます。まず、`steps/05_fahrenheit_to_celsius_udf/app.py`スクリプトにいくつかの変更を加えます。このファイルでは`import`コマンドを追加し、`main()`関数の本文を置き換えます。`steps/05_fahrenheit_to_celsius_udf/app.py`スクリプトをVS Codeで開き、次のセクションを置き換えます。\n\n```python\nimport sys\n\ndef main(temp_f: float) -\u003E float:\n    return (float(temp_f) - 32) * (5/9)\n```\n\n次に置き換えます。\n\n```python\nimport sys\nfrom scipy.constants import convert_temperature\n\ndef main(temp_f: float) -\u003E float:\n    return convert_temperature(float(temp_f), 'F', 'C')\n```\n\n変更を忘れずに保存してください。\n\n2番目の変更は、`requirements.txt`ファイルに`scipy`を追加することです。VS Codeで`steps/05_fahrenheit_to_celsius_udf/requirements.txt`ファイルを開き、`scipy`を含む改行を追加して保存します。\n\n### ローカルでの変更のテスト\n\nUDFをローカルでテストするには、`steps/05_fahrenheit_to_celsius_udf/app.py`スクリプトを実行します。前のステップと同様に、ターミナルから実行します。上部のメニューバーにあるVS Codeでターミナルを開き（「ターミナル」 -\u003E 「新しいターミナル」）、`pysnowpark` conda環境がアクティブであることを確認してから、次のコマンドを実行します（ターミナルでレポジトリのルートが開いていることを前提とします）。\n\n```bash\ncd steps/05_fahrenheit_to_celsius_udf\npip install -r requirements.txt\npython app.py 35\n```\n\n今回は、依存パッケージが確実にインストールされるようにpip installも実行していることに注意してください。関数が正常に実行されたら、CI/CDで展開する準備が整います。\n\n### フォークしたGitHubプロジェクトの設定\n\nGitHubアクションワークフローがSnowflakeアカウントに接続できるようにするには、Snowflakeの認証情報をGitHubに保存する必要があります。GitHubのアクションシークレットは、CI/CDパイプラインで使用する値/変数を安全に保存するために使用されます。このステップでは、SnowCLIで使用するパラメータごとにシークレットを作成します。\n\nレポジトリから、ページ上部付近にある「`Settings`」タブをクリックします。「設定」ページで「`Secrets and variables`」をクリックし、左側のナビゲーションで「`Actions`」タブをクリックします。`Actions`シークレットが選択されているはずです。以下の各シークレットについて、右上にある「`New repository secret`」をクリックし、下記の名前と適切な値（必要に応じて調整）を入力します。\n\n| シークレット名 | シークレット値 |\n|----------------|----------------|\n| SNOWSQL_ACCOUNT | myaccount |\n| SNOWSQL_USER | myusername |\n| SNOWSQL_PWD | mypassword |\n| SNOWSQL_ROLE | HOL_ROLE |\n| SNOWSQL_WAREHOUSE | HOL_WH |\n| SNOWSQL_DATABASE | HOL_DB |\n\u003E \n\u003E \n\u003E **ヒント** - SNOWSQL_ACCOUNTのアカウント名の構成方法の詳細については、「[Snowflake Pythonコネクターインストールガイド](https://docs.snowflake.com/ja/user-guide/python-connector-install.html#step-2-verify-your-installation)」にあるアカウント名の説明を参照してください。\n\nすべてのシークレットの追加が完了すると、ページは次のようになります。\n\n![assets/github-actions-secrets.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/github-actions-secrets.png)\n\u003E \n\u003E \n\u003E **ヒント** - シークレットを管理するためのさらに優れたソリューションとして、[GitHubアクション環境](https://docs.github.com/en/actions/reference/environments)を活用できます。この環境では、シークレットをグループ化し、環境ごとに保護ルールを定義できます。\n\n### フォークしたレポジトリへの変更のプッシュ\n\n変更の準備とテストが完了し、Snowflake認証情報がGitHubに保存されたので、それらをローカルレポジトリにコミットしてから、フォークしたレポジトリにプッシュしましょう。これはコマンドラインから実行できますが、このステップでは簡単にするためにVS Codeを使用して実行します。\n\nまず、左側のナビゲーションバーにある「ソース管理」拡張機能を開くと、変更のある2つのファイルが表示されます。それぞれのファイル名の右側にある`+`（プラス）記号をクリックして、変更をステージングします。次に、「メッセージ」ボックスにメッセージを入力し、青の「`Commit`」ボタンをクリックして変更をローカルにコミットします。ボタンをクリックする前は、次のように表示されます。\n\n![assets/vs_code_repo_commit.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/vs_code_repo_commit.png)\nこの時点では、これらの変更はローカルにコミットされているだけで、GitHubのフォークしたレポジトリにはまだプッシュされていません。これを行うには、青の「`Sync Changes`」ボタンをクリックして、これらのコミットをGitHubにプッシュします。ボタンをクリックする前は、次のように表示されます。\n\n![assets/vs_code_repo_push.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/vs_code_repo_push.png)\n### GitHubアクションワークフローの表示\n\nこのレポジトリには、非常にシンプルなGitHubアクションCI/CDパイプラインがすでに設定されています。このワークフローのコードを確認するには、VS Codeで`.github/workflows/build_and_deploy.yaml`ファイルを開きます。\n\nGitHubのフォークしたレポジトリに変更をプッシュすると、すぐにワークフローが開始されます。結果を見るには、GitHubレポジトリのトップページに戻って次の手順を実行します。\n\n* レポジトリから、ページの中央上部にある「`Actions`」タブをクリックします。\n* 左側のナビゲーションバーで、「`Deploy Snowpark Apps`」というワークフロー名をクリックします。\n* 最新の特定の実行の名前をクリックします（入力したコメントと一致する必要があります）。\n* 実行概要ページで`deploy`ジョブをクリックし、さまざまなステップの出力を参照します。特に、`Deploy Snowpark apps`ステップの出力を確認するとよいでしょう。\n\n![assets/github-actions-run-summary.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/github-actions-run-summary.png)\n`Deploy Snowpark apps`ステップの出力はすでに見覚えがあり、前のステップでSnowCLIを実行したときにVS Codeのターミナルに表示されたものと同じはずです。唯一異なるのは出力の順序ですが、何が起きているかはわかるはずです。\n\n\u003C!-- ------------------------ --\u003E\n## ティアダウン\n\n\nクイックスタートが終了し、クリーンアップしたい場合は、`steps/11_teardown.sql`スクリプトを実行するだけです。これはSQLスクリプトなので、ネイティブのVS Code拡張機能を使用して実行します。`steps/11_teardown.sql`スクリプトをVS Codeで開き、エディタウィンドウの右上にある「すべてのステートメントを実行」ボタンを使用して全体を実行します。\n\n\u003C!-- ------------------------ --\u003E\n## まとめ\n\n\nこのクイックスタートでは多くのことを学習しました。ここまでで、Snowpark Pythonストアドプロシージャを使用して堅牢なデータエンジニアリングパイプラインを構築しました。このパイプラインはデータを段階的に処理し、Snowflakeタスクとオーケストレーションされ、CI/CDパイプラインで展開されます。また、Snowflakeの新しい開発者CLIツールとVisual Studio Code拡張機能の使用方法も学習しました。以下に簡単な要約を図で示します。\n\n![assets/data_pipeline_overview.png](https://www.snowflake.com/content/dam/snowflake-site/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/data_pipeline_overview.png)\nしかし、実際にはSnowparkでできることをほんの少しかじっただけです。これで、Snowpark Pythonを使用して独自のデータエンジニアリングパイプラインを構築するために必要な構成要素と例を入手できたと思います。では、これから何を構築しますか？\n\n### ここまで学んだ内容\n\nこのクイックスタートでは多くのことを学習しましたが、ここではそのハイライトを紹介します。\n\n* Snowflakeのテーブルフォーマット\n* COPYによるデータの取り込み\n* スキーマ推論\n* データシェアリング/マーケットプレイス（ETLの代わり）\n* 段階的な処理のためのストリーム（CDC）\n* ビューに対するストリーム\n* Python UDF（サードパーティパッケージを使用）\n* Pythonストアドプロシージャ\n* Snowpark DataFrame API\n* Snowpark Pythonプログラマビリティ\n* ウェアハウスの伸縮性（動的スケーリング）\n* Visual Studio Code Snowflakeネイティブ拡張\n* SnowCLI\n* タスク（ストリームトリガーを使用）\n* タスクの監視\n* GitHubアクション（CI/CD）の統合\n\n### 関連リソース\n\n最後に、関連リソースを簡単にまとめます。\n\n* [GitHubのソースコード](https://github.com/Snowflake-Labs/sfguide-data-engineering-with-snowpark-python)\n* [Python用Snowpark開発者ガイド](https://docs.snowflake.com/ja/developer-guide/snowpark/python/index.html)\n  * [Python UDFの記述](https://docs.snowflake.com/ja/developer-guide/udf/python/udf-python.html)\n  * [Snowpark（Python）でのストアドプロシージャの記述](https://docs.snowflake.com/ja/sql-reference/stored-procedures-python.html)\n  * [Snowpark PythonでのDataFramesの使用](https://docs.snowflake.com/ja/developer-guide/snowpark/python/working-with-dataframes.html)\n* 関連ツール\n  * [Snowflake Visual Studio Code拡張機能](https://marketplace.visualstudio.com/items?itemName=snowflake.snowflake-vsc)\n  * [SnowCLIツール](https://github.com/Snowflake-Labs/snowcli)\n","title":"Quickstart Article Body","multiValue":false,":type":"text/x-markdown"},"quickstartArticleLogoImage":{"dataType":"string","title":"Quickstart Article Logo Image","multiValue":false,":type":"text/plain"}},"elementsOrder":["quickstartArticleBody","quickstartArticleLogoImage"],":items":{},":itemsOrder":[],"model":"snowflake-site/models/quickstart-article"},"flexible_column_cont":{"id":"flexible-column-container-fcc0a0f6aa","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":{"id":"container-beea091972","layout":"SIMPLE",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"quickstart_last_modi":{"id":"quickstart-last-modified-1b64e1f884","icon":{"id":"icon","icon":"calendar",":type":"snowflake-site/components/icon","appliedCssClassNames":"snowflake-icon-blue"},"lastModifiedDatePrefix":"Updated","lastModifiedDate":"2026-02-12",":type":"snowflake-site/components/quickstart/quickstart-last-modified","appliedCssClassNames":"snowflake-responsive-component-top-padding-small"},"text":{"id":"text-2b4154c9d9","additionalClasses":"qs-disclaimer-text","text":"\u003Cp\u003E\u003Cspan style=\"color: #666;\"\u003EThis content is provided as is, and is not maintained on an ongoing basis. It may be out of date with current Snowflake instances\u003C/span\u003E\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"snowflake-responsive-component-top-padding-small"}},":itemsOrder":["quickstart_last_modi","text"]},"flexible_column_content_container_2":{"id":"container-89b63d9066","layout":"SIMPLE",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{},":itemsOrder":[]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["contentfragment","flexible_column_cont"]},"flexible_column_content_container_2":{"id":"container-d1a8db9de1","layout":"SIMPLE",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"quickstart_table_of_":{"id":"container-376405f3fa","layout":"SIMPLE","isDeveloperGuidesPage":false,":type":"snowflake-site/components/quickstart/quickstart-table-of-content/quickstart-table-of-content-container",":items":{"quickstart_table_of_":{"id":"quickstart-table-of-content-35ecdc381d",":type":"snowflake-site/components/quickstart/quickstart-table-of-content","headings":["\u003Ch2\u003E概要\u003C/h2\u003E","\u003Ch2\u003Eクイックスタート設定\u003C/h2\u003E","\u003Ch2\u003ESnowflakeの設定\u003C/h2\u003E","\u003Ch2\u003E未加工ファイルのロード\u003C/h2\u003E","\u003Ch2\u003E気候データのロード\u003C/h2\u003E","\u003Ch2\u003EPOSビューの作成\u003C/h2\u003E","\u003Ch2\u003E華氏から摂氏への変換UDF\u003C/h2\u003E","\u003Ch2\u003E注文更新ストアドプロシージャ\u003C/h2\u003E","\u003Ch2\u003EDaily Cityメトリック更新ストアドプロシージャ\u003C/h2\u003E","\u003Ch2\u003Eジョブのオーケストレーション\u003C/h2\u003E","\u003Ch2\u003E段階的な処理\u003C/h2\u003E","\u003Ch2\u003ECI/CDによる展開\u003C/h2\u003E","\u003Ch2\u003Eティアダウン\u003C/h2\u003E","\u003Ch2\u003Eまとめ\u003C/h2\u003E"],"fragmentPath":"/content/dam/snowflake-site/ja/content-fragments/quickstarts/data-engineering-pipelines-with-snowpark-python-ja"},"quickstart_button":{"id":"quickstart-button-2b0f5c7a56",":type":"snowflake-site/components/quickstart/quickstart-button","fragmentPath":"/content/dam/snowflake-site/ja/content-fragments/quickstarts/data-engineering-pipelines-with-snowpark-python-ja","appliedCssClassNames":"snowflake-responsive-component-top-padding-none"}},":itemsOrder":["quickstart_table_of_","quickstart_button"]}},":itemsOrder":["quickstart_table_of_"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container"},"markup_editor":{"id":"markup-editor-7e3e084d25","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":{"id":"container-2f7d7ad288","layout":"SIMPLE",":type":"snowflake-site/components/modal/modal-container",":items":{},":itemsOrder":[]},"experiencefragment-footer":{"id":"experiencefragment-3a4da62e48","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/ja/site/footer/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","classNames":"aem-xf",":items":{"root":{"additionalClasses":"sf-footer","id":"container-049c79ce2d","layout":"SIMPLE",":type":"snowflake-site/components/container","appliedCssClassNames":"ui-background-02",":items":{"container_copy_811922734":{"additionalClasses":"sf-footer__inner","gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"flexible_column_cont":"aem-GridColumn aem-GridColumn--default--12"},"id":"container-bed7b6841b","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-container snowflake-responsive-container-inner-padding-small",":items":{"flexible_column_cont":{"id":"flexible-column-container-0e324ab47a","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":{"id":"container-3c156a496c","layout":"SIMPLE",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":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"},"id":"container-4a1f51acbf","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","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"},"id":"container-e14669eb20","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","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"},"id":"container-88955ff20b","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"text":{"id":"text-509127474c","additionalClasses":"sf-footer__newsletter-title","text":"\u003Cp\u003E\u003Cb\u003Eマンスリーニュースレターを購読する\u003C/b\u003E\u003C/p\u003E\r\n\u003Cp\u003ESnowflakeの製品に関する最新情報、専門家の知見、役立つリソースを直接お届けします。\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-d78ae49851","marketoForm":{"edit":false,"formId":"45871","successUrl":null,"hidden":null,"script":null,"values":null},"marketoConfigured":true,"formConfigured":true,"serverInstance":"252-RFO-227.mktoweb.com","munchkinId":"252-RFO-227",":type":"snowflake-site/components/form/marketo-v2"}},":itemsOrder":["text","marketo_v2"]}},":itemsOrder":["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"},"id":"container-9cdcf06f9d","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-responsive-container-inner-padding-medium",":items":{"text":{"id":"text-09e96ff5e0","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003Eプロダクト\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/product/platform/\"\u003Eプラットフォーム\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/product/data-engineering/\"\u003E データエンジニアリング\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/product/analytics/\"\u003E分析\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/product/ai/\"\u003EAI\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/product/applications-and-collaboration/\"\u003Eアプリケーションとコラボレーション\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/pricing-options/\"\u003E料金 \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-7053b23932","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003Eサポート\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/support/\"\u003Eサポート（英語）\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/en/support/\"\u003E優先サポート（英語） \u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://status.snowflake.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003Eステータス（英語）\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"]},"container_copy_copy":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12"},"id":"container-4eec98c127","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"text":{"id":"text-e5bfc93991","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003E業界\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/solutions/industries/advertising-media-entertainment/\"\u003E広告・メディア・エンターテイメント\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/solutions/industries/financial-services/\"\u003E金融サービス\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/solutions/industries/healthcare-and-life-sciences/\"\u003Eヘルスケア・ライフサイエンス\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/solutions/industries/manufacturing/\"\u003E製造\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/solutions/industries/public-sector/\"\u003E 官公庁・公的機関\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/solutions/industries/retail-consumer-goods/\"\u003E小売・消費財\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/solutions/industries/technology/\"\u003E テクノロジー\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"]},"container_copy":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12"},"id":"container-f495ea07f3","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"text":{"id":"text-360e655352","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003E企業情報\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/company/overview/about-snowflake/\"\u003ESnowflakeについて\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/company/overview/leadership-and-board/\"\u003E&nbsp;\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/company/overview/leadership-and-board/\"\u003E \u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/company/overview/leadership-and-board/\"\u003E\u003C/a\u003E\u003Ca href=\"https://careers.snowflake.com/us/en?_ga=2.189098923.1024280027.1746985324-1783381883.1746382047\"\u003E採用情報（英語）\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://investors.snowflake.com/overview/default.aspx\" target=\"_blank\" rel=\"noopener noreferrer\"\u003E投資家情報（英語）\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://trust.snowflake.com/\"\u003Eトラストセンター（英語）\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/brand-guidelines/\"\u003Eブランドガイドライン（英語）\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/contact/\"\u003Eお問い合わせ\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/news/\"\u003Eニュースルーム\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/company/overview/esg/\"\u003EESG（英語）\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/\"\u003Eデータ格差の解消（英語）\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"]},"container_copy_copy_":{"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnClassNames":{"text":"aem-GridColumn aem-GridColumn--default--12"},"id":"container-2825af7ece","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-responsive-container-inner-padding-small",":items":{"text":{"id":"text-89c5b813f3","additionalClasses":"sf-footer__link-group","text":"\u003Cp class=\"sf-footer__column-title\"\u003E学ぶ\u003C/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://snowflake.com/ja/resources/\"\u003Eリソースライブラリ\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/live-demo/?lang=ja\"\u003Eライブデモ\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"/pt_br/fundamentals/\"\u003EAIデータクラウドの基礎 \u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/resources/learn/training/\"\u003Eトレーニング（英語）\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/resources/learn/certifications/\"\u003E認定資格\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://learn.snowflake.com/en/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ESnowflake University（英語）\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/developers/guides/\" target=\"_self\" rel=\"noopener noreferrer\"\u003E開発者ガイド\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://docs.snowflake.com/ja\" target=\"_blank\" rel=\"noopener noreferrer\"\u003Eドキュメント\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"]}},":itemsOrder":["container_1622723482","container","container_copy_copy","container_copy","container_copy_copy_"]}},":itemsOrder":["container"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["flexible_column_cont"]},"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"},"id":"container-ad4b22af48","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","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"},"id":"container-bfe92ab18f","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-container snowflake-responsive-container-inner-padding-small",":items":{"flexible_column_cont":{"id":"flexible-column-container-63720758c2","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":{"id":"container-856fe946e2","layout":"SIMPLE",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":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_1954079702":"aem-GridColumn aem-GridColumn--default--12","markup_editor":"aem-GridColumn aem-GridColumn--default--12"},"id":"container-8ca2bd9522","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","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"},"id":"container-f1f2366794","layout":"RESPONSIVE_GRID","columnCount":12,":type":"snowflake-site/components/container","appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small",":items":{"image":{"id":"image-c8622dee7c","additionalClasses":"sf-footer__logo","alt":"Snowflake logo","imageLink":{"valid":true,"url":"/en/"},"src":"https://www.snowflake.com/content/experience-fragments/snowflake-site/language-masters/ja/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","lazyEnabled":true,"width":"64","height":"64",":type":"snowflake-site/components/image"}},":itemsOrder":["image"]},"text_copy_copy_16360_1954079702":{"id":"text-25b9dfac2b","additionalClasses":"sf-footer__legal-links","text":"\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/legal/privacy/privacy-policy/\"\u003Eプライバシー通知\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/legal/snowflake-site-terms/\"\u003Eサイト利用規約\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://info.snowflake.com/Preference-center.html\"\u003Eメール配信設定\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Cbutton id=\"ot-sdk-btn\" class=\"ot-sdk-show-settings\"\u003Eクッキーの設定\u003C/button\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/legal/privacy/privacy-policy/#12\"\u003E個人情報を共有しない\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/ja/legal/\"\u003E法務関連\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E© 2026 Snowflake Inc. All Rights Reserved\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-7ba5390a25","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_Japan\" 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","cssContent":".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}.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}}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false}},":itemsOrder":["container","text_copy_copy_16360_1954079702","markup_editor"]}},":itemsOrder":["container"]},"isActiveTOC":false,"isBlogPage":false,":type":"snowflake-site/components/flexible-column-container"}},":itemsOrder":["flexible_column_cont"]}},":itemsOrder":["container_112062425"]},"markup_editor_copy":{"id":"markup-editor-7b85cd3393","title":"New css","cssContent":"body:has(.snowflake-skip-to-content[style=\"top:82px;\"]) #subNav,body:has(.snowflake-skip-to-content[style=\"top:90px;\"]) #subNav,body:has(.snowflake-skip-to-content[style=\"top:98px;\"]) #subNav,.pushdown-banner-dismissed #subNav{top:var(--scroll-padding-top) !important;transition:300ms ease top}.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.4}.related-chip-25 .snowflake-content-chip-image{width:48px}.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:hover::after{right:24px;transition:300ms ease right}.related-chip-25 .snowflake-content-chip-content-without-tag{flex-grow:1;padding-right:24px}.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}.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}.language-ja .snowflake-title-v2.dynamic .heading-2-v2 span.snowflake-title-v2-line{font-size:clamp(2.5rem,3.5vw,4rem) !important;line-height:1.2 !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 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}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false}},":itemsOrder":["container_copy_811922734","container_573483281_","markup_editor_copy"]}},":itemsOrder":["root"]},"markup_editor":{"id":"markup-editor-3961dd5973","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":"/ja/developers/guides/data-engineering-pipelines-with-snowpark-python-ja/","locale":"ja"}
  