From 3e3ba9983bfc08260d9dae6ccd5540dbb229335f Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 5 Apr 2024 12:42:18 +0100 Subject: [PATCH 01/45] add --- website/docs/guides/quickstart-sl.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 website/docs/guides/quickstart-sl.md diff --git a/website/docs/guides/quickstart-sl.md b/website/docs/guides/quickstart-sl.md new file mode 100644 index 00000000000..e69de29bb2d From 5b8cf50f0ed9a837cb3d87a9e10c931aef6a90d3 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 5 Apr 2024 15:23:22 +0100 Subject: [PATCH 02/45] updates --- .../use-dbt-semantic-layer/quickstart-sl.md | 100 --------------- website/docs/guides/quickstart-sl.md | 120 ++++++++++++++++++ website/sidebars.js | 4 +- 3 files changed, 122 insertions(+), 102 deletions(-) delete mode 100644 website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md diff --git a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md b/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md deleted file mode 100644 index 371f36c4383..00000000000 --- a/website/docs/docs/use-dbt-semantic-layer/quickstart-sl.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: "Get started with the dbt Semantic Layer" -id: quickstart-sl -description: "Use this guide to build and define metrics, set up the dbt Semantic Layer, and query them using the Semantic Layer APIs." -sidebar_label: "Get started with the dbt Semantic Layer" -tags: [Semantic Layer] -meta: - api_name: dbt Semantic Layer APIs ---- - -import CreateModel from '/snippets/_sl-create-semanticmodel.md'; -import DefineMetrics from '/snippets/_sl-define-metrics.md'; -import ConfigMetric from '/snippets/_sl-configure-metricflow.md'; -import TestQuery from '/snippets/_sl-test-and-query-metrics.md'; -import ConnectQueryAPI from '/snippets/_sl-connect-and-query-api.md'; -import RunProdJob from '/snippets/_sl-run-prod-job.md'; - - - -import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; - - - - - -The dbt Semantic Layer, powered by [MetricFlow](/docs/build/about-metricflow), simplifies defining and using critical business metrics. It centralizes metric definitions, eliminates duplicate coding, and ensures consistent self-service access to metrics in downstream tools. - -MetricFlow, a powerful component of the dbt Semantic Layer, simplifies the creation and management of company metrics. It offers flexible abstractions, SQL query generation, and enables fast retrieval of metric datasets from a data platform. - -Use this guide to fully experience the power of the universal dbt Semantic Layer. Here are the following steps you'll take: - -- [Create a semantic model](#create-a-semantic-model) in dbt Cloud using MetricFlow -- [Define metrics](#define-metrics) in dbt using MetricFlow -- [Test and query metrics](#test-and-query-metrics) with MetricFlow -- [Run a production job](#run-a-production-job) in dbt Cloud -- [Set up dbt Semantic Layer](#set-up-dbt-semantic-layer) in dbt Cloud -- [Connect and query API](#connect-and-query-api) with dbt Cloud - -MetricFlow allows you to define metrics in your dbt project and query them whether in dbt Cloud or dbt Core with [MetricFlow commands](/docs/build/metricflow-commands). - -However, to experience the power of the universal [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl) and query those metrics in downstream tools, you'll need a dbt Cloud [Team or Enterprise](https://www.getdbt.com/pricing/) account. - -import SLCourses from '/snippets/_sl-course.md'; - - - -## Prerequisites - -import SetUp from '/snippets/_v2-sl-prerequisites.md'; - - - -:::tip -New to dbt or metrics? Try our [Jaffle shop example project](https://github.com/dbt-labs/jaffle-sl-template) to help you get started! -::: - -## Create a semantic model - - - -## Define metrics - - - -## Test and query metrics - - - -## Run a production job - - - - - -
- -What’s happening internally? -- Merging the code into your main branch allows dbt Cloud to pull those changes and builds the definition in the manifest produced by the run.
-- Re-running the job in the deployment environment helps materialize the models, which the metrics depend on, in the data platform. It also makes sure that the manifest is up to date.
-- The Semantic Layer APIs pulls in the most recent manifest and allows your integration information to extract metadata from it. -
- -## Set up dbt Semantic Layer - -import SlSetUp from '/snippets/_new-sl-setup.md'; - - - - -## Connect and query API - - - -## Next steps - -- [dbt Semantic Layer FAQs](/docs/use-dbt-semantic-layer/sl-faqs) -- [Set up dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) -- [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations) -- Demo on [how to define and query metrics with MetricFlow](https://www.loom.com/share/60a76f6034b0441788d73638808e92ac?sid=861a94ac-25eb-4fd8-a310-58e159950f5a) -- [Billing](/docs/cloud/billing) diff --git a/website/docs/guides/quickstart-sl.md b/website/docs/guides/quickstart-sl.md index e69de29bb2d..c4345939778 100644 --- a/website/docs/guides/quickstart-sl.md +++ b/website/docs/guides/quickstart-sl.md @@ -0,0 +1,120 @@ +--- +title: "Get started with the dbt Semantic Layer" +id: quickstart-sl +description: "Use this guide to build and define metrics, set up the dbt Semantic Layer, and query them using the Semantic Layer APIs." +sidebar_label: "Get started with the dbt Semantic Layer" +tags: [Semantic Layer] +meta: + api_name: dbt Semantic Layer APIs +icon: 'guides' +hide_table_of_contents: true +tags: ['Semantic Layer','Metrics'] +keywords: ['dbt Semantic Layer','Metrics','dbt Cloud'] +level: 'Intermediate' +recently_updated: true +--- + +import CreateModel from '/snippets/_sl-create-semanticmodel.md'; +import DefineMetrics from '/snippets/_sl-define-metrics.md'; +import ConfigMetric from '/snippets/_sl-configure-metricflow.md'; +import TestQuery from '/snippets/_sl-test-and-query-metrics.md'; +import ConnectQueryAPI from '/snippets/_sl-connect-and-query-api.md'; +import RunProdJob from '/snippets/_sl-run-prod-job.md'; + + + +import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; + + + + + +The dbt Semantic Layer, powered by [MetricFlow](/docs/build/about-metricflow), simplifies defining and using critical business metrics. It centralizes metric definitions, eliminates duplicate coding, and ensures consistent self-service access to metrics in downstream tools. + +MetricFlow, a powerful component of the dbt Semantic Layer, simplifies the creation and management of company metrics. It offers flexible abstractions, SQL query generation, and enables fast retrieval of metric datasets from a data platform. + +## Introduction +In this quickstart guide, you'll learn how to configure the Semantic Layer in dbt Cloud project, with Snowflake as your data warehouse. It will show you how to: + +- Create a new Snowflake worksheet. +- Load sample data into your Snowflake account. +- Connect dbt Cloud to Snowflake. +- Build out an example dbt Cloud project +- Create a semantic model in dbt Cloud using MetricFlow +- Define metrics in dbt using MetricFlow +- Test and query metrics with MetricFlow +- Run a production job in dbt Cloud +- Set up dbt Semantic Layer in dbt Cloud +- Connect and query API with dbt Cloud + +Use this guide to fully experience the power of the universal dbt Semantic Layer. Here are the following steps you'll take: + +- [Create a semantic model](#create-a-semantic-model) in dbt Cloud using MetricFlow +- [Define metrics](#define-metrics) in dbt using MetricFlow +- [Test and query metrics](#test-and-query-metrics) with MetricFlow +- [Run a production job](#run-a-production-job) in dbt Cloud +- [Set up dbt Semantic Layer](#set-up-dbt-semantic-layer) in dbt Cloud +- [Connect and query API](#connect-and-query-api) with dbt Cloud + +MetricFlow allows you to define metrics in your dbt project and query them whether in dbt Cloud or dbt Core with [MetricFlow commands](/docs/build/metricflow-commands). + +However, to experience the power of the universal [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl) and query those metrics in downstream tools, you'll need a dbt Cloud [Team or Enterprise](https://www.getdbt.com/pricing/) account. + +import SLCourses from '/snippets/_sl-course.md'; + + + +## Prerequisites + +import SetUp from '/snippets/_v2-sl-prerequisites.md'; + + + +:::tip +New to dbt or metrics? Try our [Jaffle shop example project](https://github.com/dbt-labs/jaffle-sl-template) to help you get started! +::: + +## Create a semantic model + + + +## Define metrics + + + +## Test and query metrics + + + +## Run a production job + + + + + +
+ +What’s happening internally? +- Merging the code into your main branch allows dbt Cloud to pull those changes and builds the definition in the manifest produced by the run.
+- Re-running the job in the deployment environment helps materialize the models, which the metrics depend on, in the data platform. It also makes sure that the manifest is up to date.
+- The Semantic Layer APIs pulls in the most recent manifest and allows your integration information to extract metadata from it. +
+ +## Set up dbt Semantic Layer + +import SlSetUp from '/snippets/_new-sl-setup.md'; + + + + +## Connect and query API + + + +## Next steps + +- [dbt Semantic Layer FAQs](/docs/use-dbt-semantic-layer/sl-faqs) +- [Set up dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) +- [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations) +- Demo on [how to define and query metrics with MetricFlow](https://www.loom.com/share/60a76f6034b0441788d73638808e92ac?sid=861a94ac-25eb-4fd8-a310-58e159950f5a) +- [Billing](/docs/cloud/billing) diff --git a/website/sidebars.js b/website/sidebars.js index 5e002ff0148..59edba1760b 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -302,7 +302,7 @@ const sidebarSettings = { collapsed: true, items: [ "docs/build/build-metrics-intro", - "docs/build/sl-getting-started", + "guides/quickstart-sl", { type: "category", label: "About MetricFlow", @@ -503,7 +503,7 @@ const sidebarSettings = { link: { type: "doc", id: "docs/use-dbt-semantic-layer/dbt-sl" }, items: [ "docs/use-dbt-semantic-layer/dbt-sl", - "docs/use-dbt-semantic-layer/quickstart-sl", + "guides/quickstart-sl", "docs/use-dbt-semantic-layer/setup-sl", "docs/use-dbt-semantic-layer/exports", "docs/use-dbt-semantic-layer/sl-architecture", From b18010677e46c34193a957a7d419600dbefc2e50 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 5 Apr 2024 16:18:39 +0100 Subject: [PATCH 03/45] updates --- website/docs/guides/quickstart-sl.md | 33 +++++++++++++++++----------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/website/docs/guides/quickstart-sl.md b/website/docs/guides/quickstart-sl.md index c4345939778..b5fe455614d 100644 --- a/website/docs/guides/quickstart-sl.md +++ b/website/docs/guides/quickstart-sl.md @@ -47,14 +47,6 @@ In this quickstart guide, you'll learn how to configure the Semantic Layer in db - Set up dbt Semantic Layer in dbt Cloud - Connect and query API with dbt Cloud -Use this guide to fully experience the power of the universal dbt Semantic Layer. Here are the following steps you'll take: - -- [Create a semantic model](#create-a-semantic-model) in dbt Cloud using MetricFlow -- [Define metrics](#define-metrics) in dbt using MetricFlow -- [Test and query metrics](#test-and-query-metrics) with MetricFlow -- [Run a production job](#run-a-production-job) in dbt Cloud -- [Set up dbt Semantic Layer](#set-up-dbt-semantic-layer) in dbt Cloud -- [Connect and query API](#connect-and-query-api) with dbt Cloud MetricFlow allows you to define metrics in your dbt project and query them whether in dbt Cloud or dbt Core with [MetricFlow commands](/docs/build/metricflow-commands). @@ -66,13 +58,28 @@ import SLCourses from '/snippets/_sl-course.md'; ## Prerequisites -import SetUp from '/snippets/_v2-sl-prerequisites.md'; +- You have a [dbt Cloud](https://www.getdbt.com/signup/) Team or Enterprise account + - Suitable for both Multi-tenant and Single-tenant deployment. Note, Single-tenant accounts should contact their account representative for necessary setup and enablement. +- You have both your production and development environments running [dbt version 1.6 or higher](/docs/dbt-versions/upgrade-dbt-version-in-cloud) or[ Keep on latest version](/docs/dbt-versions/upgrade-dbt-version-in-cloud#keep-on-latest-version). +- You have a [trial Snowflake account.](https://signup.snowflake.com/) + - Select the Enterprise edition: During trial account creation, make sure to choose the Enterprise Snowflake edition so you have ACCOUNTADMIN access. For a full implementation, you should consider organizational questions when choosing a cloud provider. For more information, see [Introduction to Cloud Platforms](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms) in the Snowflake docs. + - Choose a cloud provider and region: Before proceeding, you will need to select a cloud provider. For this setup, all cloud providers and regions will work so choose whichever you’d like. +- Have a basic understanding of SQL and dbt (meaning you either used dbt before or completed the [dbt Fundamentals](https://courses.getdbt.com/collections) course). + +## Create a new Snowflake worksheet + +1. Log in to your trial Snowflake account. +2. In the Snowflake user interface (UI), click **+ Worksheet** in the upper right corner. +3. Select **SQL Worksheet** to create a new worksheet. + +ADD IMAGE HERE + +## Set up your Snowflake Environment +The data used here is stored as CSV files in a public S3 bucket and the following steps will guide you through how to prepare your Snowflake account for that data and upload it. - +1. Create a new virtual warehouse, two new databases (one for raw data, the other for future dbt development), and two new schemas (one for jaffle_shop data, the other for stripe data). -:::tip -New to dbt or metrics? Try our [Jaffle shop example project](https://github.com/dbt-labs/jaffle-sl-template) to help you get started! -::: +To do this, run the following SQL commands one by one. Type them into the Editor of your new Snowflake SQL worksheet to set up your environment. ## Create a semantic model From 5973314a3b1cbeb91ea0e734b94553d6ca34103d Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 5 Apr 2024 16:38:27 +0100 Subject: [PATCH 04/45] updates --- website/docs/guides/quickstart-sl.md | 253 ++++++++++++++++++++++++++- 1 file changed, 251 insertions(+), 2 deletions(-) diff --git a/website/docs/guides/quickstart-sl.md b/website/docs/guides/quickstart-sl.md index b5fe455614d..fff17ae93c9 100644 --- a/website/docs/guides/quickstart-sl.md +++ b/website/docs/guides/quickstart-sl.md @@ -74,13 +74,262 @@ import SLCourses from '/snippets/_sl-course.md'; ADD IMAGE HERE -## Set up your Snowflake Environment +## Set up your Snowflake environment The data used here is stored as CSV files in a public S3 bucket and the following steps will guide you through how to prepare your Snowflake account for that data and upload it. 1. Create a new virtual warehouse, two new databases (one for raw data, the other for future dbt development), and two new schemas (one for jaffle_shop data, the other for stripe data). -To do this, run the following SQL commands one by one. Type them into the Editor of your new Snowflake SQL worksheet to set up your environment. +To do this, run the following SQL commands one by one. Type them into the Editor of your new Snowflake SQL worksheet to set up your environment. +2. Click **Run** in the upper right corner of the UI for each one: + +```sql +-- Create a virtual warehouse named 'transforming' +create warehouse transforming; + +-- Create two databases: one for raw data and another for analytics +create database raw; +create database analytics; + +-- Within the 'raw' database, create two schemas: 'jaffle_shop' and 'stripe' +create schema raw.jaffle_shop; +create schema raw.stripe; +``` + +Now that your environment is set up, you can start loading data into it. You will be working within the raw database, using the `jaffle_shop` and stripe schemas to organize your tables. + +1. Create customer table — First, delete all contents (empty) in the Editor of the Snowflake worksheet. Then, run this SQL command to create the customer table in the `jaffle_shop` schema: + +```sql +create table raw.jaffle_shop.customers +( id integer, + first_name varchar, + last_name varchar +); +``` + +You should see a ‘Table `CUSTOMERS` successfully created.’ message. + +2. Load data — After creating the table, delete all contents in the Editor. Run this command to load data from the S3 bucket into the customer table: + +```sql +copy into raw.jaffle_shop.customers (id, first_name, last_name) +from 's3://dbt-tutorial-public/jaffle_shop_customers.csv' +file_format = ( + type = 'CSV' + field_delimiter = ',' + skip_header = 1 + ); +``` + +You should see a confirmation message after running the command. + +3. Create `orders` table — Delete all contents in the Editor. Run the following command to create… + +```sql +create table raw.jaffle_shop.orders +( id integer, + user_id integer, + order_date date, + status varchar, + _etl_loaded_at timestamp default current_timestamp +); +``` + +You should see a confirmation message after running the command. + +4. Load data — Delete all contents in the Editor, then run this command to load data into the orders table: + +```sql +copy into raw.jaffle_shop.orders (id, user_id, order_date, status) +from 's3://dbt-tutorial-public/jaffle_shop_orders.csv' +file_format = ( + type = 'CSV' + field_delimiter = ',' + skip_header = 1 + ); + +``` + +You should see a confirmation message after running the command. + +5. Create `payment` table — Delete all contents in the Editor. Run the following command to create the payment table: + +```sql +create table raw.stripe.payment +( id integer, + orderid integer, + paymentmethod varchar, + status varchar, + amount integer, + created date, + _batched_at timestamp default current_timestamp +); + +``` + +You should see a confirmation message after running the command. + +6. Load data — Delete all contents in the Editor. Run the following command to load data into the payment table: + +```sql +copy into raw.stripe.payment (id, orderid, paymentmethod, status, amount, created) +from 's3://dbt-tutorial-public/stripe_payments.csv' +file_format = ( + type = 'CSV' + field_delimiter = ',' + skip_header = 1 + ); + +``` + +You should see a confirmation message after running the command. + +7. Verify data — Verify that the data is loaded by running these SQL queries. Confirm that you can see output for each one, like the following confirmation image. + +```sql +select * from raw.jaffle_shop.customers; +select * from raw.jaffle_shop.orders; +select * from raw.stripe.payment; +``` + +ADD IMAGE HERE + +## Connect dbt Cloud to Snowflake + +There are two ways to connect dbt Cloud to Snowflake. The first option is Partner Connect, which provides a streamlined setup to create your dbt Cloud account from within your new Snowflake trial account. The second option is to create your dbt Cloud account separately and build the Snowflake connection yourself (connect manually). If you want to get started quickly, dbt Labs recommends using Partner Connect. If you want to customize your setup from the very beginning and gain familiarity with the dbt Cloud setup flow, dbt Labs recommends connecting manually. + + + + +Using Partner Connect allows you to create a complete dbt account with your [Snowflake connection](/docs/cloud/connect-data-platform/connect-snowflake), [a managed repository](/docs/collaborate/git/managed-repository), [environments](/docs/build/custom-schemas#managing-environments), and credentials. + +1. In the Snowflake UI, click on the home icon in the upper left corner. In the left sidebar, select **Admin**. Then, select **Partner Connect**. Find the dbt tile by scrolling or by searching for dbt in the search bar. Click the tile to connect to dbt. + + + + If you’re using the classic version of the Snowflake UI, you can click the **Partner Connect** button in the top bar of your account. From there, click on the dbt tile to open up the connect box. + + + +2. In the **Connect to dbt** popup, find the **Optional Grant** option and select the **RAW** and **ANALYTICS** databases. This will grant access for your new dbt user role to each database. Then, click **Connect**. + + + + + +3. Click **Activate** when a popup appears: + + + + + +4. After the new tab loads, you will see a form. If you already created a dbt Cloud account, you will be asked to provide an account name. If you haven't created account, you will be asked to provide an account name and password. + + + +5. After you have filled out the form and clicked **Complete Registration**, you will be logged into dbt Cloud automatically. + +6. From your **Account Settings** in dbt Cloud (using the gear menu in the upper right corner), choose the "Partner Connect Trial" project and select **snowflake** in the overview table. Select edit and update the fields **Database** and **Warehouse** to be `analytics` and `transforming`, respectively. + + + + + + + + + +1. Create a new project in dbt Cloud. From **Account settings** (using the gear menu in the top right corner), click **+ New Project**. +2. Enter a project name and click **Continue**. +3. For the warehouse, click **Snowflake** then **Next** to set up your connection. + + + +4. Enter your **Settings** for Snowflake with: + * **Account** — Find your account by using the Snowflake trial account URL and removing `snowflakecomputing.com`. The order of your account information will vary by Snowflake version. For example, Snowflake's Classic console URL might look like: `oq65696.west-us-2.azure.snowflakecomputing.com`. The AppUI or Snowsight URL might look more like: `snowflakecomputing.com/west-us-2.azure/oq65696`. In both examples, your account will be: `oq65696.west-us-2.azure`. For more information, see [Account Identifiers](https://docs.snowflake.com/en/user-guide/admin-account-identifier.html) in the Snowflake docs. + + + + * **Role** — Leave blank for now. You can update this to a default Snowflake role later. + * **Database** — `analytics`. This tells dbt to create new models in the analytics database. + * **Warehouse** — `transforming`. This tells dbt to use the transforming warehouse that was created earlier. + + + +5. Enter your **Development Credentials** for Snowflake with: + * **Username** — The username you created for Snowflake. The username is not your email address and is usually your first and last name together in one word. + * **Password** — The password you set when creating your Snowflake account. + * **Schema** — You’ll notice that the schema name has been auto created for you. By convention, this is `dbt_`. This is the schema connected directly to your development environment, and it's where your models will be built when running dbt within the Cloud IDE. + * **Target name** — Leave as the default. + * **Threads** — Leave as 4. This is the number of simultaneous connects that dbt Cloud will make to build models concurrently. + + + +6. Click **Test Connection**. This verifies that dbt Cloud can access your Snowflake account. +7. If the connection test succeeds, click **Next**. If it fails, you may need to check your Snowflake settings and credentials. + + + + +## Set up a dbt Cloud managed repository +If you used Partner Connect, you can skip to [initializing your dbt project](#initialize-your-dbt-project-and-start-developing) as the Partner Connect provides you with a managed repository. Otherwise, you will need to create your repository connection. + + + +## Initialize your dbt project and start developing +Now that you have a repository configured, you can initialize your project and start development in dbt Cloud: + +1. Click **Start developing in the dbt Cloud IDE**. It might take a few minutes for your project to spin up for the first time as it establishes your git connection, clones your repo, and tests the connection to the warehouse. +2. Above the file tree to the left, click **Initialize your project**. This builds out your folder structure with example models. +3. Make your initial commit by clicking **Commit and sync**. Use the commit message `initial commit`. This creates the first commit to your managed repo and allows you to open a branch where you can add new dbt code. +4. You can now directly query data from your warehouse and execute `dbt run`. You can try this out now: + - Click **+ Create new file**, add this query to the new file, and click **Save as** to save the new file: + ```sql + select * from raw.jaffle_shop.customers + ``` + - In the command line bar at the bottom, enter dbt run and click Enter. You should see a dbt run succeeded message. + +## Building out your project: Adding sources +[Sources](/docs/build/sources) in dbt are the raw data tables you'll transform. By organizing your source definitions, you document the origin of your data. It also makes your project and transformation more reliable, structured, and understandable. Let’s add our sources now. + +You have two options for working with files in the dbt Cloud IDE: + +- Create a new branch (recommended) — Create a new branch to edit and commit your changes. Navigate to **Version Control** on the left sidebar and click **Create branch**. +- Edit in the protected primary branch — If you prefer to edit, format, or lint files and execute dbt commands directly in your primary git branch. The dbt Cloud IDE prevents commits to the protected branch, so you will be prompted to commit your changes to a new branch. + +Name the new branch `build-project`. + +1. Hover over the `models` directory and click the **...**, then select **Create file**. +2. Name the file `staging/jaffle_shop/src_jaffle_shop.yml` , then click **Create**. +3. Copy the following text into the file and click **Save**. + +```yaml +version: 2 + +sources: + - name: jaffle_shop + database: raw + schema: jaffle_shop + tables: + - name: customers + - name: orders +``` + +1. Hover over the `models` directory and click the **...**, then select **Create file**. +2. Name the file `staging/stripe/stripe.yml` , then click **Create**. +3. Copy the following text into the file and click **Save**. + + + + + + + + + + +----- ## Create a semantic model From 598f3727ae88ff01cc5f9ed5c9935a7e37913181 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 5 Apr 2024 17:43:41 +0100 Subject: [PATCH 05/45] updates --- website/docs/guides/quickstart-sl.md | 300 ++++++++++++++++++++++++++- 1 file changed, 297 insertions(+), 3 deletions(-) diff --git a/website/docs/guides/quickstart-sl.md b/website/docs/guides/quickstart-sl.md index fff17ae93c9..0d8550407c2 100644 --- a/website/docs/guides/quickstart-sl.md +++ b/website/docs/guides/quickstart-sl.md @@ -316,9 +316,303 @@ sources: - name: orders ``` -1. Hover over the `models` directory and click the **...**, then select **Create file**. -2. Name the file `staging/stripe/stripe.yml` , then click **Create**. -3. Copy the following text into the file and click **Save**. +In your source file, you can also use the **Generate model** button to create a new model file for each source. This will create a new file in the models directory with the given source name and fill in the SQL code of the source definition. + +4. Hover over the `models` directory and click the **...**, then select **Create file**. +5. Name the file `staging/stripe/stripe.yml` , then click **Create**. +6. Copy the following text into the file and click **Save**. + +```yaml +version: 2 + +sources: + - name: stripe + database: raw + schema: stripe + tables: + - name: payment +``` + +## Building out your project: Adding staging models +[Staging models](/best-practices/how-we-structure/2-staging) are the first transformation step in dbt. They clean and prepare your raw data, making it ready for more complex transformations and analyses. Follow these steps to add your staging models to your project. + +1. Create the file `models/staging/jaffle_shop/stg_customers.sql`. Or you can use the **Generate model** button to create a new model file for each source. +2. Copy the following query into the file and click **Save**. +3. Create the file `models/staging/jaffle_shop/stg_orders.sql` +4. Copy the following query into the file and click **Save**. + +```sql +select + id as order_id, + user_id as customer_id, + order_date, + status +from {{ source('jaffle_shop', 'orders') }} +``` +5. Create the file `models/staging/stripe/stg_payments.sql`. +6. Copy the following query into the file and click **Save**. + +```sql +select + id as payment_id, + orderid as order_id, + paymentmethod as payment_method, + status, + -- amount is stored in cents, convert it to dollars + amount / 100 as amount, + created as created_at + + +from {{ source('stripe', 'payment') }} +``` +7. Enter `dbt run` in the command prompt at the bottom of the screen. You should get a successful run and see the three models. + +## Finishing up building your project +This phase involves creating[ models that serve as the entity layer or concept layer of your dbt project](/best-practices/how-we-structure/4-marts), making the data ready for reporting and analysis. It also includes adding [packages](/docs/build/packages) and the [MetricFlow time spine](/docs/build/metricflow-time-spine) that extend dbt's functionality. + +1. Create the file `models/marts/fct_orders.sql`. +2. Copy the following query into the file and click **Save**. + +```sql +with orders as ( + select * from {{ ref('stg_orders' )}} +), + + +payments as ( + select * from {{ ref('stg_payments') }} +), + + +order_payments as ( + select + order_id, + sum(case when status = 'success' then amount end) as amount + + + from payments + group by 1 +), + + +final as ( + + + select + orders.order_id, + orders.customer_id, + orders.order_date, + coalesce(order_payments.amount, 0) as amount + + + from orders + left join order_payments using (order_id) +) + + +select * from final + +``` + +3. Create the file `models/marts/dim_customers.sql`. +4. Copy the following query into the file and click **Save**. + +```sql +with customers as ( + select * from {{ ref('stg_customers')}} +), +orders as ( + select * from {{ ref('fct_orders')}} +), +customer_orders as ( + select + customer_id, + min(order_date) as first_order_date, + max(order_date) as most_recent_order_date, + count(order_id) as number_of_orders, + sum(amount) as lifetime_value + from orders + group by 1 +), +final as ( + select + customers.customer_id, + customers.first_name, + customers.last_name, + customer_orders.first_order_date, + customer_orders.most_recent_order_date, + coalesce(customer_orders.number_of_orders, 0) as number_of_orders, + customer_orders.lifetime_value + from customers + left join customer_orders using (customer_id) +) +select * from final +``` + +5. Create the file `packages.yml` in your main directory +6. Copy the following text into the file and click **Save**. + +```sql +packages: + - package: dbt-labs/dbt_utils + version: 1.1.1 +``` + +7. Create the file `models/metrics/metricflow_time_spine.sql` in your main directory. +8. Copy the following query into the file and click **Save**. + +```sql +{{ + config( + materialized = 'table', + ) +}} +with days as ( + {{ + dbt_utils.date_spine( + 'day', + "to_date('01/01/2000','mm/dd/yyyy')", + "to_date('01/01/2027','mm/dd/yyyy')" + ) + }} +), +final as ( + select cast(date_day as date) as date_day + from days +) +select * from final + +``` +9. Enter `dbt run` in the command prompt at the bottom of the screen. You should get a successful run popup and also see in the run details that dbt has successfully built five models. + +## Semantic models +The following steps describe how to set up [semantic models](/docs/build/semantic-models). Semantic models contain many object types (such as entities, measures, and dimensions) that allow MetricFlow to construct the queries for metric definitions. + +- Each semantic model will be 1:1 with a dbt SQL/python model +- Each semantic model will contain (at most) 1 primary or natural entity +- Each semantic model will contain zero, one, or many foreign or unique entities used to connect to other entities +- Each semantic model may also contain dimensions, measures, and metrics–the stuff that actually gets fed into and queried by your downstream BI tool. + +Semantic models define how to interpret the data related to orders. It includes entities (like ID columns serving as keys for joining data), dimensions (for grouping or filtering data), and measures (for data aggregations). + +1. Create a new file `models/metrics/fct_orders.yml` +2. Add the following code to that newly created file: + +```sql + semantic_models: + - name: orders + description: | + Order fact table. This table’s grain is one row per order. + model: ref('fct_orders') +``` + +The following section will explain [dimensions](/docs/build/dimensions), [entities](/docs/build/entities), and [measures](/docs/build/measures) in more detail, showing how they each play a role in semantic models. + +- Dimensions allow us to categorize and filter data, making it easier to organize. +- Entities act as unique identifiers (like ID columns) that link data together from different tables. +- Measures help us calculate data, providing valuable insights through aggregation. + +### Entities + +[Entities](/docs/build/semantic-models#entities) are a real-world concept in a business, serving as the backbone of your semantic model. These are going to be id columns (like `order_id`) in our semantic models. These will serve as join keys to other semantic models. + +1. Add entities to your `fct_orders.yml` semantic model file: + +```yaml +semantic_models: + - name: orders + defaults: + agg_time_dimension: order_date + description: | + Order fact table. This table’s grain is one row per order. + model: ref('fct_orders') + entities: # Newly added + - name: order_id + type: primary + - name: customer_id + type: foreign +``` + +### Dimensions + +[Dimensions](/docs/build/semantic-models#entities) are a way to group or filter information based on categories or time. + +1. Add dimensions to your `fct_orders.yml` semantic model file: + +```yaml +semantic_models: + - name: orders + defaults: + agg_time_dimension: order_date + description: | + Order fact table. This table’s grain is one row per order. + model: ref('fct_orders') + entities: + - name: order_id + type: primary + - name: customer_id + type: foreign + dimensions: # Newly added + - name: order_date + type: time + type_params: + time_granularity: day +``` + +### Measures + +[Measures](/docs/build/semantic-models#measures) are aggregations performed on columns in your model. Often, you’ll find yourself using them as final metrics themselves. Measures can also serve as building blocks for more complicated metrics. + +1. Add measures to your `fct_orders.yml` semantic model file: + +```yaml +semantic_models: + - name: orders + defaults: + agg_time_dimension: order_date + description: | + Order fact table. This table’s grain is one row per order. + model: ref('fct_orders') + entities: + - name: order_id + type: primary + - name: customer_id + type: foreign + dimensions: + - name: order_date + type: time + type_params: + time_granularity: day + measures: ## Newly added + - name: order_total + description: The total amount for each order including taxes. + agg: sum + expr: amount + - name: order_count + expr: 1 + agg: sum + - name: customers_with_orders + description: Distinct count of customers placing orders + agg: count_distinct + expr: customer_id + - name: order_value_p99 ## The 99th percentile order value + expr: amount + agg: percentile + agg_params: + percentile: 0.99 + use_discrete_percentile: True + use_approximate_percentile: False +``` + +## Metrics + +[Metrics](/docs/build/metrics-overview) are the language your business users speak and measure business performance. To be technical about it, they are an aggregation over a column in your warehouse that you enrich with dimensional cuts. Once you've created your semantic models, it's time to start referencing those measures you made to create some metrics. There are a few different types of metrics we can configure. + +- **[Conversion metrics](/docs/build/conversion)**: Track when a base event and a subsequent conversion event occur for an entity within a set time period. We won't be going into too much detail about conversion metrics in this course. +- [**Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics):** Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Note that you will need to create the time spine model before you add cumulative metrics. +- [**Derived metrics](/docs/build/metrics-overview#derived-metrics): A**llows you to do calculations on top of metrics. +- [**Simple metrics**](/docs/build/metrics-overview#simple-metrics): Directly reference a single measure, without any additional measures involved. +- [**Ratio metrics](/docs/build/metrics-overview#ratio-metrics):** Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. From 43956d8f4c0685608b742626a414ef4485a18d0e Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 8 Apr 2024 13:50:18 +0100 Subject: [PATCH 06/45] fix --- website/docs/guides/quickstart-sl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/quickstart-sl.md b/website/docs/guides/quickstart-sl.md index 0d8550407c2..0134948202a 100644 --- a/website/docs/guides/quickstart-sl.md +++ b/website/docs/guides/quickstart-sl.md @@ -610,7 +610,7 @@ semantic_models: - **[Conversion metrics](/docs/build/conversion)**: Track when a base event and a subsequent conversion event occur for an entity within a set time period. We won't be going into too much detail about conversion metrics in this course. - [**Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics):** Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Note that you will need to create the time spine model before you add cumulative metrics. -- [**Derived metrics](/docs/build/metrics-overview#derived-metrics): A**llows you to do calculations on top of metrics. +- [**Derived metrics](/docs/build/metrics-overview#derived-metrics): Allows you to do calculations on top of metrics. - [**Simple metrics**](/docs/build/metrics-overview#simple-metrics): Directly reference a single measure, without any additional measures involved. - [**Ratio metrics](/docs/build/metrics-overview#ratio-metrics):** Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. From 3173661e6f97d131b4e27536d90127e6643c3f4c Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 8 Apr 2024 15:08:15 +0100 Subject: [PATCH 07/45] updates --- website/docs/guides/quickstart-sl.md | 160 ++++++++++++++++-- website/snippets/_new-sl-setup.md | 15 +- website/snippets/_sl-connect-and-query-api.md | 19 ++- website/snippets/_sl-run-prod-job.md | 12 +- .../snippets/_sl-test-and-query-metrics.md | 10 +- .../dbt-cloud/semantic-layer/sl-ide-dag.jpg | Bin 0 -> 98726 bytes 6 files changed, 181 insertions(+), 35 deletions(-) create mode 100644 website/static/img/docs/dbt-cloud/semantic-layer/sl-ide-dag.jpg diff --git a/website/docs/guides/quickstart-sl.md b/website/docs/guides/quickstart-sl.md index 0134948202a..66440208d3b 100644 --- a/website/docs/guides/quickstart-sl.md +++ b/website/docs/guides/quickstart-sl.md @@ -20,6 +20,7 @@ import ConfigMetric from '/snippets/_sl-configure-metricflow.md'; import TestQuery from '/snippets/_sl-test-and-query-metrics.md'; import ConnectQueryAPI from '/snippets/_sl-connect-and-query-api.md'; import RunProdJob from '/snippets/_sl-run-prod-job.md'; +import SlSetUp from '/snippets/_new-sl-setup.md'; @@ -608,29 +609,165 @@ semantic_models: [Metrics](/docs/build/metrics-overview) are the language your business users speak and measure business performance. To be technical about it, they are an aggregation over a column in your warehouse that you enrich with dimensional cuts. Once you've created your semantic models, it's time to start referencing those measures you made to create some metrics. There are a few different types of metrics we can configure. -- **[Conversion metrics](/docs/build/conversion)**: Track when a base event and a subsequent conversion event occur for an entity within a set time period. We won't be going into too much detail about conversion metrics in this course. +- **[Conversion metrics](/docs/build/conversion)**: Track when a base event and a subsequent conversion event occur for an entity within a set time period. - [**Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics):** Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Note that you will need to create the time spine model before you add cumulative metrics. - [**Derived metrics](/docs/build/metrics-overview#derived-metrics): Allows you to do calculations on top of metrics. - [**Simple metrics**](/docs/build/metrics-overview#simple-metrics): Directly reference a single measure, without any additional measures involved. - [**Ratio metrics](/docs/build/metrics-overview#ratio-metrics):** Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. +1. Add metrics to your `fct_orders.yml` semantic model file: +```yaml +semantic_models: + - name: orders + defaults: + agg_time_dimension: order_date + description: | + Order fact table. This table’s grain is one row per order + model: ref('fct_orders') + entities: + - name: order_id + type: primary + - name: customer_id + type: foreign + dimensions: + - name: order_date + type: time + type_params: + time_granularity: day + measures: + - name: order_total + description: The total amount for each order including taxes. + agg: sum + expr: amount + - name: order_count + expr: 1 + agg: sum + - name: customers_with_orders + description: Distinct count of customers placing orders + agg: count_distinct + expr: customer_id + - name: order_value_p99 + expr: amount + agg: percentile + agg_params: + percentile: 0.99 + use_discrete_percentile: True + use_approximate_percentile: False +# Newly added +metrics: + # Simple type metrics + - name: "order_total" + description: "Sum of orders value" + type: simple + label: "order_total" + type_params: + measure: order_total + - name: "order_count" + description: "number of orders" + type: simple + label: "order_count" + type_params: + measure: order_count + - name: large_orders + description: "Count of orders with order total over 20." + type: simple + label: "Large Orders" + type_params: + measure: order_count + filter: | + {{ Dimension('order_id__order_total_dim') }} >= 20 + # Ratio type metric + - name: "avg_order_value" + label: "avg_order_value" + description: "average value of each order" + type: ratio + type_params: + numerator: order_total + denominator: order_count + # Cumulative type metrics + - name: "cumulative_order_amount_mtd" + label: "cumulative_order_amount_mtd" + description: "The month to date value of all orders" + type: cumulative + type_params: + measure: order_total + grain_to_date: month + # Derived metric + - name: "pct_of_orders_that_are_large" + label: "pct_of_orders_that_are_large" + description: "percent of orders that are large" + type: derived + type_params: + expr: large_orders/order_count + metrics: + - name: large_orders + - name: order_count +``` +## Add second semantic model to your project +Great job, you've successfully built your first semantic model! It has all the required elements: entities, dimensions, measures, and metrics. +Let’s expand your project's analytical capabilities by adding another semantic model in your other marts model: `dim_customers.yml`. +After setting up your orders model: +1. Create the file `models/metrics/dim_customers.yml`. +2. Copy the following query into the file and click **Save**. +```yaml +semantic_models: + - name: dim_customers + defaults: + agg_time_dimension: most_recent_order_date + description: | + semantic model for dim_customers + model: ref('dim_customers') + entities: + - name: customer + expr: customer_id + type: primary + dimensions: + - name: customer_name + type: categorical + - name: customer_type + type: categorical + - name: first_order_date + type: time + type_params: + time_granularity: day + - name: most_recent_order_date + type: time + type_params: + time_granularity: day + measures: + - name: count_lifetime_orders + description: Total count of orders per customer. + agg: sum + - name: lifetime_spend + agg: sum + description: Gross customer lifetime spend inclusive of taxes. + - name: customers + expr: customer_id + agg: count_distinct +metrics: + - name: "customers" + description: "Count of customers" + type: simple + label: "customers" + type_params: + measure: customers + - name: "customers_with_orders" + label: "customers_with_orders" + description: "Unique count of customers placing orders" + type: simple + type_params: + measure: customers +``` ------ -## Create a semantic model - - - -## Define metrics - - +This semantic model uses simple metrics to focus on customer metrics and emphasizes customer dimensions like name, type, and order dates. It uniquely analyzes customer behavior, lifetime value, and order patterns. ## Test and query metrics @@ -638,10 +775,8 @@ semantic_models: ## Run a production job - -
What’s happening internally? @@ -652,11 +787,8 @@ semantic_models: ## Set up dbt Semantic Layer -import SlSetUp from '/snippets/_new-sl-setup.md'; - - ## Connect and query API diff --git a/website/snippets/_new-sl-setup.md b/website/snippets/_new-sl-setup.md index e7039c8103a..596521eedd6 100644 --- a/website/snippets/_new-sl-setup.md +++ b/website/snippets/_new-sl-setup.md @@ -3,17 +3,17 @@ You can set up the dbt Semantic Layer in dbt Cloud at the environment and projec - You must be part of the Owner group, and have the correct [license](/docs/cloud/manage-access/seats-and-users) and [permissions](/docs/cloud/manage-access/self-service-permissions) to configure the Semantic Layer: * Enterprise plan — Developer license with Account Admin permissions. Or Owner with a Developer license, assigned Project Creator, Database Admin, or Admin permissions. * Team plan — Owner with a Developer license. + * If you are using a free trial dbt Cloud account, you are on a trial of the Team plan as an Owner, so you're good to go. - You must have a successful run in your new environment. :::tip If you've configured the legacy Semantic Layer, it has been deprecated. dbt Labs strongly recommends that you [upgrade your dbt version](/docs/dbt-versions/upgrade-dbt-version-in-cloud) to dbt version 1.6 or higher to use the latest dbt Semantic Layer. Refer to the dedicated [migration guide](/guides/sl-migration) for details. ::: -1. In dbt Cloud, create a new [deployment environment](/docs/deploy/deploy-environments#create-a-deployment-environment) or use an existing environment on dbt 1.6 or higher. - * Note — Deployment environment is currently supported (_development experience coming soon_) - -2. Navigate to **Account Settings** and select the specific project you want to enable the Semantic Layer for. +Now that we've created and successfully run a job in your environment, you're ready to configure the semantic layer. +1. Navigate to **Account Settings** in the navigation menu. +2. Use the sidebar to select your project settings. Select the specific project you want to enable the Semantic Layer for. 3. In the **Project Details** page, navigate to the **Semantic Layer** section, and select **Configure Semantic Layer**. @@ -25,14 +25,13 @@ If you've configured the legacy Semantic Layer, it has been deprecated. dbt Labs -5. Select the deployment environment you want for the Semantic Layer and click **Save**. - -6. After saving it, you'll be provided with the connection information that allows you to connect to downstream tools. If your tool supports JDBC, save the JDBC URL or individual components (like environment id and host). If it uses the GraphQL API, save the GraphQL API host information instead. +2. Select the deployment environment you want for the Semantic Layer and click **Save**. +3. After saving it, you'll be provided with the connection information that allows you to connect to downstream tools. If your tool supports JDBC, save the JDBC URL or individual components (like environment id and host). If it uses the GraphQL API, save the GraphQL API host information instead. 7. Save and copy your environment ID, service token, and host, which you'll need to use downstream tools. For more info on how to integrate with partner integrations, refer to [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations). -8. Return to the **Project Details** page, then select **Generate Service Token**. You will need Semantic Layer Only and Metadata Only [service token](/docs/dbt-cloud-apis/service-tokens) permissions. +8. Return to the **Project Details** page and click the **Generate a [Service Token](/docs/dbt-cloud-apis/service-tokens)** button. Make sure it has Semantic Layer Only and Metadata Only permissions. Name the token and save it. Once the token is generated, you won't be able to view this token again so make sure to record it somewhere safe. Great job, you've configured the Semantic Layer 🎉! diff --git a/website/snippets/_sl-connect-and-query-api.md b/website/snippets/_sl-connect-and-query-api.md index c155af4d11e..b8c95769889 100644 --- a/website/snippets/_sl-connect-and-query-api.md +++ b/website/snippets/_sl-connect-and-query-api.md @@ -1,8 +1,13 @@ -You can query your metrics in a JDBC-enabled tool or use existing first-class integrations with the dbt Semantic Layer. +This section will walk you through how to query your metrics using the Google Sheets integration. You can also query your metrics using: +- [First-class integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations) (such as Tableau, Hex, and more) +- Wth other tools like the [dbt Semantic Layer APIs](/docs/dbt-cloud-apis/sl-api-overview). +- Use [exports](/docs/use-dbt-semantic-layer/exports) to expose tables of metrics and dimensions in your data platform and create a custom integration with tools such as PowerBI, and more. -- You must have a dbt Cloud Team or Enterprise account. Suitable for both Multi-tenant and Single-tenant deployment. - - Single-tenant accounts should contact their account representative for necessary setup and enablement. -- To learn how to use the JDBC or GraphQL API and what tools you can query it with, refer to [dbt Semantic Layer APIs](/docs/dbt-cloud-apis/sl-api-overview). - * To authenticate, you need to [generate a service token](/docs/dbt-cloud-apis/service-tokens) with Semantic Layer Only and Metadata Only permissions. - * Refer to the [SQL query syntax](/docs/dbt-cloud-apis/sl-jdbc#querying-the-api-for-metric-metadata) to query metrics using the API. -- To learn more about the sophisticated integrations that connect to the dbt Semantic Layer, refer to [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations) for more info. You can also use [Exports](/docs/use-dbt-semantic-layer/exports) to expose tables of metrics and dimensions in your data platform and create a custom integration with tools such as PowerBI, and more. +To query your metrics using Google Sheets: +1. Make sure you have a Gmail account. If you don’t already have one, make one at [gmail.com](http://gmail.com/). +2. To set up Google Sheets and query your metrics, follow the detailed instructions on the [Google Sheets integration](/docs/use-dbt-semantic-layer/gsheets) page. +3. Start playing around with it! Query a metric, like `order_total`. Filter it with a dimension, like `order_date`. You can also use the `group_by` parameter to group your metrics by a specific dimension. + +## What's next + +Congratulations 🎉! You've just defined your diff --git a/website/snippets/_sl-run-prod-job.md b/website/snippets/_sl-run-prod-job.md index a637b0b431e..3f58ce5c70e 100644 --- a/website/snippets/_sl-run-prod-job.md +++ b/website/snippets/_sl-run-prod-job.md @@ -1,7 +1,9 @@ Once you’ve defined metrics in your dbt project, you can perform a job run in your deployment environment in dbt Cloud to materialize your metrics. The deployment environment is only supported for the dbt Semantic Layer currently. -1. Select **Deploy** from the top navigation bar. -2. Select **Jobs** to rerun the job with the most recent code in the deployment environment. -3. Your metric should appear as a red node in the dbt Cloud IDE and dbt directed acyclic graphs (DAG). - - +1. In dbt Cloud, create a new [deployment environment](/docs/deploy/deploy-environments#create-a-deployment-environment) or use an existing environment on dbt 1.6 or higher. + * Note — Deployment environment is currently supported (_development experience coming soon_) +2. To create a new environment, navigate to **Deploy** in the navigation menu, select **Environments**, and then select **Create new environment**. +3. Fill in your deployment credentials with your Snowflake username and password. You can name the schema anything you want. Click **Save** to create your new production environment. +4. [Create a new deploy job](/docs/deploy/deploy-jobs#create-and-schedule-jobs) that runs in the environment you just created. Go back to the **Deploy** menu, select **Jobs**, select **Create job**, and click **Deploy job**. +5. Set the job to run a `dbt build` and select the **Generate docs on run** checkbox. +6. Run the job and make sure it runs successfully. diff --git a/website/snippets/_sl-test-and-query-metrics.md b/website/snippets/_sl-test-and-query-metrics.md index 129987661e0..dd76c142114 100644 --- a/website/snippets/_sl-test-and-query-metrics.md +++ b/website/snippets/_sl-test-and-query-metrics.md @@ -10,7 +10,15 @@ You can use the **Preview** or **Compile** buttons in the IDE to run semantic va - + + +You can validate your metrics in the dbt Cloud IDE by selecting the metric you want to validate and viewing it in the **Lineage** tab. + + + + + + This section is for people using the dbt Cloud CLI (support for dbt Cloud IDE is coming soon). With dbt Cloud: diff --git a/website/static/img/docs/dbt-cloud/semantic-layer/sl-ide-dag.jpg b/website/static/img/docs/dbt-cloud/semantic-layer/sl-ide-dag.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ba768c10f9dd30709cf96fc217c8d1f481086f8 GIT binary patch literal 98726 zcmaHT1z42b);1tYcZrmQbVzqdHz*(t0@B?vgb32zok~b|4js}UF?34DkTW#@_@3{3 zzjNM$Ki4xCo9EfF_S);&d)@b1L#V2<3J=>CA+mt8w?ZSUaV@*^h)Tgq5J!$wec zf>K?I37OVX@ypjXTAT-O1X2I^8dgj@M|>Q;Mf~tP#Hi0PQVOjNZzma-ha5%8v!IQF zFP}!T>msgBc{gxnC(jJ-zuS6B14=h7SbP?A)ewM{f8S=Kdihrs7i(cEEhW{L6827}FL_vBv%aPhL4Eo1rI6D{Gl6%K z(*M&O_Lne~g^P=W02`aTyF05pC#$`aIU74aKR?@R4mJ)B7FZ1yXHPp9BM%lkXX<}- z^1uB^nmU^}Svt5_+S|SS-LH|cy{n5b71i&7{{H!woTeU@|2LAI^Z!f>HbJ)EPuSR5 zU$gz)H>|19@4Eu3mL8@y+LD&GF!jL35aH+M68fwDe?9rX5&x~F*8jC+=ip`k_on~$ z=$}nBoK2l1>}_FVx`_PW()>^3e}DKt4Tac#PyOFi@h?69br+^+5mX_zzZXpe_3j;% z6%I}ePEPWTx(ED0CX%WTxth4)Ro)19_|=F zc`Atm{|)VDi3{?s|9RH!SknM{d`zn1%fN({xv`JSfQD8;J9xD5Y$F4pC!UYXC`RpX zCZD775MSxFd1@x$g_(}Xh~hxz{HhioL2rmMh1BY`z1R0aRq7#2y3YzhGWYtA$Ta}EnSC2{o zk88n>NPkq9A~O*BxD;?GwLA#;P@M(5ZEv|prTB!XgASkUmU*LIn=^(T$cjE5nQ zJ68}0+bAbKHW^soIi@(U`BZ1onM?d>K4Hj>4S7vY-~Tj(&HTN>g|Dk{A5%JPCB!6f>7ggmZz{^^(a!CE*rmG~ zGTJd>`4q42*7&07p`ntEh8i_to>a#CVH&Gi*g2KkDc@1O2a8zq8#Re2lj0v;VK@{n zdjIvt`tw=m&qc7>gRyTHoh5@!|1>!a<(#idk^#`UcY>wi1iiqd>tFnAj~N$iS>q5H z6;C5*`D+K&6(QfhyLpZJ{Hxif6x(3 za!Qz0q>Xp4sy=R;zn4=4adBU*scGio;zG*T*Vmb>ZOO4=%5yHW62G>OUvPaQZK#n@ z=WKF&@gJ6@L+x**FR;-WS}3tXHh0EpzIH`iL#ko<)>LWG8JtLz)f-B8UX8{_&xZ`Y zyK(jK^qenKs}XzpDP@)~Fz5@2S%7t$$j}9TeSMzn0+>GE8s#Of?4p{@@4kZ_9nQ)( z7HSafm*{As+)0fkYVqu6uEZHJ^n^w;yUszV-;?=hDOX}hhgw2~{4*W--FB5&ugE_I zd=76OD4bb6lkN!3WU+xj3Maqz02?8WAt9A)U7i3>1y97q#SC{o^=M#3giBy(Bj`E8 zijVt}|7fPb{43v4ZSxN)w<*Fp)(4(shaR>IElo{pSLRu@z+Y32K3hV@v#J?BGpVi+ zz|ow!(Yj^fj5b*7{SNjDIhml_>jnq2MY{97&;|QcZ|2~sA|HwY@4Xtr7p@%2%LlSs zHoNnw+{VQVq{|C+;ZlWBC?iHiq}2bpk{yn;A5Lb~##&d??Mp7cnOf;UWf9v#fhs*W zAiXcVZ0+dO&2IdooNh-DCHX~XyB`-7i45xoCMe!_H&BU>AHOcWF>smFNI9KWZ`r(H zuo(87HrI2V#=yXkN*>MJ`~Kd#smA&KR}GuP0D&fGKKQWr4IPGLH2IP(8yU#Nyl*KV zz_%HUrc>l3J)Ro?Hl+?`o6xQ$>MDznDf~|P%iB&l zP|`2D7O&8bM_V4)%SH+9>tMz}k(EU*E3e!a@ZgQ#)Z~eL4DDAK6SZwUK}ADb+gmpV zhSxVqififX>sNXA%D0{mTF-C@kB={E8hB&AwVlr?Ek&pByMF3>eU)tGYNMi#tg413 z!adZ)Uv+i1c4Kd{UB0yAvyKv%+=O6w54MirH?3Wy!)9o=0ocyF+~?Y<)F>|Y>3!X)oG zbYBWSF;VIKf~&l@yXK#epuXq}^`U2DYalkdkQfpo9kKqIis!g?wcVwA6dxNKs%Zdt zqFaA&E6@xrUtsqbmkT<(#vnPFjUSsO)3hBs=0E9JU};^x8w)OoW)rrWK`Xw|yP~5Vx)ng1BVpIU!b`QR!wBt~lMbLe_3PJgo}O182gT-< zYBPz#&Ss-{D%qcEdNABi%iLG9v6k&;KK2J<26gUn?;lUqjBSiA*s+sK>~ViJY1(TZ z;B#F}>7L0fznIU;=iL8Va;xCKyfQYXGSi9Kdb>v=tDwM1*}ccTb998MfAi|wH?!vY zjrU-f>RO0%DJcs^i42vc41CE)MZu(v1KZ;LxA#a7z3bnGPP%GT@@!qWeok@@*Cm#` zU+6{x?7so6)u@O@xm8t-qc5!dIJ;f}t>o2n8-qD*?S=7)h*H65rsHZoQ=dPJ*I)*G zM!-ssZue&6yCHTkW1$Zz5HY_KDH=&|Rw67^dTy`3u+;3vy*~s3^YHnC*-!wyLGud&-t7%=) z5bu~pPG{q1>&&A)I>|*ahoC?2po^g~F&~6(f8d#+#@jbyqL8hh+;mBqp=Xh2At#Ti zzI#{QBE;D923LRDHb~t!DoV- zP<6EiYRIB<;ck=Ajj$18Mmm7ecPQ~sZI^yeEX=jFsK}lcPy34rZ{-6VMU2o zPE>vTcDFElq_x2JCi4ObP=@!tSqlUc{`43EpjcfWs^FnI_(o)Cp<_VlOv2%To#nIk zYSH2BFog+0!geFf8Z>&uiH_q)D<;Vw?ioT~OjVvX%59Lc&Gp&qT`c2!zf$;4|DOOfPrh$12Uo4AhQxRP>!^T(`hr^JZjBOr9}C(AEO@ zu0JI5jlaK{Pw{NAady-z<*p~zy6%uH6a9Tj`*LgVrE84Ft?TsF&0U5(aPRn7;1Sa0 zQZ0qU)ij7&TT(B4E=o`{YazqXult*(0d?LFV?DQlFIuf1iIYN8k`ohc`&w6{r97?& zWFlWW-~G}(0qt=&TAp4c9a;G_G>~U`?l}gAYHqT)F9!5W{nCHsGhHuD>Qiu7hBO3~ zGBS$YZLciC-c}T-nYo&Ra;k!KRFRc@M(afAo3u#K7Py^2hrA?|cU=k^QKbBfi_#A#QeS+z{jPjZ6Tyz$hrG>(sAX~#Tc@ut4g-dIpOn{r#W#`G4Es{> z`F7%_2sGJl;5F(Yb*Lg=jZb!QgMP*S{f-3(N2-_pf^VVKG~9!P;CZwNU}I=>fPFoy zZGXsEMdXh3otjz+ifg{qt@_w=jEQN$aN1o>aXI=}f|S>WD`>T%{QzL7eeJe&*KpOI zPI0Uvbp3i>Qu=wP(gMZ{E^HDWI}T<}PR>Y8CEE?BbM*b@hX`#^;v~_rRO_A(W!Z_D zwrRVytxjy}+lZ95_N~xh7RmJrP`xxt_wI*;(@I|n1`FV>XFo0V-=02dWmclGWq^=!y z;Bg@|_>SFCtvtDbyjqWz3eR1;;`*l%^5G(+z1~bFYZGgyFdTHE zhn4PQLb{^;`x~4#-7BJ_7owvfpJxU!92}09_B% zYT$KbiN`8z-zk1eN&bQLRFoSFCHd^Qh&)w)p>fYE=x9AxD|y$s!Q3#ka2${7)Azy^ zCaM`L*h%>wltEUfX*A4(xcIK2+*NbId8!^V6DsvVVNB@5Ocm=f6X&?eEZbijeaqJ2-oJ0yf+;05e;YTc|cH-Q;LkQSB{Zh`gK z-d|@l*9AWXL%5-22nm(JNcJt%2haGvH~FEYj_D4wUjOXqD7Yd&4a4=WS=~nkbfI`I z=+$^DV;gtd9eCdzV%MTNsV>`~<>(lC1^%>|0siM{I*yN=aX(n%ahS{>l7QUnUfzt* z@=>t4Z9U>Er2O`X_~9p03LTExUd(%%_8QuY!*CnN`MFwA6!Xx4wE5L2lw-V+ZNv2* z?l<+`XNk6(cCqxmSLyYuxy37DQa#o|Se&jTdt+;R?<6ktrpLN^!z24+y#k-g&w_{x zm0sU`E_M&~x>3UJeb-IrT0yrYqo}k{6jEgkwX5;Gt#IB>1<61J`^Mo$} z^iC&!=pcsg`01w)j_NBU=c;12-QPn{NMhk!)@U9}Ogr-V_PH>qd^G8c%Z)IUxS~Rt zOiTt|sT^QiJMEVxP~?$VyZoE&M*eRu6P62A#{VyqUL0 zEBP!x_%UNo-0zwjexlutP6g7Er1La+*+USogd#~TUN8QyuE)C(BF2i;ka<2tC zMhKfG9LNX^)@Cyr6furw3w=bMQb?BmCqoe_^oNzgnbL0Mb6|9Q5x$$CA6!qa}D^d7{cTDr(x&eQXYW&WD3`=VD(Z92MTNMV*IxizSa zcg-9cT4<2xLBD&i#8^;_eF<|;=9io2t7;I$>ZHBi@%LIKvp84twr%>Azh1L64@DYU zss<(Q7KA0*$_zc|S^6dzGRYrvYZ@33yiX2reg)Byh@Eaw{=$h7U28r%s?h%x(5nA3 z^f@LeAN`VsvSR8h*|<>iEbrkERmLL=1XKbvn|@cQ57xX-P#XG1=MA_MWavwqWs;cN z|NR4qYe-;Xe{U|H_9g&$wpBt)86JkjYv5N#9AH;#kFr}b7n~(1xII6wQ$8p1o`8yW z#et>me$QFx)-O7>vNLUew3;sKkd)ac)qMf81l1*TXMdXaKC;EG{prKaI-c6;#&CAT z2cTlsfbi+l-0aYU(!tl8Rz8EFGeEh1S{u&Z8x^G+b+-3P4#$xZS28F7-(R8T$JITj z4^UBX$~Z(HcfJfDGS3OvUppzx;zqGsPWFMDB4p7H1Fd+s%={0K(3;g=v3+JPNTJk| zzh2In?SEbRr9jBsC#c!>jS^b253$va$oRNj_+hdi*$aNB=Rp`G#xs4L0orvUH>l}s zHBD#R>4BsY&-_sJnd%ExzS$3vV_##jqNZ5zf3OIT9`(_(&)0b66ZYL4k)_<-(Y z{q8q47g()@%Zun6?i)-py(Oqw3rPE*rp#j)+&dvPlXOIfv) z=SAD0RuH>sOsP()virT2;J(RE+Q0X?egb-DP-AcS_N|HWMh0eY+1&Dkr|rh%_1@K2 zqgd@zi5AvLipf}jg7On$Q5&iUdmqb^tDH8W>xcj zreI=5q>-fJ^$$MG1-81*Dg@8Yo1TR?q@bojO52?4K`JBr^Y$@~i#kWP;HDWH&Fr(C zA|6>Hk>>u4UYF5ky6iA|h~mD7JQe1U$d@E90qG@c`>{5knYxPoz5`%V{F4#%MTzR4 zGqtYPp!C;9^z}$G-wgR;rs#XN z0)7#zCn_3!fA*%vd>QGX3_qS_tYWL>RBdQ%tbtIUdBA&A$OoZ3=@(m_k0yvTxLoNj zm}p4AbMuS&Tju>6N}Pdx>-mQJji~%Fai5!yKL6>I_|qziW#m-%&xmqqK<7#<>&XFW z#O{4d!Qp^T-j(+?b4J^|*&Hv%1`XCJhVC~g?y9hbU(M~6RO=_v&hFfHNc8Qqs?^() z(4f$>QE)tG`(a;1R-L){sh>%z4czN#D_a5P89!F_ z@y2bD3hF5(?zV63-_FX_-f3kGvRF5;<+U%hzLuDQ$k>=HLA6#2zl{#zG|cds%LpAL zTBf*<&~WK!0)G**7#LS**EBD`o9T)bVIq(ey}5jH%Mz-x6$Z`lI^X5g#8Ncxa<&$+ z32$_t(*R8~J9(6^Eod4#63-8b;P0`2AK?8j5WE^A_9P7OBCKQ?V3npQ@w6>%E26Pb zj$I_v8%Q&_W4Tmwo5Lrm=y7E@n~}hr+h}t9tI0gQ8o@DZ5H~nQPtMK~2dX}Mv%B09 zo0b{C`cM=BqwFk_mMUIxXh4_MChMuQ0i7X!Tc6|obbyW9G<5H&Vbr_7nUq-fhcRIQ zuCZ~RQqhfjT=A_ej6rl!IXNdCZ_h>{slY;9dT^Qgu@-l7Lu3;t{OZ3XSEci(#)nQZ zRq&jQPTVmAPWiv9)s*VG;Qw@TihWD{QyF+_EFn?J@~X}(USMqFW4j-UZ`Y9ymCn8m zGXeb(zeK3(pSap6;on`W&(>^bYA)ok82HGfTjbZbk=&$FJAy;-thgXF9-{wgR)5D6 z{AUz8Jl1S|fENgroX(npAkWl45aYi&;ZQsn#ot4L9W3+D1N3kI3IdB+)W`&Z{=vEa zEqfFSJkgwc^cJaqvlfgnkD|7Y{S&>84G+p_eYRJ;>8?h^6b4}N!*B@tdz}9$jJqH= z!W}VKDwzu@dD8?XzOFIHhaSYPx&CR^CSn~=VbO%Oq)Y(%wVk#;Bem(%SxqP`m{Mv! zI`?=mMJ%2!=UpPSnFarnREU89k`U{oT~S@7&@$@N7?ArUhMDSbt^Q|$?-?RZaZuR1 z-a`}Bd0K=`c;6z2VueA0XB!sc`c|jtOC~B3j?*S%<3#}|y+GP?IDY)c<+jj3{EjH{ zJheh&q%~@wneWwsCEbzhd5`hq)nTzKJ|4s#rjfmp{@I`MeThe2%4Y?Q+gyzAY5r5f zzoT5R`jQjX-@W^{Fj?v}p{*GQNdmm1;eRlRjv%p}o;7+lW@#x)hC$4&yu4CHDr2VA z^<9)~A7U8YS64jJT_FA8M~4WEJ1gN~_Bzt&?!_kJs3Jy( zU{fDAB`7$dc}}G9_^-#|;u8>PkkIr3t@u3t5Hn**78^aiFmuX;aRn=Y__fJ8VLd(l zRl=RVTKmSWP-$1|;NezrHQw2NG^uZ<$4>46!Rbs}cJl%7CvWKqE82g+QQ#*h zr91htVSOaPH|Z_^m4sG_GCEv`5>+gPHBhKPdVB3+H{ty2*WX6{?**8szrM=DmveEF zY`!v8jc)rH!CV402t{`5b<#I%l6pm-JidgEb5sA#ELR~N8$Ur-tHR^D4h`issBUp= za!JpAp3~kl-}&qW%d?feaGI4CwJ?&ze@)`LTZ$v^K*h?SYLV3-Yv;JD?1yd(#%9yg z3u(~S_emVST3*ci>e6M~xj#huUVIjFbgbI#E78Ya^cGqpCc|uO&YPXYcw<^V+sa04 z=Oof-!u8JiG%|*0Zy$pK=lHV^5Szv}=}=aDy9j$@jc98-QV0d=ipSPr_cj;#49aeM zD*5~?H>rR9+gRKr-Kzs;Adi)n-KTa6+AIOo0fyabO_Qg3Qj6AhTU1Ad29CC?wBhHn zN#=txoU7~0MYHK7#!-)kM{{D4ca{OH1~~Nd@lzQ81n}qMbQ|ZQGX$fB@f#v-xLj3kRlQS~0Y*hpyh`)ozFKinmd3kw@I^16~ zk?`vIP|lPuM3^#x$Zxdg7by=)*N}ys`4$np-^Qh({7509m**erhWVe_#gOAM!9i`7(;JZ8B2^<*=Y;{|)P zF$H4;|XiiQgc7C5?C1l{q<1bKAxY(tq zi7KPEvxa>Uw!Mg}>`(OOBcnG3#X)<`Pp{ud;(FLF*+Vu+UVnglU#j(16T~d~4DlMe z8+ve%VI|D_9Zfrx8Iu4KRoL|OrdwlC2HJkXJ-_ToSxr>>*<2B^Yn0fs2e>21`q{7o z@vHac6Pg@S+j3E~&JCosj?&)Qhimo5;7jVGiT$s)GWbWz;;E6Shm0gL&4aY@j0cu? zT}uP+L^~84EL1ok!Vkn$Y@!6@w&Ep}$b$A<;>siu0qtcSo%};MuPa+{NbBA;CR`1A zs2@xMo<<(AQ4~px=r1jFIExnpvDB6+^GUdtI(lCylOXx%_N8qBgWQ3#bYQ*DUE-8_S zF#p4lon`iuvF~jxo0L@K-*2o>TUOE)rmqvVT*C>#3KDyCHOz%u!lI%SXIpGyc6PpX z`$CkDZp8l0$XeCg%6pS@XFR7V{815(zZT21aDNLs+YvmdF6m z4pQsqcDa(gqbt=|Q5*+4)jL_!g78SM^2>uR?qBJI)Tg$4vh_hi;(>RltJF9VlkP+*A58dfp8ilJ($)^W|rz!jWEDw zo}_N69^uPhn~b{|OP_B|&t!=j2YtQ#CA?A@H?O4VM+WQE-S>nQ0=utMmf8H?9@=u4 zvwrqlDeu!&6-KG~YVb4NP`8CG!C?__rL zHbnU$ESqN2Xu92x{ZD8fJd!KENW{45O#mL?%o!2B#Z z@my%;h>PWRvsEi2e_i}ZEVY4~HhJ$3IhnE0HnYB+tYQOc8dPe*D%zp8EP*zZ=iHQC zAw8PVwo>mqq)iucTVg3%I%fp@xR88d%p_Qp@Seo+r$78XG8#sb?S|g!_O^8t_k^_C zYo&K@8<|kxyS=&_%#k>0lmcWMLr&g#cN6MCJ5;a=~oepWG={wN5YT) zdf`jw7DT(PipE!5I54V9Yt+!h#G7tyw`{Pb|A6@H*?N6C-NtguQKi8K{C@_k|JS?Y zlgM!hra4QXmxlQ}@#gC4hb5XXvtVgSrR2_g49TpyRhH`-GS*&*FP5Ca!;{kK5lvxv z3WXkLX%|BX2Xo0&^e)Wd>h|y7QW|)ia)345RT7x%9it7S8~e)}qGaMtKHgQ$du1^Y zJ8+{&ul{KJu~Lf%AiwF*F~h7~c~Ow+2HeOm(`-@l>HFAwcQaq8bc#8);~=@@66I-m zd6;D`%Hw)>?It~(qM+o21O?7B0%}){mDSRiMW{gP zDdi}akFL#m=p`AH!^e<6FU;LiArq*V97s-}ak3f7@p3uvG50G+3h&s8=xN2QY$FoV zb7666B<|))N!-tbb_-0gUk-cLWCKO!J`eM9Bkjhi2e{oLpMxjy=H?P_2y~?1IF5;b z{x3@OU&$ro@+g7Iq;^7=jA7xgepX_$#zoePi#soM2aJe#TUr)l)~t;#)gnDv&mR`? ziG>%Ty^?xsNqh?w`Y@2NAV0ygQ)`U}ec>|(e3pqL__*p|ZmAW*D@&x|EC9?yqB5W({d{aVZzB#wt(gl`pHXCLe6p{%doG%Kx z+01c1ZfLMqjq5qQ*Ae$~c{j;F;*|buu@bbQLtF~a+hS+L|3DM}o@Fx*hp3a;2!b1) zefsCoP=06A^q8!^{QDsKXCdbvF)F-q8@!FirZRRNox~!W6N@4#dwp~wyz%0yyp`>Yt06Jzvyg;_eO5o=f4hXXoI+;u*%6RVblZ-8>5N)8|818PoCq z8sLdBxEh%9dQs$B^0wMYB>*xs`cG;8sM4MmWnXZIPC;Rh zPPSM6i2prnD0QC>b4 zXu%S({A2eC&ieM3 zt~icXXuns9%wj$s5*0rk1^A(@^ZcyKlg?yh*+o&ijbQs?KZJd0Ay;X@86t_NeDF`B}a$l!V;^%wFcgO7vAN_ zG7ZXn-)7{Y54HA<Yn|JJos$HMdH;s3((&-;Dg+jgMCrhwfl| zw|S!-U9V8gCdOiD5@}K^i*Q=L9(?O>{>s};cmBHhJmd-%yfoYGcnxhP}O zm8VyVqsZlac|&veToI)8Du~<>(XaSYqzwGq7M1o$)RonkyBEy zdW`NGDzWdcJx0clW+0tZHrD`(pHp{|MQ0b^g+OKD1Jc#y`aK^87rv06fkaoY$IzY`T83MT}>8jrx4{3G2L!V`wp_?KQfj zl$0@e*(W%%fB6eo)1C;6gBN{oyss4og$qMos`*%m*ET`MEEOsliho+$Tr6{`6=eD9 z&j+q9wAY*LW&5RDkA=h(7LeOAdI2d7Z1$$>by`mgl(Rm?>Kh+l4B8eb>-!m8TE3DW z9Aa;iA@%B)PT2!s{d&pSK28djAM0Ex9tE#FU*BfP%MbVHOEd}aSSf~Plof00EqoAN zP}uUYD6E&Rz4emXB&GY|VKonEujtNhc^CP?Ge0C`R7cu?QbfCXPMu{72V^XS25(fNCm2h}+vogXeeIU{1Ve?P$Gb#cIIlx7#q5^Ore^t7}a z)k=?kwz^-Bf#8k&h<@wj6cuasr%KMCTxLO{SG()Nv{~NeNp~AG!|G+?U7}23@^4w! zQr1z;%bQ@wJh;7s5;)v+&#)Ma%qwc2@IDm4)^_^6Zg?)hIvCQy?}JD4wf4DX)0LAT z5eiab#oVd66HC)peR^UFEqSWhQkWA-7GjATwSr(tWmLtLsJOdLV55Cf9bH(+JT%o6)an2#fKLI3G+RcVBJ)ek0z!3 z7oh!n8&2|%Hg?$PL7+WsO|P`e2Q8CeIJ+8riB3K`)r0g zGM1zl3|wKi5Mzmj^Jy@PXJ>mrv=yP7&NGbP8=FBAl9O%IYAVp5YPrXw>_EqjV}lf+ zZ}gn`_yo{Bbcc}ctU=2qhN4=^yOx_k%({l7sT{CX%+Q@?h60}6p9dR|^sx;aFyxN= z5!?3*s_X`YKXd64M4JH}eBOTalr0PCSYt2fcQ}p3G2*jbL_ScF@67_rA!A{%SD1JV z(XP0D@z~NxNa#=sBvlH-aqLAbTHTJ=WHvy$mB`AhD{ z?aLL9?-%1VGAZu*LaOlSytK^vZH-FZ@`)&g3c*_8qSx{}EGyToxbQT7-rKG!+BZRS z5-Nz*gHyG^2?g@tTGYl_mpG9NO^;p~>g$=a5rrm#BYE+@bJ0>{mT8t{+ZhBwB%KF^ zIW}QDm7#_qE4_3@M~nLmZ&gH3vx1TG9t`PQaU^{RkQun z9JS=$`wYZGO`1h@GgY>d?e8c1Iigt+PkoVN50U!)_v6biG*#omcT?qrYlolVGt2ac zTkjN|y?2pB6@pfP&lgxmX%Hu_zJ(!~%4w%ERD?sJC2p&jIMUpBU`&io!kXF%69PsG z!801+1VpMYDGjFC{O{S?f@uP0jTzz?E(5+KrhZ`oT`E83Vvk=VHwH?-B7GO5(|Oy{ zBV%lx*r27BRvzBMwAd}78mA|mF`de8g@B=QvdWY=Tx(k0uPc$#k{<3caYeQJA#3S~ zD?=mxZBe7fm+?^|E~Z;b*ze!yuWLEpJS|gp&CQBPAm!0)vw7lF1<}@1&^#NRJO6XZcsf<*>-%}mK zzjN%9FVSPxy`T7A(CAWBduq}CWDT|})EpF=FDMKDvO1bJ*EIkM+wKbpyszk9kj}Pf z80_Ko<1&TxSvKV2TkxHRZ)5f{4qPrYDZNH$6=pX#F|EdzIb=57Bhylwtx4Ez@nYF4 zDXn}GnM2twr;UM^r-xSrxx4x~!p%l;aaB7# z!UQ;ftCB+YD6>Jz4S$m!N9GDT_yZUH+j&{l!p(uj*z}cp-aLAq{zl#Y1(L9D+NgQG zAVqs@#($9uQvonpy*i9F9$UG;kh_IE;tS#2AQ;p^cyg<%uKu|zFR!3yJtgYZ2UQi1 zI%|`oSfB%USUhKDbM`~W5&hVJ%>CAq@^nKPzE|JtMlV2`0`ba-jFe}S?a5oRY;3%s z%VW6PMl;aci^&X;$0n%FUMg#q~Zb(-^SEiReu#0K{~AV+j{I>Vx*|7JKaRE-q5L zNaowPxZT=DBF6y_{6i&vD#x)FHD;mwuGP$OLSj+Y1pMk=44z%s&bsjtr@{&kn#E_0 z{j4^+$J$xbWV8>6;WlP6G4b?HkaB8_1bo-Fyn6%`UOc``4H&PnrPnK&IW>=*{H1SShCtBVZ8&FJdN6vbbVEg!UG2bu-yzebn{{*}oxM#hU@y|E zKPbO7524V-7WAtZSpJsM0&ho+O(Z#MieM>E!r_58{Mdc(&ABZRyq|q^_jMyU{mTy) z8@@Lel_bXqkJ*S=3Egkyx+#}?>~Frz>@H*03v=!2)QcoPh(ZixEXbPT(;D7LipLpqN~ZP#eY?C{b-*NJXC|}g&eFzomVsfKTS(JJysWbXAlwDjP{QcoMlN)kQVgmJ*o>1^Q2o`H7Dg`63g$ z$JM!Gp_B<9pS}C)bH(Wma1k31X)9p%7#0i66huuGW$A6(7X3mm9g^i;U#G8+gtNAG ze10zJVWFk3fyMM-xUSf;Da&~-TE2wBi*p786k7Xw9F=IJ2V~Jtb#Wt~ zLnp5@kSTV({X6;ACPoHU49U)m`^2MNb>7(3WFfi3+P zJa<;IwjV!LT#y_2ip)5(VQF3>$7k7gN6c!_eBR-fXi0A_ffl?0=OgILyZQ6aoDJWK zTN^?!3GaavnN$JCQ(rru(}){td@QfKu1JThhEgPxP;v~fEO_Z-9T9{2LxRWdYH=Nn z?vL>()w;c>sSsKn-v#reG{Jlc9`1vtbceUjTq^cB@^#U(s(wOjcV@o`)hB@I_4brRy9qnp1+EO4qgM12yywx+dw1fJ6uqn*v{V~ z3CCK87sdCNU4bUuuV1%u@P~ej%7;RI4TDA9zfmo&An{^?Ex&IOC8yo&Ki7C(Ll&Oj zR(mi+;MWZrA}hQIlWA{6<{aDZQ5)qjBLJOiFfRw!6XL9zwBl0S84=fq6crf+K%>Ft zx=-b_uTzI(-yT#^O9P&MW@taWGR!w*?m?_X7!~DAlI2@TXdHIjNM`qay7cS~- zeQ5=YqWVsas=77gV~?gvq>=k?tT*v)?o*s}7OKT2WCWp@1aS*9MhfMH4AJG31TNJ# zc~K!eyZGFbn})47^g0Zp5oY3LP)kR=OlG1O3vhs&vSoIVWji}XMiXC)l57m+P3MGM zG^}i7-B5JhK24-78?ALzr+e2^@{)qBsA1l<+bc)0r!3w^lJBBNw}uTk!vik8d_bomeD2E8V^oWxvS4+_B07uC3;S@aQ!ZUFf>| zothzVW3O5Sm!qV>sMiVx{zB8YKHpZ2l%`V?e|z#u2&BEBm+0@Qpwa#!uS94i`Phtr zvc1txNTkJ#)GL&Z`f(rL6q}DV3lOF(6?`ZNrGn8=@b|v3)B?j%BU8f@ad(z!}Pg@XLUamLRl|h*8`S z#v>evrUWApDs;8JG{KT4WG~n`Bir`@wH0 z_d-7&Fw5yfo)pml+2d<&b8>%SCX0M(8qh58-E441)02A7;L{#M5tw^qSt~Qu{H7A_ zD_TD!m+Cr9yA{XP`&xjK79A^dhQd8+HNUxUnX{U+G=N4r3G{k&y$x&34Oc%Tp`7!G96gYxgn-OZ} z=kQOOQ->Q2P9}a_Ip;HsYPS-SPZ%M;m;=?Ggdj`LeqF0q>W#M-Wt9AgCTh;LNW(n+ zjnO~weVTW7UE|@_K;vqw^Y=RbpYb@ECK20nWom?ChP*x}={Pri;X8%(HZrKq@(7_Y z5?nD3odC|YLb%S57tFcr!5g)MVmL>~CLbpnaqx~ftrQ{6tadtPB?`y?InB+_L-{eD z!}oGODuSlJ^XjO`ZA~;ORW= z&wPni53=`6ILqzJi?cZkz>w$8`H^T$yIcBzUHbi!cc393 zVcN^?gWP1MIUSZ|vvrsEv~uLe-xe0rO&FV8kwu zQT*V&Ax1ZIpovyLJdJEwpnX&L3O1&@jZde@3Ae*BYi6NmwAuCWnBq{_ZBx!tb zm&OcovkH$+w&`0yo1v0!y*v{7*5Fy3JP#vCQ%P8pfUCYSfyD7%bScROQxPp_l`98t z3boBBQu)TGM&cc&ll`lE0+}Ren#J{0z;Xz+C{CW6JzCM=E^HKK0r^Xi*q+d zT<&E74qeKbo)NS*BH+K$w|_&JagM(r=d7kkR43_@qzy9axs0zbJgRkID0#pF*^FuO zrL0ZjFVu@VYTNAtpQ-#&VIjm<1H^Saju()?^n)r*-6q=cV|*-F!j4VCK%0}&5?4SO z>f6xu!-5;oTv|&ynz3mXF|NUPl$SOvvmi8)^>2m7I!cpw_gs@@s9}*tjAr!&_Cs7a z#@zfc0J_ber-pv?e1XLL0Z=eGVx4Xdo^=ocjAAQ#0fGkbOAoj>D|@-pD^6Jn*e1A8 zHVYoX1+Yk#3c}sZxuhE;w-r$!9LBy+k|ZT2$_33Z3xA!%F2V+v%?Ao9BsvXz(y^1d zoE&bHYKdpjNWX0fia07oEh*#IBG|Txm!D0d7-s8QW1wfW{>oErp+S{9S}!MJ)4#i; z1#Lyc&gIdqKDSD#@;aaH-%BezvelZLqORn5Q)?!i_2{?XxkM2nS&z6yB}v&)xJdoA z_uWhs8{BAZpt)co6EzLmmHZ}&>Vq=qegTjkZ%pXLqkj256%4Jq3fqrD`0%u9*vPJ} zWG8!wEADlguuLQ%Lv4=|+-V~IdzRYi_a6M>e}sE4{TX2qxkmg)JNSJwCl!V~L5dWl z!Ag&@7k>o+VI4gC|99X{N}ds(&IEI3FnRs5HyogQ4d?&DXeEX=pK3n65ndwz6~KEL z6FmyCVK*Vjq`Z#y!#^k+cjv<=$`n2WtLkR=S+mGPT8$Be7Nkj`{6Sgl__4{^?<*V| zJv{Tehuk};8Hep!cz6|myT5Kj+W#J{{P(iMIpSh;Tlh5;n;0i35c6wF$_MfuCGPS zB9(u#kM?lZOG}MBY-kM(J9U~2cK7BoK59ZFkImf@0-Wd^_?cLlY8Ptt2s^R-Y`@1? zBZ~4b@jy4bJx2OjaEp%7AL+9ruU7G4gY^Kg>+D?Ww|)LIW^c;d~t!60)R z-q2YyXi{;9$D5N^O4`K4qYWl@JF-CGC%3vDyfh<+Wu{a^_9vUjjKS^bcAfCQlNk5< zIUSE12nvKCxg~I^@hbh#8=qcNoA*i|Jb*N3JfHm|4{LX4wUBtS(qtR6^<=AMw%WBM z|2y;JM25eaT+T$d6B0zQ^OH`Eomvf|+t+}o<_qtHuVj+zC5By`0T{n5T|<+x8VZuC zk)KT^$w+!Wtr3;(A7+ec+U`XY$cNc`r2uhN;Hxp!RyJ6&72}sT3WCt%mzOS)-Tv80 zFAx2kBX*wiHNFd3f+cTJ3t25CVEOfA(TRx7C%0>*QCZ*1PgaDNz$iO}GLTfAq#zCk z(;!pKGTLXq2RpvwA*Zk20(kIr7l92S{)Eo1&cTI+bO^V1 zEXjM`+4tSiJ9GI+ZP)82IL`_<28X1yT%1d4$e14Gk7C4}DSv}@SSsQ5#gRY%84)j$ z2nL5TbX=_Q>gwh05;&&D=E=K4QrzzIXYhB;c^-bv$d1bniC(XYQ;~&T9X5gbB?&_O zOv}kZQz~ZKPg})sI;OgnpLWBtykgkM{p23*3#v0mRwC?uCFV7qW2n1w!o02a_%$m{ zdF8Rx!+dzAM{>Q8tKs0Pvikt9l>Oe&V*16Z6;h%wF|9`7iIAiu$h`6m3mZe7 z9tRi}wElnWy=PQY+xG=(!-k58fKo+7lq%Ass|YAnr4s@o(g~rrkVLRkMWjfJ(vcE+ z51{lK=_T|C0Rluy2qc8Oc<=8v_5by~@y7528GDd(PR?#?&o$TFYlnV`BQJ(VSv}ZDX$*mgeXG{Cl+k-V{z;sq;lT8cwR~- zEeBUL^8&z4>x8pVe8eA5m(Z@I-`pchN}=qMxU8)JL$P+zEo; zj^wH^_M4vtPk`cMXW3IyvW7WybJ;_D1Wl{OIz%4>UL%M#cR#xkDrtOpKj;Y=&`407 z5mLP+ockmPNAPf599hZ^_-g}hUvz-OaLmIi^475#2N{?CHluSu1%dZ>Yf57B%$-n! zy(dIw5?(yTe#9jhJEwUC$E30N6@h_8Pb&vYigFc~YG^ulET%)g6hG%*T4HWBD`@v! zh|aJ(YxN}uc)_`;qJexZsF5uhbTfC{x9o`IboC%()|D4x#KUf-zK1^^vds4-Ib16A z=Z@iNE%OH4yElR)26Y8iU!Ybjws+j(603hJE=)RIayg&qI{byNVwLRFlViv9Hagm> zXGXvmo9FY0w-#7Bh*SGNs^{{(dI>V?#=^YDt47tUiy_}AGb;3G*9kl^#`kWGN|$f8 zn)%hiC4F{S_a(fPw1oO}{)Gd_@L@~o_{ch|%sbxGmnl;=bh*=#Ql?d*8sz@#YWHGh z(pU{jo01rvaMBPalj5SN@!72|hPvU-?AgA@X+Dp5QN#895&0bfbCU)i)UDTAkzd)_ z^wBp_JXgKX1vg^yYi_&G$)B7n0Y>`L9M-}L*7YRTk1N=vEr^kjqA@PqwTJ$cd1-Zr zxo0+^*pvN^R&M+G5{Yo@c4M04K14&p|CLoI{%oK+D=GeL!a?qQ+uX2hV z>#cU_UlJ~hLDZ_j*g76_R>E3Ldb->!u6z^xRb=wPVz%+*u59Lcvo~HBYTS^O8I)<$ z%>haF4L#A%3AU&K?P@l>4Dqb}rKQOsWsq3(oh{F$C($FGUNs|E*#I4HbE~c1Eb+TO zvW%kopsji1X7VkS8Q9C)^SD&eXAVLgWX7T5u<$gWT2&07TQ!r!Bjv@kThqTZVyEjF zD&69MZ#BO6j(gbqm=`y~uY0>y(X}AoQAF@(N!WL~+E%MxKuYM7(M^Xk7B}xH;0%AE z*U$&**KjWd%q|e6G|k5K_|4a2n2tef*%2STDDY`PyOb1@n(2?714CLx?a$+0PXzal zs)7xn}N+S`>1vV2yX|g|6E-*Wej#wLZJvEr3Z_Y3)&XGDtvCj`)7nR`HGU z@bh0WHuMBf{DHerf6a;DL`VHhoP{)3%jPXr(~f0&sMn5|*k`QMcg5tmlh-4GJEe@z z!$?VX46xb|i0{STY9Jbj$QX>P6*erITDWBy2- z9Y6Zze_epCck~E=y03pcJ-6N;H+?yJ z<1$+ce~EDE%TkHs_uN@TEbi<71&iV(>6Pl*TKFz1ninhV@;w+P>&dI<6S_Qcg02QS zENdLwTrENHY&;;ZaS)rR%ymzi2dRL4rzePgU2djsHsp#?LqKZ@G~viNAEDf=mR{;&^;T696_6( zm!jt{%)B^iv|hH7lc!l+J*XhV6?lJ{XXOZw( zw+N_k#k%p5{s|=14i+Z%$?h%W+cl|#+{l~lTA1l^ud}+Pw^QWCRF-KYo9W<@`vVTn zdwo4M7$RnPLcbVh`Z#ec;7K)I<<9!h$EBT?Tz&!}%50;$6wUa2hS2}S*XPqgkL36$ zaHEn(@6Fv?2g&at2KGzSHKx5pz<$lX;b@bjcbvl5J}C)di{C3fU~x)5^fA zBa^vf6HCmKq^_G^+1O-X`FXOUYh>2sitXqjki9%>=71n+ffdm}LEOI)G`;-Alg^@4 z*nN7P6!ju^iOayiz(i~n#kS9sLG4SdnS&pL`%$e>!6=a7aS5nlO=f=x_=RuWpRzCG zqnS@mrMM2oDIeb0yzX-Ehy{6DJa;(B5i_>3dKqXf;rB><3*vXiYUzKB|CA7^8sf}* zj4;OLk}~MR@@e%u=dW)NdSW`zcX}+!tqG2MpH*^f@m1!;3wD$WW(>FP)MDLL>v=53 zE&B^)76HfNS>dXxwkmWEZEPH<)4EhHo8+=sN0+V9rGOFR5{`kXtKTC9bk!6`;Y~SH zGHR&-anEGtn!*g$?!;BRzN+ez0Hs1tjjPEl;5K)^6OP8mSDxRQnN6E;qBJ=z(=x=> z=wb#Q`8*Y|?I}Aar94a~@M$G%6>h7A@K5(n_(yiv5b&qyuCz4l`C(-#t39I!w&PF0 zCaZYGsrMI%i&@SyM^-Dm?V0+(bgfPDmRqGSzs)=4x0HXY*D?ZB?_cDS@LhkyY|r@> zJX+&B(Kd6$)as0Bv*gXemH|N@cD^=tf!W!uM?JOybyY4ObP3s3741{*RsnQYXUnUP zr>6J;s=+RA{{o$~M<*+tq06X*K-Hi12m8w5pq7>p*>`TEl=Z2nyJyBEj`HN^e;2|X znz53FG`K(p@`g%xS)znm02lBM30DTtBYl!IDK9aOFATU%tt%~-Vw1rRIX-dNKL65| z^!?RS?GZQ=#Ikzzi#Tx`A*!Ufn-lbY3s`AEUQ`TMnHL1TFD@~ z#>-Xugf1J?6r_bHtzFW(W?Hcw;&;32^5f@NWw*g|eU8wF7n9>F$GGrS{?lV0uAX3* zWTPHB$U3EBS<9e5yH3xAWXG4jsL*Oqu#W5Cy!gP*pUuDYxT>7c*Xjoeiq-A#&M!D{ zM4-3Nr^nqh16%?KRKV)DP#GWJ`)3wN2}&zwcbd91ba`K%R1sh2en8=75pW{PZSMvj z`zDc`MIQNyl(_D3&ehypN=%vHsa-pF-rRlS)`2aG^dVgx?@*yyo7)u&jK#E@bkbGIP|h!W=MVct;6d#hhbj@F8Vs`1yn3?yC*oPQQ_qjw-R9ff3@Y97Fg}`p zdat@#?M-GO9y07mExUN0`@Oo2WU^UN-hJ1i66ErDkFQjkKE<>Gq_TF)vv4Elvo(-T z;)g}amwf6ZR=@w85zIgSG-UK?^0M1>efQRlGg)`%_|EroXC_|CE$$33JXum2C4Vc$ zq>)$SbMl}M>lt3r(U*Wsk@^=QGI6i*eUPSvd_^^T--R8kZ>O7u_9$J2zGLn$`Et+H zvw+v-tk*snLA&5@)u-}ZKNaJSNkA77518e4P)rUxCxOdq4_UksIl?m`qa*k z&&dAR7o`fWg)f~PH>1A`Ov! zKXNtivstcf& zn-GSt918_wv#K3!sz}3QI+XVlx2rPEaIGhub?A|jaBRc=&^;LwH@f3fSM4w5Z>A^T zS==^3z=*rwgGLd;rNT`i&hKAJa5kmtkOcIZkX%Pfo!J+~u_`b5X2MJijBFLl$*qzv zzmYyEVaZc7w4Ko89;@LC9=RR;#X6{G2VZ4n5#)Du&nJI8uJcl6Xjcw&L`J}H)5b46 zyxriXAw;vLtsiiY!Gu^7dSp{$=99Vp+hg?X1`nir6i}BZLHTk#I6}%IZd4bg-1lhwTG59h znBi%Cf_~|dwe4bQ;+uZsLPZTgpHr2_hoj~270srK6*u)bGPDDxucM+@E$RL~1z{GP z+aReM+Oi=XoecNSD?`^|<7E&9GaBBtyBp4PH7CS-Xeoa1j!x^Oe>=wp>Uq(Y~@ zs-2-oTf4Y={L-E5wH-}lRmaMt?;@1mLD>4!6(x_*_v*ZXSVV}%_w(FSrs{G4K z3tkYmvnC5l4%^4R9x*1)4195ex-1ea4Qs#y{e44cnJgisnV&Xv+iUL&6IvNaG>P1) zaF2rKjE#-mH8V3Sj>Bo(ILD9d#m`TG*#?AqN0F0|r(E&LcOdj}~nC$=cO^DbX*UANlw` zh3{S2%*V}ztfj{$0^}&QZGPv$#}jwAx|X*I7`7OHkHgt@9#O8jGE=ZNyZOhoh6j zu5sE{;U1Pnk&?e_P^0cD2@^fm`g>KnmWy&ufkmQ}c)Spwp36XO*{t&U$le>Kt{HFu zjDuV!D!|x%wIE>fng?%Q)H~x!F;DOp&+Tx1!cF4q0l59$4|+` zZ5?p6JkDnrsj7pjF*qh)>~jcvT=K@LL;WpMJI2pm+&e|ivG!@^3Tt_{sd3+Kdh%7X zqYkH{V9PF#Y(b#^Tu zJ4-l&W0gLqG!@@(a1tagJgD+CF%l4RbPu_!0ye({Nne0U^5g9Y4QnSDIM6ca9i77~WJIBgJfMvKW{V;KDW0w_qhU zQOJ8_?d+LJN!`!33g@&(6`U6ND)g0Q%iDHgi-mS~>{Bcv6fU$iUSg&ioH5k@)N{&W z*_pPv=ui}ThFQw6wR9=W0hup3#0_OjbU=RS5-MXlQPNeu~XV3G547tQ@+icnk_56?E5S zRh*H8n?6v&-Jl-6w)V02OEJ1}|5DKnpj*sKkfYF5YKgZ`lB}r+<(@;)Vd^K)2tX@} zL!=&7d}#driF>}c-gsp>Y>jr*A>u76V+FA2{ZNp^a!Gp@0+ zyGrfE*S#@M5o0<#&VrusbtdRfT64!XNp|&?rDz@|YhU$uJRb>Z-jo&>HI|s+ymL4u z<=xT4bZy-`)UFidcwzwB9D$Uo_QPe{lf3v#rM7Sj` z1asl3D|s>LqUkf#)#KO!rLOLUzMdM-E_)zxMxO#3IC1A-FQ(;)y0P4MS_~gy`+w2F@4hOwuUYUesGtu9if5VB~PMgh!U*%8+iQ zg&KohS-{5mX99LyQi=#~O4Fp`DdNcOu?R$f$xai735{N;2y(8qR)B+u#S>FtXRWSu zT(pr1wS7Aej$V+aI;^s5SFjw&RFe*8TxNHf z)^gunJ*0<5-)0O;WA@5+Zab%9#aLJNHQ5NEOGvEQOtqVpPU}er5qN9nB8}Gu+-W#| zyScr-82pLRct=WtJ;fPAh}yGv-+{v?&s~2^FDL-sXIQni5^3p1H^Ei?Lpb5D`S$G@ zH$^Ac81a*#E1}&M@hUFkx5Gf$a0pThwA5OP>21+TN>IlwC5a}#&PXbyzF5!b#`M=p zMSJ*8I@@$FsZ?Ml)CRpR{AEqbolA_&T&)`3s0XGqh}{2XY&3EoK9Q@O<^XLd^5N_T z6cwU3%ieV!+FYz{@_Cg`x}0yyei1a>Jr|xH>Gh=8Khq|}-g!%`N$Rs$UOYve@wW5u zU`$!xrCO;ONhbo=1eB-4F+SjS<5~Dn`pHKgPNOaz3TXMkO8&|6egt>6kJeDe!1ccV z_VZd-;i+o-Y;F1TWQ=8eM0612W0N;HJ{WlJiB|6%k0Hx5R2=*_ zqS+B|QFd+?Wsfx{=LbraEs0)E`Qz~(y{%mv`p0cFc124>^NX`70g}h=zpki+GcK55 z-V$|)Ez19lfdhw^g7>ArfK;CkQf5AP{Q-c1O$2Zj?(1h(c1|5xfs4*|!>sF{N4>Z^ zA|F^1wDER3nl_n{SKVv+_b~ci_;T-h#n8P5ANqrx)33+(Zm-kRLA7rl*_oQal@V?l z(;xkP#Qk~C^=H?!b7qZ7oS*#tuYU@G+^0^iET5bl1lA}q`Z@!!rmR>Cj$Wa~Ti z>1T9>VhH{Ze0;hINSfLRl(fuU4ENU>m;^(Cpn$cK2J4xcX5R%OgF=AHaiyx}PpTX< zFQ=*4o>#?BAqpZN_x-zP=+pFp-pNbSV>vl_Ve8$>qPFOF>^|d^+bftaNOba4;-q!? zJ%~o;4XSqt1z2ed3fMFzwe&M+F;*f9qiog4+tW0;yw_xdoBy=^{~D0xfaY=1i8H0( z{=xpQ{KUb0AZJ&XsD!mzp9^6OzolwDZzuL@l-#|I3a_2Z*~X>S?ZQfOLE(|K-R-#D zJSXezj;J*%6n#zRpgFla&UL%|AwgIyBwmczW79a5)ukM(B&(cZ>8DeY>(Gtn-r6lr znXW0H#pS}FFm37_t#PrEaou`hNK}>zKE`$B-0ltwBADGGAR9`HsrBqupM?^4u-F1C zDnHb+pyaX`Wn_GNU2_PE{mk-kW2)AV)p*BSTgD&kwo65b`8t)=>1`~U@rv8(J27$e zinED01=np)zF0?F!gdnl-X=kYEvTt-W;4$Pn_I-2YvU~`>UClY)9)+3WkvR+>jOK@ zOGIh|`cfsT-L^S_bJzYFsecX22jy&+yl#X^X@ZH1(yJ4U=vR6HU-hsk_9T`D5=RkW ze`W$;^Yd05xirVR$w}XOU`%bBRD!a#vd%UAa>glER!vpLraVt-r>(8fac)d;3orFv z&r`wmmPid$yOT-;_F!M$>!Cd5U(=`5Vk_q1s}6-zn;ONg-{N1AbtN{|LPkHfsc@2s zA!IUneh>v{+7$(v`;W~#`!7A-TI{mM_6?2mGKC_}N^^@eiHWehvTbHD9IrbEVfPQEfL{7 zrrcnI?zV|#QZ4qx%LGKyX-f*#x~Ec~KE^_gp2$`Wy8SRxAJ?yl+;yxNLIKJ}>=(JT zVnrh+C*8m@-Z=u@id0Z_F&GB!>M&OCdwRCed$q{ETU{uFu#gGb7*A1X{`vu^BO{cj zUuSWzZm8bGbzOB??DC#ON>25|UBXI)VeyT8i~($-*)bH682hX#;py<$A|F`k9|o@x2(3O?!|)0u(*r z(T8hR#ag2EQ0q&daVk1nLj(7LnkoQ*dM~humqT(BWiqLdzPF}5)OzUJvMv;&_UMK= zfrSYG510wf>R`(>DR%U#CA1TEA(X;AsykMa1zX`fI|}zBz4F`RGg)zVbzA{4@v&p* z5#Q9J^GCO%EB8%{%LEqjgD+f>HlNIe7F>_w!^a>G#@5$jp0vQms~?q{vIs_S#9Jo7 z!Vtxmc;zb2K}d+7Yo^aYw-+%YAgIP@yjP%hd`f~QuIheuVPCQrN480ns8ErWL-)=6 zS#j-`FoL|qB6%~kiAl-WO_MrB3~}veTH(#fD1Q!hiphN$KQ|Y*!=&=@S{=4ojosoT zl_J{+hC{4H%=^hMHQ_C?M5vn#$2ZBk8Wn#V!WINAL1}?RoQ*!@iq=l3&h8W5Ooxo! zKil(~;SF9Box8hQEKDhphr~V@>W+pph3VuJUnvl%b)~9;V#ybNGTN;NWOU;vZpFB< zT*Q?ke0L&yq#3=#l@<$jxC7SNaxM4F=s3eNjZr)4Z6j|ndwXmMH#naKth>OjSW2bp z6L=(ObBBb;qkeZ)Hx$YB^RQM}j}3yaXUi9#RVxso7#p#H_gK7lFG@6^$M3=9Jbd~x z>(K7FC0to~y{*H#e{ZVLCfETBqA-O)DWq_Lk;9)`E_QY6EhnSU$d~TDS*VA;b;)ki z0CjaBNJml8%2usZPcJD-w4&!E<@o&gu5#@Qiv(r}ahaKL&DR&!_1{bzS0Bmyu9@>x8WAW*crMuZ4^GP#Diy9aGW{Vb7@W*ana@!|; zTvgq>^P%S6tgfKEWF^QgYi#fRQT%Z0{1VU|dl3nL0c^1bkZVyxpzQAOmc=Tcu>HG~ z4hh^S#`;qpQ#mikHVUoL*EnQ7Xeg@=L?ka;J)j&Ji7k1o4&BVJm0mB7_8HQFuJ{H( zYBMAKpFn&f97cjT7Epd_Z@=UEfaq~{Td`L5`P+T)^7J$YspmHQTXUig?Ha5u9i`m@ zKfba-b-jcJPyDPyG~Vc~ygTxEfgHfo%I*LJv`lbB?5AyX&OI?*7@8H~jcge~r%mbo*QXmlWb!C_*-O;KNX`sNt>+9djYj3Hb}jaCN-bacX_1RP zJ$!k3LhN!Oi^9NI$yK&V(xdO|Q%Nr1QCglt$cn$B5!wl8RR*#wg-z^!ej9hS?kX^U z5YhwwX)VY*bjFRJIST1Zk0bsp4Bfz;lIqtntH&2IpU_ube9KFx0#jD>zG`B)d5utJp}Am|g=nO&FWANdp&CJ6?XemjD%mxCCg|t;O4$ z_9Y?|zESPe8vMW=Xj3YACyv}jdo|#}KG#yVfqzWfbxtu} zudy2nBv9mH-m)35XwJ|rYy-LpuR;dFEaX4Xs`bJ=^>S>xA}j>CVk{-G?M~JsT2a<@ zV7SoYi({=kt~%c#QD5Eqx_$f=elo4?a*yk$%lC$IAi2rK=Th>;Xv$ccMeKN=)4je* z{bRIhCN+}kW>;ONlVHH2LQn6QKLSeG2v-^N_Qv)Yd!wqNIQIlVzHJ-m|?OutR*ppvbzN$X9!Ih+@PMWrq4-IAO zq35e;1@p-aPl{>yxj2tykf|jgCw#%&^1Ixrxv^?+MCkf?irq05VSe5x@z z8Sg_@|8Y_bH!ygcRrq|JKGc-b6jtcG9X!6vEG2IFF2Vv(?Q1H9v~RD=>~RLA64=Hi zE;21U$`7bz!cZwNWMJXc+>23Q@1?TJx+-B_V7cR9&HVPD>YDX&_QbaXV(0#S(bQBmLM|jyEp`w6K8DmqR8uxxw|<1AceuGpqhb^lCf|Bojj$fkHTxN z5)2Rrc{icUCEDqJ%cDDzv}A_ok@U^!3T0D+FH&*$4mH0-?)dTSio&)=e5op6dzHG& z3E>oDI7E$7CjR3@*}IQfL10W_?c0;$p_2KNqDlut5xCXO z4am@|$PAib(6}`1@Zf6d^4Sgp%aFf;*IV;18RES>49Pk(Tfe z;2*0MsATd0o0ffmzQw_gV3Z&sJm`I<&G2Ti0_xT5NDvDVa{Q$jglY8B*94#SCy{Jj z^ZnHtopsxR!L{Bz{U?PQDxj;fPrpVt*87LE0!@2drW6c`yF>~2O2go*KbHl<+ ziXRn)B$!5PNtP#-XQNB5YgExnwPIU(1ufh3vhkzo)cy$+q{U9z&u@o_Q^C}te_9{v zlf~|mTT#=HY!dt|tn6z=6Mq$EL_fkk4ya5+!$^>$CYDX>I-Om(ngZFl4I5UiG%PPh3!c#3B z1V$q#DFHCEqy6{CvpXrvP>Ct1ow`{;YN?*^sBwFj-f$;U3Uw`Pf|H1?L!<5EuSqVd zdv_ppK3DiBNW4E&G&FAur zSICy!9G6b@KB66U={H ztLZN9pBy0eO)x+N`qe@WFXJ8<2#*hYqd<9T-_7>P#1}WL^D&LtbHPqOU7*^E-U%EoBmhI*#+ny;B*1s3YO zc0u9D|7hEP#`-9o23tO@K+vME2_^xPQQudn5z0!D;Uk5&YCcNIc_!5$tC5*Qh%WZ| z`MX`}mh5!%Np~|LsZ{Tu9(LFuf{vuveT@MA8Wt^=s{ojRk~hmAO&QC4$+?KJiYDxd zQ~zf1{@_NI$omv*O2>c*HKw0m?=bz_&!|($_sl|7`F;VqQ@R+{c$*l8%@N1;uGm3-5?JR2~Bgn+&pLYM_wd%z#-(74)(dTRPr&LlzVT1~&F?H#AoPy7d#DE!z z>I6^n#o`>2-XAKlYUkw7|=EWNQDh1ZS0 zs`Q>sfxxEJ1h;vP`VX^%>G{D4p z8UkH`_INeE4uCA^BO5n_;mL5`T_4`i0S~t3CB#HLIAV*wfqa{hrP!Mm2PVNu**)KR z!hziF9{kgWHK=5MjZBQPl9)da#Pt}pACi)9S8h`6tX8wjJA|XGM-^F4ZV#%oVD#iJ z=WjQ8tHnJ+FMER|!*P>SoomSfLBfZG(k*peI zGCY7wCKsMYV2qJzvQep4h%bid&T_IRpG-YO>Z-F`#Yl|Iqnfr!8~7p?rf$jrm+0!w z#&)5PDtfDxHpb0=XycV|ajlBtH1Qg>e!B1)zJo;Da#obE(SFm|&YywZ1v8`w)e)T_54EmtHr18E#5~81p4rLXNp9%8Njfk4?_vC^$@=3sE`b7$u zmq3ednf3WHj3u_Tp|0)eZm56LXAJMFy`~j0nv*_U>{M}OQMR#Ndu`gFG&3>j;ruN7 zY>Q*jxg3YJ+&D6kMhCCkccf(VLYZk>Jv%03>8&D<)O?MhIL{^~>qQkHt8jDqbJ&6j z?#A(+Y`D|O1TfP)dlH9#Cem-AKhw^09B$&N;yYOb_Q*$xniUn~Dp!j!Jh^;bn-AN* z$RP-u)b8_ zGf7J~oGcPRUIFU0s7y%7FzvxCQpnF*T0W^#n$WxuX=NJzkoDS5vj{%7tDzU({kiD$ zb7}`juW?J{%FftX@T(grvq^?`L7(@UULP?!NL=KhLcF_V^;;|SRFQFY&Ncy*@XVs! zjo|h0VObS#Dhn1%fKzVscq?sz}P6+0VVq?Y|yJN1}_ zve+En00}2To1(VXv=zXiH5p3@=VoQH!O^B7&`r|~6b+iQr4UelNWFZCF!KdP#(6t@ zokS#gx?<9MWEo{3-ay1EsWqr-1!z`&$d;{bg@o1(cH)6bhjU1r(``$J2wgsdns1F< z4Jkx6&#KhP=5tdtpFtq|Ykyo7z#r?$w2yH81c$sD0nW!8qm7r{8b2Ir<~tP89uyKE zr|1REGPue9vFKG3Nrl^?WQ^{5w!A46S8u2koF&mcyE{EK4{dV0)Z@}4eRZ&z8c6Jk zSMl_?!tT3CilOHSqC5o}6(x)zq`ZR!0P_en1RvqxqfbygG}> z4UpXN+$8|EL_dV^B?BXSBb7LN?Vs0X7t?Gs8_dw`JscZRlJBio4HVP`H+Xidr1YM?w%E9ofMs}Yz z6qwF3gU?PlD!@(k*~rp16u?85P4hAbvNK0=Wxh7B;zEA==bG^E{Ii5Yjz@$0TGj`@ z0`FN~GYw&$V)Xml6!{olm2Uxx%6_^$Cb09IZsnx{;~i)osDKK!^U3p;SESaxU5ClXec&Q*-A-^yg1h}U`2mEmsJ=LqrY$T){|;9iy!VWiLvCWvuU zeo!G791*a-+E%Qv(p|^2I4)n52f7z*lVha8F(6angYTaR6B~ZeGQ*m)_CS2uqN3*V zrrFTo!Awx!To_tA6uZfNnzpvWvJR;NkA-fnBN{FaMa=rrBdvvPv~Q_lD_PS) z`fCrsV=wArUij@7S5hEbZfq(Z(-x%Dg;?4Q#`N5f%Jbc(>SBi~TuVwd;$_Sdecz_( z7sFT`C6I6u*@kcCpa4Sl! z{AI>=L&|x1qUJ=~*x%f4fqe_qPbF0Cc9~Y4?~r#|b0~6n1ZcUMStxBUf1$bsXP3)s z71wQAkXuTlv&`Jm`aBrZ;E~9C;ue2?XS_POT|)u363UO&E6)C;Qbl`qJg4AC+OFo+K1_`A z(gThAamL1g1Y{hh(j)WQ;>#!NP5W%SM|~d+oRBHiFt7a@iCc5cr^i>+bl5I<@eIq7 zEqyg%1Zl64`C5^Uj~x@Nu@ezPq+G0!HW{^^cQ5vtbdH_qOID;d=s0$e;d+Nf{Ar*@ z#LMpeWc4}^y-p2^p?S@_uqKjH63P0@3v}4%3UHmokm0j$(A$zX6u7$@(fr+It05^7 zCbUI43A(AhRknn1t!WH~X;>KE0>qeF3wC#FR8nm=YimA?K-PK<#uy{U#8ql8FrLHN zPFs#DD+1C|WH?uSt;*`va7$p<`(N!Bk|jiIcZTC-!3J z7JaWkEFYSQTnJ0iO6AgPUmO{|YCYY14O@>YZqi&VR+Bq1I$yN0^650!#k$i^!`o`~ zN8k?-0dTXpudBI8r=lz65E*Xs9|3(ktBHzK_ET@W&O~ngBA=zCwK8jLe^f-sz{sV- zLOn%HErzT^SiN5S5k?p{@B2Dry{p62{8=S5 z42DZQlM34*Z7a#@B%bx+ueLEP860t)xFfM;4L@aiHAW{L$eEol1(c0$rXbqc@YiHE zY15N)gcU7)*W!%Hf?QuO%}(k7P~scZZtlZ_s&irA0G>E9gFw;Xn!gzVcRZ(4Z_BSN zPBlJ;g3(J(IOONhgyF#lrAdu0(`<#Yu<6{?nMI~LeiismV$(9=F~za0zPZjK;9&rM zrhK-=$gb}>7-Hp~h9-=!YX?ks@?%FMlB0R6XDjb46I!crvkq>XANXf7dF3Q6x%l%A zCM@7^AeYnTFxPQpNkKDiXdo$rejY|DMxJNlE9rD6^fF+iJa0EMqdQEah_pB34O_uh zIVpJzHtr+l042=8Z5i#yR%hN;P@i3PgOz1zkl)2Hc!T<$Vs_1CaMbEd!DhSS2OCup zN#nI-7mRdv;p_+$P7K1Xd-qXDD^M^0U8S&@>KS0m*U3KQ$cW}AV-@AtP57Lp=*O!>Dr)W?%~gW zghOPAo;qcxmPVJ79J#ePx?|I8EIY99)01OI{8{Z>umWTCPfZ+J3vi``4=QwA_ z>WiFbja8hl=XQO5Pj^jZz1qE(Ib%fkt@&e%x}JZ!{KYKlnYTyLLOW-Sl)N}YkR+RU zUWIa)FDLzg24Tj``-jV|&c+XH`?FnSyC)B(r-|j*j=5PXbzdAs0-Ke+SLa|Y7ZnIQ zsm(XRj#j>CNhBd%eC>0@^!U&AeXMk_3JsqXgPF|G1mOjsKZwwW_tlM$ub!?Z z%kxZL`LgKi45%fwO)&e?HBFTxTD34d{p|A@`k@TwW)%+s9Rs}b{1+eT2SU8^(3xK{ z3?G-5rLn?gk8R3ZB&dsKAdYKQxoCNFCW90H(lY!HH(auKkogqSH2Iw4$kOP(Fdbp6 z_0U-Hh;D|Ol6Tt9T=wc}4C+wxTW2o}VRGGBS;t#rQEO;oGeD-x|4C1Pf>|d1M@Rc1 zosDSn{}@((k)ii3W{BNb_ua(TSD4E6P4-N6^5vqjtK4jBE;sCg;2xu6WMIy)E}vb@0@qX;at5@ z&G}x@^6|5!rWHO-lRGwvwEW_k5`EoH!154M??|3g&@b9^Mc_O3gf`<>>*}fnPRP$c zu2_0P2yw#-&czqoqQ_ANc5a6_YbPidKLrdN z_{HVpTHpQDS1U`BdLb_3Rn7Onaw1}tTS0Nx{2X)5N*zh}y<~sx%LAH!^pl2owUqKI zj<+2Q`t(_CRooa>_Y~9r%b(GEzu`)F0^iI&Bj=8|O&9^xRJf5?yfl9G>{FMN#sDZ= zof>(Un|I1H&;F|Gkk=OoV;Jb=@w30ElskhaZ>90dGN`und9r&~7yjCh;tPY+`k?f# zfngAIV(;D~Lno#x-~OTtx=#;d)mQEm_{<>^%6^!c^q&nreZ?JlTgU5HTpL}wXMDaa z<5yhU<#S`g_w|9ls`=@YE733WF8`v!YDW)~g8L1AoacY^INd}DJah{FxdPWC=~Ur) z=>fGL+#0$=`u^75X^U6G@jvST&)rR*MQ~2@l=Qc**h^M}CsfHRpd#*S})6Sv>SO4N*~8>8HJn^gtvZeFNWA z!Hs_`-d}Zm?|(A)nouGz;f4iT57XlZVPp%lEi+lC|g}VQO7OeD8 z($N!~|9J3!eR1HU20hlLgx1viIYM^W;PBz!75fLO{_e5=4DsJX@vmwA=Mecl$NsiO z-wVHu$A7HtZ{zXXc>G?V|7{_DBai<8wcl9rZ%q2V@c#=C92hUz4S~~7-8B9cd_HN< zk~Knk%>N7m;!ybJS3mz`rqm6&bp5#4FWi9w(7udWmxS2jU*Pbit91AdoVz!F_}}yA z&*lmQv7B51{l9wOdFIJYVx}DQZ8qVT^)sEB zUO4@yNB?wmmQDwPj*_ap@N6%5{e49Mg^JB#yzF6NVLfAGHTv=v2C1c`r9IU?gflYE zzFhF7)zzI4bW1R+aPUV9rT?s`f1k69fEtsvZ}=sdGr@u0t7w~Za~EZtcGrcqsCEb5N*b1w@Q{)$`^Nk zZjq1X5AdH+A~?;Q86(QfS-^U3uhN|Go{r73=N)oCS6JcR_sf%pZ|MA}zy5x0fy3VE zi45S_hwno~MpC5WahMpo2Qxby0AK2tk7ExcRMvGzHwyX|msMgh1Ys1UR z`Rx#X{xvidJIK?Ie$)Z|ctW0Fap)=|CwK8rDGLieT+cl2voybnfPbaYGrSyU9jIAb zbaLwx^)Xl~UY$F7?93MxG3aEITkDNfY~YLLMz0~7cQwb(g5EB_KWT-vC26O7xvF+P z#AUlnd?s^fSE!cUC5**eZa=J{1bJYGqtL<8!p5xQ{Rw81nPRl!VIKtZY7VDMuDu;` zae%JLzawH=RPwOy_>Uc5pK;(Q6KQva5%Ee4xM;l{%(}cB23=}P;#pDJ{x-fEMXS9C z+p!!fAvyU_-4_tGg0;jjaSbgkEfE*zP!F`6r1EYLQ_}*j22x%%+Y}Pp*qh!_L~%yt zA%N5;S@fiYOt1}oLkQw>n&Nc7k0FTWmH3xi|363nlJS(zyBJEnYD6=iM$*{sx?Lma&y4ba3d*6!S@ z+1wf4!iWb{CHXW?G+?JyCQj*FK!q;WZupw7$|AZVj-OS$1cNRcO6)!>+%8mb+4bV` z{}#AB1Pqw=TWv3nXzX{>!wseT>+eZ!XTT+Mqm^Kmu%%f$o^YRJKeO6N@gJJ}!4QkD z{%2Iz_}nubf(5NS$iY$bt#SWqPlp&tg_yya|B3+I?mFW!x$Kwax>Km3G3qnGL=$Ba zzkfI~|IYLPsE$G#QDD5D9W1s7!7kMs_VnEQ_xEMI%ZJBTF?IAmQ5m6&57~pC1wG4q zEc$TY`NP4z)Cm>4m5J(Nl8chXaxE#WcKn^Boo#o353Y!`)QBClTHQVbZnsTvd4#`> z>)djgq1-n&xFATy+2grP;n(ZlkH@q1%qGiQgAq@{k0x61!gk(`K?$m5IZaJXYfD%r z6OA5lRC9+DKjP##u8RrfpMMz<&Iv+(VzPu?peN(lC|-h;g(EnTl_IVp*&donw*by% zukx_VJ>sq7@`EPmQ zWHs-J_3Q5>*7Yu5Iw?oYWwd!fBYy4X8#2RvD-=xPgYQV_yHt>i62CsZck=O`1LyYa zJ$!x7zQ2ku4T3$8Uig^7g^cj>Fj+2pIq;Q&x-r5S z%FDMwW~FaXhX_KnT?#VMYuDx~Y=%AMs*>+i^_{5Mcutp6-K^MTX#Wawvn~hx)>bDW z?w#gDZoOxBXh(j{r?S;)4a8_!oh)&nzrcl1YBPr@{)&L(E-ue#HCuh`{(qQz>!_-_ z^^0Y%^XcdFJahJDC6mx2gf6~hv+wjO_P^EvpVc4sq&bENG@yuXSBr0q z<=~A(6fD8&%jBZ&9Fs6vH=H-F<@ZucM@yx>$H*wL)igDkuB|9H9cIX`l7*`ceHF8h zmvbWVMJo9KYK)8P_j(_1)iBL+cf3E!qmh*De7`sLK;Gw$Mhp!+$+1Z`_EFwbp*gjD zZF((>rhwVxo#^SElHiS_v32HY>#_{+Vxr4c#{N|R8Fa-+CjWKG3rqnUz0;K{`pTXq zc>!8io$E8WwMLb^_4HeCD8XavIRS(a#k|M0FaN=Xv>I$lUZ|>GE$%p&Z(Zhe^WdXh zONRRNWatJR)h{IZ>oF99%;459u=SPY8nT(1Dq>xC_=H@X#4!a-x5;rL9LwjF#D6t% z;K=&}CxDo|sQx%}RHxV`b+fYnX{nu|8+|s2eq=CZq4^RKuEwm{sf$W#I=pcLpLfzB zLL?H3iTRg8gQsbE*hgG!55O@{0zG$q62eMh4EMp6jtI{SUele(pgxP?J6wHD%M5wL zBgE0E!PU|2HJN49L>$?y;>k9(pIzWO@lEq{kk`h^G!B^=J12uHwHqgc8eYIZlX@N# z#=BPg9iL+z+rM-hT_45N?_Vr=I8Gq|>Cq7ZQ?Y2&x9K`H%sttLtSQ!9EZT47bA#6` zt35mkkGhH0bGv%^J(WfDXN#I-E4aA0X;G}}2hX?!XEr(4-p?6btmiixznWonKQE-b zzB(uZ&yD85dCf*`3o%7?=IY*^-s9a&xikzO95l~O#$x7s%0;OJAB|1fz$QJ~FsUM3 z{7VM@+HgQJmT!4W*={!+%mvt;l!97|#cTbDzuQI{g zmNnlqhnx}x)e8H7K7Or^kfi7f?^x;@hE$58B}&Sq@W9@oS$26o#aF?uy>4n7om);= zTKHvlr9Is99@bl+wGY=HSQ;E#b*gk}@1P!5oHLsxvAE3ZBNFpJf%>!L&SzP?$0o}+ zJ_u|G&FQ)~U4g_L$eNOjnqDQ|mH1ET7bdSlSLrUDG0;)V62W7amXRMi5}mFrFq}FR zx-h7jv#wibfcNkmX5$$)XHLh)8rz~q>y@yG<*zRQ9$VNAGeEg!6-?y9E?4>b3Ckrd z+GAF&pLb59?v(X66+=x_E2C@=sqedDfZNp(f<&MC+7GY4vDc2YOz8Job>$Y9uC$w` zC*Kvyw)E&+1)bG)&CQzUV=i;I*Xv{X@hlG9*~}MAB>ciC((w&A#s>Q$=b)Tvp@O@8 z3Z9Ayn(bFG)=9Ga_Pp|*&RqVuS?Q#@d`w$iz&n$=*;>aiz5qe;2Gj?oS#;;pQORyb z={m>fC#{IriNPdOANvZae9%i@H%#mGX%w8_q8KVdtBrv#9Uq%wnzug!ZHE zneryGixR!Ab%?d7I3=&MPKLk94{f*44$rfC{0>nKIV(9|$!^68uYepCmsK9xpeN#U zyPrLn^q6K|8Sp)>$ofj^_CwI|)k^t%7PM|ju)M6IuzH!lZsxT45(WBXHT0g40sKTU zAdY3UVRvRYBZ9Z(xR#M+FRyr~7WNjwSvzIe+(8P?elTUwN-i`E9-;nv6okj9anjm@ zyfsx(mN>hf{MoHHsA|%Ey^^DkHL)Q^TIBp}8MsQ)Gh~M7OBOVlGcvM0Cfj@}#@wyN z$KS3vwjvAFuoM`h5TMDU-~#{`*HI00ElpVcj*x zNfb>ULUVl2#}nG}Ak@L62bD8+=L#C0Z-iW6L1D*U@k=4RJ*?e)zZ)80i+NwAq$r1Y zWDr`iVMbY2&FZ!{a?+&bg2Dt(EnXOC6h7jIH_>+G(2`Pul%*3nIThM32MdI@IQt)NTh1^`~f&hcH zqySe1f0Pwlm;lyVQKI#jFhd64(f}^ z7m&D~2RUZOlG*?Vlc<+&gUq2*mneqy!8;A7;j^OFvlx|;P!@hIl%2-1hO4R2cCfXW zj>q{r49{TRw?V^VBYh~=?2>!#)fJa?o%y@h4f?2%-V68|LeW^^>H=zg%>DyUJMJHe9X=><|9k4E`Au_8S8#aik> zKSt0qrA=BzjJXOY8{*d<@PT)!?@#i0)H<#k7~^cPEsVbs#Nk0)oE>WB;Bje4IFTHc zj~6vvvaG|zu`mXe-yZp`7($~bbA?=CoJ8|>0Rj=6s&E6q&!gkr=}|V^y%O(iV{NJo z?k7m{XiK81zarlO&df&j#}xgSXY)^)-j5W{AkGf^D8^>2oXIx1nq~LM^t7pmiQ_Vl z`R&42F-a20)U^Zqgu~=&)qF;>|Ce6QLxkWH*D_#En%t{uLjv22ch!0d4qbP4R)xLZ0KHza;` z``>)Fp9I1{w%HzipQqjHKBD2gt!t%fh$$^I9C3`ulqnKp`H%14LaLET>6U}`8lp|0 z{KsfNErYikRcM8MQF(bA%M!FhF8aIC4%Pf}fJ9^lsl(r}$jv(nlgOox+st2@gyT3& zl_rl>AeU3(Ta35=mwWk7BK*_otdS$2hE;Ii+3!vLF`B?Fs zA+sO(R|oZ%5tiA!HxnT3!<>d24^2l>QXRHOcw^3$S*FXaZ@xO$V3(Ty>~B_%?Inzl z-Fa57o!EIi%B=@=h37No#b)FUXI--Z&A501w(QBi+a+1jw&3<8&~bT)%oG&H_-X5J z`~%^XW9-hU8rr*eOAYoYPM6E%)1_f7L-xH%L(UcLuM$?4n}`i_QT^9QA+-+?MDr!a zXHtJ-c5k>;xDc;%t|m+1xm=OYkW!rmxO-&YuEE-{y#G*E`o{z#CHKhR?|N>a@MHqS zECY1nW-fgxk<Q(dl!muYrj?73mNBrA?&}EP${p;hRAA?xwXlo`k7* zP;wUg$6M8wpd5c<5%~|{&5gOmj>wG>D){@g3BQR#f9S9=SmY2Tt&IH#ro+zWLh6~x z<2vMc@P~Qr<22W(3wlJp|BvYC=kkRsZvJk$X8QOKUs$2^vM+MGpu_mX_-2#}uT@@C ziHUvJAoB8XRoV3pk@o8Mm8N_WARqaW5%}N#@l%(vU_vxpS90-BB%wrNg7&5b`se)N z2Q~mr?M<-*{;+gXVCga91oxHyo)yV|;5OI5hR8AhuyTG1FMHMymPeT{{)4nXRYEhh zmwkVR2=N~_*5&0bm@cUflZ^l0PtQyG7A#5Hm*;O~{uc872Y?^>YhQo4_xIDg9doNs zAO^+uPwEE8``g!V6!Z)XeNzU9!)ZQPZrVt0q}opgdECCrXrsIRpFc?o9?-9ir0L~M z|7{fV54Q8bexqUKp-r3b_xGz8_5+rOhKu|M%64KQ@gVk>KyRu4ussxj1rZA+|C4(1 zzy?T9Hjd8t2hw9dRUi)gkGH+;a7>2Eb2zNZ<3{q-pjE|1=Z}xTx5It~ZVg zimGhx9~4Ny8eMY$>+TUU>b$snz*yg}19A$hw49PmYY)mO{hp5-V-Yz{fJeUiaLYeE-I0VdOxT+ zm~We6Y0i^%zNfI{xYBf3O|#O1KIjQoIGN{#;%eV{)r+&K6p=d`RsF7|HhW01g6_3F z@!axKQc?`*+ZK%UOiYn9vT+i?UG*7?zU})*ReG_It;PILu)50}kj6;4Vcm5`_sjnf zgh@P;@y3P=KI7n?gy%ZZta>cfN2SIAMjm*t?R!bt!1%_BD^C6P!)N~Y3A*(>d!vnd z;{xYmM$oG)CQI#z_)_MDV^3iZPS>-N4Z6aql{7JgbWP%?jyEUEGP1KJYKuxT0SDbx z%^m7=t_%(rKq!TY{5FY{2grbRHZ$H_zr%TBnT1)fPqxpkw{X?KyHVT@TsLNKZp2g> zs-@~5rLHwXQ^Bm<>2yAPgay+DftG*M%AMiDOYM1+8PyuOX*Z5UiWJ&~0F1Sa?A@?k z)o9=5jTyCP&XzUP$_(8(&VuW`ReT#3+y3RU=E+)CD?Jj~Nj35be>KNf+mn~E)wn1B z?J0Z;nl(b2lnU9zxltF(xZWCNMv}f~7@wQI78743D?yy!v+VR%q;Rdbkm63EJ>8p6 zbE^^(I9iONW*j#6vm3;^jZVFQhlDHjjTV_I(oY^uf(|_yJ5&Kz@F{sJmD>y97m_D_ zUVh=b=>PV^{O4{xtFEpLECI%TEYBp-gvpK3^0iGbgzip~d4$<`av^vG@T+pM`a4mQ zrVQjaM`h&_Tf597FA0T1S)Qb3ah6*}H+h_cd)pvmj% zq9vvT61I{i<{evA(TR=|G$PTKUm;a2`<=ynJ>WU=X^Oo3@p4l<-jinc<#uz{h*qpg zy(ipO<=x;6M(4Ax4k#sJK30yJbsvP-WIf|v4u()1=l1l67_53VJ5A(J?xe{J#@xZ= zV<}c&65ZZy4+Nd&LZ5%MXGImH`||H`+=v_!pG94T%*CMqp<{mm+r}xa!OVm@m7cMz zq5a*eIWu+_`=05^Y@-7EFShw~RSs_#zKN9rp`u2qfh4Hnv&#k*6EkyIh~O1dnpGj4 zL2E}vg>E8fC_~yVnIckLS(`J_LM%huTe7dJrsQ5w-gdy)Ohs@$g)0Q zC&~}uH!-RpfsDMhTM9jqNfgDJlLu}aMw@(BH(OfBO@JR?SQ%GtIsEDs|CNe=+<3?XS9OFEsy6|3*iq5EQ%tq}B6puCV@;jrnT67Nc z;qcP`*b#|cIwx^R&u5}9`Ly8`cM4;gG|FSfO@LtZT)hRu$0W05Vp^@ZOz=)&$({z6 z-j{~oyQAzbF{-5I8{wTSd|Twu7}khXga8#n=rEgEJ*!%Rw0=i!NmyI`-u?T_0bN2} zI2{Re_j^8bVVrMP)Fs%j<_xv*{J6S;1V1El=hk+Zi!GfOggoKfctUg?*%}N|%)EZy zs#>xaUs(5|a@t5bN8iZPR4-U)-Qn~!X5M1%HtHtxbzdSayK!$c#^+wdj7u5+-pIjM zcIc;1pO%lf+q+@O@{#s^Ak~f0JX-zsM#`*Yd&PlQY(&9=i`e?(Z_IZHk{cQ4-GwwT z1s8cv4=Qx>!vF)SBUM%(7 zweu1LdOSk0tS#wb)8?KtxkLZF{{#!eQ^u<9K(J=nr;O4qSYWTb+y*KKoHm%b$~#i_?iah;M6BJ){lSrU5cAR-aV0kU z>#$hE?JU%DS&#imp8vD28-(MiO# zb)y>BOiEK^K2sQuJU^vV{GQHON;1ZCcKI?4!-izqJnkq_rr5&n?%d>D(kOMmOCoEY z0j|Bhti4Is1upl*;`;ja(uw}knf;+m{(tv%y;Z4x@Eu<)7HC!iP}$XYnmX_nh5Ohx zH3^?1hg{G*qVe)RuVG&%*ZfJ@sd6i7bshT%Fq^jBATOIqM9^}sxpkyVyW-7#CugJG z5g~%)m%aNfFg-U7Qo_CTd?2^=+3omwyil>8Ud`gr{pDod>+T%m1lpb8^Jb=P2DEM< zIbCAcDRSOr&-yvsp0!@)3AY&&L87No=#DrSH)f`e37nO+tfmGv|VqhH`U z{9+$&UHXk@o~3C6rDjFVx;+gvb7jA&$adCSVmB2Fn>-$Qo)gT55rV}XzZma6N$O_c zmteN3Y)L7+dDPZ=$QMMl|XI$q+>GDv3%JK_2%rvi zN1{!w&OW5eA2v}tJer(4>oA@rm-r4M{IZN@Pn1Qo+~jG2W<}}Ny0J*&i|&p6yrLK( z<4fueVwdV(>2_KjvI>RdxrSxQrOj^tl;EwiBY4-@oijq%DmLN47-Y!hD0ub2rkqnA zu{o_@mAHHvA{fTr*YNU+tIvx2aHp=&4dn4P!EsD%{|Ys^GZl54vEV@wU@z|0 zq~|5`_?&b6XX2yW{3I-o^K|3L3Y-AsVpb!YaE`Hp~b{cHWBD~6p-B4 zvTDr9)*r^&@Y*hSMXlLx*9z+O>{q5|Uq&O_mRNchrlYrob2V;|M=hm?fiDun{ zVqi6gHN{3GqwnKwc~Dc>n|6HK5jy# z6qO7z2nEPSEUece!~T+qZ`iVT+q{!HMh~x(!|vi^7SxZmDV)sXM3L0}gtTU1b$Vrw zHknhdQ*nQxF3k|3;}}`D?Jle|xjTymo6vC5sdES?(3P5Tvc70zUHJ+vtlY9JnWPb^ z1Hr9k!LCp`cBq_jm8mm)%l5dTt>>#shf%Vic~>#&dnl3q()k@yGo!~>T!v;pHi_!z zQ!77%#It0Rt&Vfx4|nC%JaZjYleW*8*vHwG2l~IsK{ky?qgl0B#&z6d^Y!I|E?4U$ zaRhyXl<8H;xTg*DmBqbncWL_6pd%i@`O}Eaz-7KACXY$CHn-HZ)5Hvxb!t+vB^__*kX_Ow{Tve7bpy>kAENo5Yfb-g9dHh~Q{(QzB5RmViH7jg1dzIU zjj9?ic4Z}6CcdrPuJ_H3=-!FfbBxsx%x`h3&;Kx41a+#w5KvSVt>k*WG66-*U;m)- zb)E;0m+%X+v)6uGkXrh@KG4{Z;5xKtx475wn06q|t}fOz zx$Kr#KBsDPm0lDgRzYEVqjZcK@;?EgG>%%2$V9DS(ohvxw)o!c2 z$4Fl-k?SMB`kdoImbLiYmQRwq2-k3OY>+_u z^2R%-v@2@Pckor7LhTsQs78NH!UB1;*Z4@T@3y02bm;WlPJ?2ZISf>DCA3zjzmyq? zmNg}iam_kV5+&|_k69HCvEI^!fP9%W6guWda+;)*ui{ZW;SU~1%8YK~^Snu8UYR>5 z;|gvK>K*#Al%KS{&b=2{6cOF^>dPR?5>pqK%-NoJUhUDNc=1nb`5kH3_PGzH%xLv@ zV(h-zic2D_bTTS5kn-fRJCa?;q6f_#2X3EtDjS_{p!imDvQrdcZAhtlGPq>I)A~d) zn6=vF-}N?DJuf2`%sI=BBZ|HJuItLX-4+y87|A{BsbHLc#0h;nn^Gp(#LdpD?5`^T z>8zjdfYjz!YK`|vs)7lRqm1-kjuMvlT9xiR?V#dms|W>6UOek{YX|Ri%T`W_aZOkR z{OAX7=4_A8yICV_M;cf-*JK)ulgaRNrj6Qlw>i(HHz~^{YTW@*%F7?mOj%5M{%C|uwxS+$ z2j~MCrhX>Yi&hq2RoVd3!<2JZ9ml~MN0(x~{<@t8*2G?!jDxP&Eq9GIyCDlxUEUtU_ z#eVxL7P!R*?d?_45r}<_$RG9v9xp>NmPmpc@n9_pU8CMWg0qe~qlnH;VaaPFT12@EKlMfwC=DytGSX3X_$EV}K zwSj6BosA-}`88<4bE>Q3BTGZWZUVcH-PKc$+5kg$d*Q(CWEkkc=!#bh1m2*l?NKwH z3*wOLeP>?`1ELpFSa8Kkb7Bw#9E?ZuFR=(CxfK2kWcjxL&zHwMh z5`wTMMkpB{XF!WA_-waTx!!L4mMIVQX;y8IO~*t{#6R9GuJdUEpXZZAp8QynUtYYX z-d0uD#MOC3^za#uQ*37Uk&3R)hV%M&SaPyFnJF@$N3tG+h>IhDXplJ!ka_shSR$ucspBFCnGH%zPc@KfpVT`^FQFROXN3w>kKuv~;Jc;{pj<`V& z+!pmK;9eiWR~Y;{WI9BX;6`fBgGhH_ygI*Np;nQ$M%mug7{h4XuAaWIvYxpChzafp^}El z_nMYkP1s!C-anI;@6v^An#sMqY9S`JOY8M`bFy@7?|#y94wdeI5c58$zG3HZDo^y# z7fa~*xD}C$b&vGwK|>?2*i`)89Dg$QvS;weSyNxslcJusDAyV1(TwUrwm6|dNl)Jo&9Xg zAfX_A2I9DQLK)fK&(A#jD{VYT%64=^wr5vhdY;lYw<Zbck7Qw@LGqoD;`ROd^imP{$Q`N?6i-JTt}VI{n)b<++M~*XPBXRygorE1x{O3@7CUUJ%A8T?>QLIJ&nVu4t|~6J zAb`xi6#V1L+$g>;s5i+0pU-jg&9R_1P3;Ibv4c@k-=<7-R+-#58@phI4&q1n_UbNy z4k$jKxymCk47ik;K>13YFL1Q?eg}Lkk8!K_D#jJ5jOeD4X7X)afx!~9Q{}ndhOvxs zo0`LfTN$=jLA35`$MnOr>rR@0VMF(uYP^vWeb9+PGbt7d7g)3`_LQ#?-{a62ut z^n_#lmcix(w=%*Se+ywLVU(7fwF9b?PxLx#WO$l(NyxAw9Q44e^Eb3mK^cuI{`oRO z7K>*Wi+9&>``oT9eYcK`rjCLLi|?L}cr1ejAQ5bbjR6!ZYGR??CtF*iqgJJ7s@#eEs=(6iR7oJ3Sy0*;ah;8+Zeot-i|E$! zEh=0p(b~q7{v?ov%5QSdxjkKbN;bPMPMS)5`7X-O8;5#`FS)v4t3Xx-H75F=m9kR{XXc3 zAvc)^!SIRd=r=#aOW3b@MScFwaZzCM2$5o^ZA+F>*S@FRr=6APrPac47sg(tIrhHB zPGUiv#M4SCd^LsC@9n8MWfReU(E{oUN4$zbEIT^oCW>+sN`$XYMERm>3(aqda!$Wy^R$jtuzYy$1Qd=*{oJE5mKV`JQ5CVQQe<+`R51f zPOE9<81nKOxDg2JCyHlZt9UFZ2qe$m|4&i8wwql3GN$)8spIQqIe7tTAW5evIIXvt z^dnqWd_Z0vU2xYHeb>dt^ySj-M>bpPUEBYkr=MtRC?B$vRF7nL#z$I}tg^y<#DN1? zRb1Dyw5b?$YnbNuaPhCbSMUH(z3%?dC;u#|_$|v0oRSSh0jl>MpZozb6+Q(3Uq&HO zv)|%`H?Yql#-Wk#{ zQobk{_9LJkpIgXgjNV+9Q{9W-1EI5*{`VhAM9|1~>&T0#r*P$1#=dBrPA&v4C>t7l ziuIf7<3jH7Yq)!VRXT9YvUKp(jb;>%!ZDdF&FD$wR!`^03zVIV_3R4`CgD?yot@-L z2gWl!kJ&jk_VWHa%*233f!rQ;#Rvq>QECO6#%khsZid9iUTbh9yNR@WzU&2<7P!qd z06i}fX(&PI_E~+ZZ(JN@vzg5zrlK1?@2b&yZprtj@wju<{Jzhj7`NRmk~k0KO@|8$ zI7~)ful6JvMt@@t4nJ;iWucVmPB3hz1hDX3AUw%8723LL~J* zasp?2tg@gN|AERyd)Y3p-%%UR>`k{_YB!?MbEl{4SuJ6oMj7xG-o~NhOg?Wna(rE8 z)N9vYt!Xy6NFCT~vFO6K6td1XZ$YS_AlISm_1rN8K2#G}Zayvdgj2VdxKyzM0J+kJB|B4-&Xq?NH#?3>K=Itio;3`W{x|7dp~QwbA2PgU5j%aO^aKeTKxM1T3S@$d zEQs!H+m5<>GVU5}8p0@H)wYucOUr>Yk_I-3KK9M%Z#&6sG zEdqTi@DoICWY(7EyX$Z2JcgbJvsX6avT?Bx$rN&ciGO4ApTZ|Bi2b8{#;sav0`2e1 z3B0KQ(WCbELHl>c{$Hb=3Io*)g4)y;f5P)|0nrW@7D4{Q@NPHQAXy0$kA^n z{P+0-fIgNwI?X7d4DU8oRG?N7Xa!+Xf+ zNWbZ$zeu%=3W&!4Roc@9|IRrTUcw^GYxVS3s zR*OF@vr^zJ4Py^L(=Hc15is=gE$ z(bH{9sd_*0DTf=WKWueo$5*91QhDUfLFPB2LC8|9{7iAUYv3yK{ZN=7O?0pUeIUB@h!wx71D{JsS$>oT~iD~ClW}OW(SI45(ykR2%KYwOlw5p@*`uCIY$3bDuugwh`D=oHqKNk3U@OQ(b9nsGYZ|ri}EHw<3YEIYHE4S4&6WU0n7}C7OIc zfdKuh!B$jDha!qtQ?Jhd+mB7{rL6K1o%k4veEDm~I9_boL#KbitjAVtyOYl3xu zN&`6`pnXf1{2u*EkQd0|&Rj@gupzYY)NroYA4d|I*mj?()IUlNS4LJEjK!)Byd0|> zq4~}vNV{%pV85^!)TaNjf~J5vKjCE;p3A4>ie|-o-F&4lo!)%KN&m-(=x?lK3Hh%^ zSeOl|5RW37?1R*>yum$U!mf?p<<9$0Bz1YB9Pk4TOKDW?@#*yphZ%=HDCiKfyp^c) z36~V1!q2pRR zFOzx;$wfA$IJ;Ql)2GtpX5iW|IL7~8dDKO9AMgGuiH6|!)$=m^^-YSzl9+d6NnI>V zbm8B=tsyLn(z(U^64O)+90EUWv`qz8!L`D7tx5ww^&n20lWac8Je9XrP;C1fS?F0kvAYNOhaQAtRH5r1^v0G!94_nxZdil)DWwYWB?d#A&dic!cxK)CVJS)UIM$#D zn$su|ayT@$;9Y5du~QfxYef#Lw&B+o`BjBV<)qx>k9Of`hR$6|I}#Y4LV|kSf zP)s*&_$xH#Mxn15wwnA)p?h~zhK?+~iIZN%E?G>^q;eAR+i;YARl3Oeved^e#~ulv z8@FgEs(mRZSDHE`hDvP|S?x$ulP^L?q3By1vHTH`D}c+(LmV+z{f|&80DLOQJCS_Xf(yt-!Q+XEMSxi8ZR73|7DWM<(i#n zA4_60?^raXe064jB8}aV_z?Y_76pT3Hl6MWUY_fFioN|<{MIK)=Cm^=^{?LHOQ(=K z0Ld-+uQ-h#8b7`rO?NFEV8o6|w>k8OS8SbT)XV67k2#~6By@e6O4AT6(<9wB;x5)y znevF@M(WH+0Ew^I4j+E|3l->Y&nv#M^D#LNZpel_&88~JK`v2e5HYAo3r`8R5j9n5 zU{k!Sw^(cBb0!*QW1ngf9wkE_Z@wJ&gYS;A9ye{rHF-5Y&*Yx%560@d{9<~zRl^c) zsgLa8WuqoW+S$+5XLG4=Tr=LSP(U3l>3{0D5i>x=nH{ZU9sHsT(6{}YhZS0a8&Y&v zws`4rUmml)q*fz7Filr3ae2!9QBMoFBhR#E)Fu3$^AS;=SFV{3KEAWaxA7^%oZzOl zEYL_bgk+XU-HP$(ZjuuJ3c)AI!(M{B?QIpR%f{zQdC@P|VAFy$JSU61B6u%vG~fu^ z%`_(OX4U;N4Z+*<^lyelI5w_|ry9$is&Pa*Fcv={vgA=X%b&d|ze_Il8#a;2vamL@ z8wutBBfHC_MOdoEKIyAeI%M)TtCcgn;-_xV&JldvUh-OrqDlT*wB3ETiALGZ26Cy&Ip+ zX^ubke5Yv=UpQ|H{o%uhQt+{Y^tY|Al-4}GiyZTw-9j1_O=;tQ$ojfk;p)uX@#wLF zxh8Xwevt}_WocM~%hboAJXl=C`zIv+!Ww9i(b3%vSPx?O0x;RXkEp`x4i@DE^>9b> zG;;hH5Q$!D^b*M5KmL@Qb>w@XqqUCNA{5<~Bmq~+^J5Z&)gB>(g>QHJgq%5x%N)>= zG_bRkvkJ?thBejlU(*X+9;Wrg7d1V`vx{op$a4zcHg|{t>b7H^b$uZzN=s)UxmCOsZ3o3r z2hhl-E1I2pL?ZweHMJ|H>toa1_olEXgAYTPZ|b-#N@8?9bXe*)H>gzG#5EVu0(0K` zB~{|I2NHhwdl}C4GoH)VxKRfAa8t-|k+skP{0iyxIKIf>`#wHraR9KIJh>F<7*2!P zqp=8dJlgJ=nw~{1aCnq@sTP7W!zF@deeyTC9VVAH}6jE7Lkb|>#X=S6_L%6^i6Sl&lQ2zdd3$iwH?+IDN`o$@G;Bug46T0 zG%VXqe-?ja8<(PMg&VV)v$5E9@^ zD898_L>McNUqQCsl0dAR*fBeF$C70pnp1is=B|ZV>QC-XABkd4Oxus$T~d6vlqcs! zBY6DoYujzp4(pO@e)tI99#Z=!d!YvdG(pX@^wGj-$+yIY(A>h`q5DO3W!V^ZNoklK zf9>W6}*M7UjFI;{s$5g=70Gy`p--9Vxy!!q6xohsM!1tptGR~H)Fppe$yzE#4kA&yBBVm9fXM3Y@ByxKgK=r<46A}*>8`% zX3n-MGx6r~>e!AS@lASC_t7D_f;l=+D)Z^$5-~qy8B{ow>aGyX%4#mUa=I0v!GTucpg8qZ6q05Z7FYkIb@;-Yr_|^Y(>h9)y zAaVDF*Zw_+`CNYYR9fmLTDisK3!|PBNilt}08ejU z(S=#jz7qLUU|?@i6ZPsq#HMkCu@<*0cD5;UG?NAecw?-=TYs^#Y#NJu{zO2$G*+A-r^Ck=P#O~=j z3SdJ2>Ankp5uPFZ!M8&EF>90OF0MOr?z#!8Vn6R1wJ2y|RT6M&49T&{RK2TM9y@t( z+Iq7)G{}hm2GVMPmJ|nat6W- zNMl$jay0{@9^L7WKJZ~JDvp=H)=UIaYn5VsfHohA7s3I`-yZL`CnKIfcX8zws>xGL zUVJ0#di7YH8%#x&0Qz_%^qqPD3HK3GZ+U;&1SKRw(m7E~F9kMTeFfQx5(4ExpIp4P z?}50!w~)Jqg*z0!2_K?F0Rw;dT=vg#lWxWhqNeJ8LzjEAYP$$vcW3HZUf=y!WK=AL zoDkqh1SYZ1{5Ih0$)D4`P-^C-HPsSpIJ1&dNhWU$>tQ$9@3tk&7C&*T3`~g+_ZF6kDYg>i0c-Ah6pJ zA;()FBvHF^CskcOl<7lWRz;8u&}G1To8)83?F{QPf(LSXKg`?M-fif*>%Oq}c^4NJ zYST?i4dfw<5gzpx{6-bN>8}zr^Z7evRG-@cKOyn< zd-`y{-IUk3^LyS$bi8gFDvI1ja{uV$-kUCY?|PtpkadTJ5akzIwxRQctaCltN8*vB zHTxtE{Z7621jJKM_UM-dka%yB4w5j_Zj8dwMhLN~I2WB! z^JnT`Uwcu?8xy+#WcTyZF@j^II$$>XJvBjnW8r+}PpMi*$rZjnijDI#pYk_xj>0th zT3XG4vsGGZfEz7g$a^TAxD&6{=e$Q~DxA1QEfGYqIH%{H-=+3|CZfn#FH$T6ln9|V zCEgQ?BiB14kP6?y!QFI*-More^pCHtQgXw{-;TO?->5Ox8#M-v`X={_JHL$lu73$V zWCc)W{BbEbc~J1?_x%cC;5BEAq?yjobT*sRJe1+_A07hCDbgHV!9?Pgy0C_&qUEnf z_LAabdJt_k?dXk9dXsB>2n&dPtwDm!HQ`9RK496~=1G~?5_)>w6SlV#6y<4rsew^2 zOa)A(2pI*u%|PU!sk8Cuk*YbtqoUU=JJ-kYG6{R)6;mQh*x4n>K3Vo1w_{|DEo*v$ z1yt{wRT}n4ca{(=8xLDWgUlVR7^bbJB;z;=;|)J{D>Bm4M-_RVXw99xFQT2lYx{4rc7A(K`nUrk{Wm)6sd+(MLIvrq#-cac{Qc^d=A5sGY-5 zUIy-vvm4?RH3*u6tG&%zj|VMp2Ck&$u}0gbCCL{_{A>{y{jn{80=+|dLLgM~zi1;(fwRE*rcEiK#;mUzpY7y`;xFcdBB#pg6=?f z*7aq$ACK^@Pg4wr%AWR!X}h$XsxPChy`qX>)(6`!|r57dI~sf?X>g+ zJon4PtCgGc*p8cv8t)uEcrE{OEXc5+`Z7iC=Dnq=IcIRqsgH;T;*J=afi!tb)FbJM z=SJ@4uYNFoxz~_QiS`7&3pX77W6H~SZCufG6gRemJmdxrNDEZO&)l$Rs6eq&!Iv#i zB8uOv?_h{Z!v?f21dW*M&6_^Q;{lIL`!TKuzQS`j1F$25{>?siSN;t;kYZ8)b8iMz zmnR=%Fo|7WE%%NdJQToSAMR8<+R#24zvH-GvfRhb-X}Th4%vp{y7A%+WVom+Eac4b{7&)AxS=NSTJhZ{*|*Klk0aW~I5_cjoAV znlTbkRKcw&K&T5S2GTtQOh=2~_8r%lm#y-e6TKH9_e7%-bf?WM-4YAefaH8S!+0$2 z1)E_1^lJ6|ZoP(E&b=6&xeEP=Qi9xXxFpkDx!=Z2a>sC=VK%<0r$-)NAkbAN65dBO zmkAA(kwB)tkT}!U3v{~S%NpsF;!X<=U6shoG00k0)0did+J=f{z}B;PYZEn943Z*T z8w97s{yGcb1|lEA8xWtj5G|-lZsWJ|Up=>cyL&md@G!8QS~owt*^P|lxCtw-$7z=S zZG@b}qYq<6GD}AW5b6QI8~BP`AGX}o-eKL-0t*o`Zst`iS*jW!YjSLhqq%r7IJS5c zFd80{!-?pB%y33@+4D;uVtDtma($^m#Wd?)kj6 zGVGN-Q}UPBT4)>ztM!DgNzE|A{@@Na?R!ACpf?AyL&Du9>3}Gq$45HGJL^xJ&ztaH z`$uK0x>UYA=uLJXtbc6-|FB|usWv(;>5PD@re>{7N2Em4czZnIp}GGrFwJlQ@A@O9 zCKfJQKJIPsMgz~L+^NR}E&2*7nbW5Sf>$HRgy{cJ6>oMwEbKShZknFhY&;}%SzF-h z1M)Ts7|1>BP8$IS)k5SV&_^~gOYLSh$t$u2-oqnC@dOb&%vgtq?o}fB@3vKVdy(*;Ee5d&83kmr^fQktu7^AmQg3;Uu`}DR zR)U@soxIakKYqxYtB<*Ps5Faf0fFCYX1gJj%J{luFO+~`xKJh*>rR<6lBkDX3bCD z?ES>WCTzc@4KByi6PJV85Fm6e(pP8f{9|JH0eCrQ#%VJrqF<*n9?QM$70@<&jH4i) z)HiXE=)zr(D4gNh*5P$JU^XXv;QGK@`{^4pz|*}2*iB8bj*XL@#hEtxpNmZ!u54qE=1`>+5!Z-#gq=InW= zp>?(y$yIsdb?W=Mh*rP;%}s&c@r=5k$8*#OH#;p>)Slf_L`_OQPIP4@b@cisaUB{a0JeRkSS(yNnmI>GS3rJeT4H{Dt>Z%I#X3no0H{L+=he#RjS z9EO2CV4EIn$9;k+#E8+JTZDt-EZCTGk5y>k9);$dG;*#-RQ*q1RsSY3I9XhYTi?#F zr{rG4=Q$n8ak@kg2;{4ikJ-Y#am$wP-4>t{_3i6aMoof`3^yDBQ^MsryeMbBNlXGI zGPp^@>;kD;E2>{AV2GYbMEr*;c!!J}({RkmcRN7-_HoEVm608GCsLRBPLw{=%zE}K zANF94IAFKqdiQL-edNoL`8A{bQ~GGND(=tNN*{T`p0$HTLNI=5CpBwln-nsYwM**8 ziV1}!y#wr-!Z2F4s5}Y8@m11CxQqaJt)|84RxR6&Tdj(1Lt17z;&Km*ldRvin`(_J zg0JlO!a_L=OmPCWmnHFt)=Sh0CYpAcS3D@oThTFIY7p{xuknd5MRO`k5iOtXHpv^K znJ5(BF1)t3v4HI$k^UCgRuc^7y2SqY`bkMQfICAg`XW$rt)j`Qz+YZkBxv2auuYe*Vp$I6cD1xMtl7lEBEh^pJ-Ao`N0wN_P z9TL(hJu`%K4BgDoFvJX9!wmo7dB692zP0{qoyEGBb?2UY_t|In{$06@8MRQTUsz6A z)sIfU_iqAlgxb`8!T}>eaJj-BrPx{ zL2azk_XTBpJPjRqw7a&81uJ_X9C@_L4ekHb4s_X&Y}F?sbZBNCzI#b_{Q%1go-nBW zZ2ybt#g}0c>KUh4sq1D+oOfJVyqKss zN5ma74%*mA^562I3Py{NiNL~*{e7G5c6>l&>|j9*H(BMwcW?;llta{9j`3W>)b9!1 zG}D}`6MXxp2q|JiatRfb{W&v%Og&x1@WJD;EwcE~2U+TO{_$tSh_0q# z1Jfi)ARmRNKG+M5bc*2nBU~i2|M$_}R;(M>o7FqEa+%h2@3>GVj7IiS1zhV5>agUw z{X(?SzO@?f0eLVNJ5UY-#c87_e4vHsD<#Y1fs?|JE&kyC3NAmB?#E7}FKEtfK;o-f z=I$aRf^aPjolM(1*};w2#_?}Xt(nB-XMkaj!SBE(C~NQed1FR$lTMGfsb~T$ILIOQ}AS1viJ!y*~Cd6h752$_oSWk(P+yfot}CnDgtgR|I0wM37%`p750%4!<7cBLg<^I-4&fm zY~U_?tl`}BzEK~$YVJ{E{(X$KV^YSmzQIa2MrCfy9IE;gyQg%6oe7a6mt-`PC0E8W zBmt>Gke_eOnPkJHTc4hM345Hk5Zl$JR>3!s`?AT9?7-8|Ywt7?8q<-L-x4tK!Q&9y z1pFEf<`3E$CMIj%1gR4RM4^X$}j_UD6=mb zvvBv#{)z7LtlDlGRAlWo{IG+22(K&ho8M`sI$^xTpxeg;;y82TW`0;PATz^B1$VyW zL+6xIz(<%WYE20$?Du5tL z)kvs}4@v(Ge>Zii@*c)_SEt6 zFPfeKDJPd++%W^x$NFYb$+&L%z1>Wx;09O~o9kaToatn5f*&k(Vg|Y#V0R%>*huhL zp=G6Jyew|V$?qgE3li_07c%a#av@M7G{>$o((@XZ-}D5GPpUhHdWwpbMNV94zNuQrGqdg<*z`PVs3IE+6DZ@OECF1sRg~ZzAgh*Nsma@aB$ba`^L+9L zf*JwlLDn3nvi$}lK8lgwq`ysZ{o`*Tsp>nOI@yH-CP({p9*$}}dsS`XG12~+3_=fo zbLC{HQe9TB1a3Sgma<5qCkAWAy4R%6TB)HMo*SoiDa2;)PF9Z`)ig;hOcPEv>DjKz z<|nDW&{rkOQ2)c?5hYfY4A5B;v7uOYKisUK7+LTur}x9!%+H};eWY8{dyBtymIFiB zEOV9T&PR8c6IKT4};Ji0C9PZ#-ls z$b!b44%!)0EjnDXq(wkqr1xjv+L>V-bO_k&=3*Qc+9u0=K}2PSBJf8uB6==!vSI)u zWM~McD)OWZp7ywQ?)hkq+qPC>k1-JA+`BP3fqQ9WGjdEc0XWZJWLp>?348O#j7z(T+9oJMW*6P$0(bGXCQ2@kx-1 zANo(S?wBBMs2OkQ0b%Ky?wikc{a1y}c-8dFOiJyMV}5H=hvy8U+dZvzCS`>v4VhD4 zy(*v&PG*hRG?+l*0chM>^dJ?c1{^%7-`ES!b%r(^N%aypcI+RZA0Q#G_d_R=2p!IO z#){VVpurv1qLwpBkNyCX?N_Ei06PZenX{l(mk;^f4rOq=#ISU~vx0G$1|Y?DBh7xv zMD@G}!ia+mTc)TVX9L^|>0F1G*;gugOXG=<4NBu1Lv0MZGlnH$wL(j!GtQL&<8|=L zSxO&GQAe0znKAf2VREF>vir{N;fJZ;@z%Js53Jva_})KmN6Byo3?%cPrR}Tlr)j>D zOev8MhOIwvzpmSt;;dM~YJzzXUVi|JVet4Y=>7Voh>>w-&SCJzt-a7o_oz#gBuSjH zTeIysFW|=VXJJ9rjWReP!RyTFu}VK9fNEoF_`ZANRvmQKiH&S5EU#*jnA`M|xX8ZH zOH29cTSa@Qv+~jJjJHzO6uvXu>ppOrIO$GA>1`*N7t;{IRp|nDYLe`XFR`nbooY(> zbjt@N39>@MAH9)w27Y^Jo0V*pG7*~T#-1iW%H>(gMfjWif&uG-4{igg5<-2TuyL4) zPaD5dxa|dHA7h~ura^~|jZi0T58F}`1Bo* z(r!VQ7=&ls*z55Fz%3fZsmas=sy*KHPqOn|U~lpJntqOUrt|j?lqa4KBy>ciBtefi zx>|!hc#&O9hD%EM=~e;1J!=VrdSz#A&BRPSPkx5?4?Y8!Va*goJZT>Rr+7TPlIFQs zQG?{KnNlLAV$A|_2DPpNw`!_R*}Togrmt8i<7bmkx<{k4v;lvbvQrN5wzh2Qq zz{*y(&*=0WU!r?m6KaD)jZg1{y*Q?zAMBH zL@MkrV!iH{Nl7X@85dKRS^jSIH8a2T9PA%owZ@Ef^(yBJ-L`d3U|t^*5%tl*Z^EQ2UUt3#M+OZI&446!+2 zO7J)9bSKAr$ zqzA=rlwO(?}arzEbo%Obs+=%T0CByE8;vY?XopM{|X_6^Spn2W}pH!Hc>H0zfJfZH@QSonT}%$(F%ciov>F?A62_EHr_zsC0I{+i(TQN7z@1BA`8 zOk^$UXcGNif@*4-<)hr+hnY01gp5b(%vxYNa~ETdDTjHnF8K*TmsE-kjb~n+tGBxM ztW;JqBm$J((i(^mcu5M$6-ICYq)w^fQyd1G-z2tC|7B&12zD7W_w{w+#^zNCv(EI= zA8!-$d9Oh5PT%mz$BVjW5b7E{3uNeZ zYB_gpUUL=Mw0yp1o#zS$YD}CH^{PEwgWv?o@p`2&S?AgP9*8*D#1nx*wnPWF8GFpD zOdw-OuuU3u_N3g%x7jIRjk!xSC-tAnVM7B2bM<$B%Vh861U4610(}2KE(EpX#4qE7 z67s~FWeN9(&wg#(SidthRMzw$_*(GZETv#iZ&?IG+VebWKB@={n#{w^iHLjg0%b8q z$&dD;_9^$>_lv3o&|Zn<3OpqoEmLbod}U3N`U4XCB8`3KovbzS&?6~b7+!#|qNR5K zxJ5CWS^+-{g}EtvuTL6ZR@L|hn3pK zFR=$mBKhvK{M0%PGXe4AaV077n9dA{b0SCHhk?9p3KI|~=~+o)Y4QWXlrxZ(k$Zhh zbEQNXzLJ2;sJe)m!7!V#h(+NzkR!B%;8&gBA)20uKA%poX`&;mdo!VOx5HXH)Q{GF z`me!RDY3GXxLU&RMTn(1;#reFa#gm1DgvTL`#uXrZpZuY$VmhZd?Re6xUBpLABgWK zcj6F~7M3q631XzO zRT~iaN}j_O%ng7)4>$DMCSq6lB&0}jH# zZ)I11w*^_%L&ng1NI#cUexJW)VtmDj1H9N`gOOdAk)rq!P-`3;F-vadIPP=HTL zU5-u+OcNsGIDf9)+;3(AyCObz&R8Ru@H3#nJfZU};PT(4sF)Ax0IsZ`m_PYkdK=wN zl>N6_X#j-Rm;l#0Jg4-_=W2_`0PD%wbO-;c3y~}nRpDS6@0s?(?`{bf))pRl{vTG# zp3O=fe+Tg84Zkw>Bik5vc+jt36Qe-6rlcVAGj42JBAihrW=f-^K+imp#w?|zwmcI0 z+y(lG2-1@*>X!j+TB%L;^*TryznV9|AE1p<_{MZ38`?;5ox>w=3%lek$pZj2;cM3G%J?)sm})24L}(_;F@`uf61$=J`3Fc=$#7qZzF9+agEm2pUWg1wt6Y1fE4&BX@rZpJ3)fc@1gM{)z zlmzY=>ku%Sc6UbcS$w}FuG0J!=m33E-DVt;BtDwT{E2I){Wi1t{RJ`WO9?5_+ zWXKm8zQ8MfpMTPR<})L+q_a|d{H>Y0^;6yVTefd#S^r+synCJ1la`ECK`*X7RBrOF z_-hW8NzEfU-8-%6WF#@mP;u0S!NB``%rL$I)mV!&@iX!os7)(_L<#n~m`<26bM&~Pnc^7^eQuzkRg~pMk46CS8*^Al$ zeyAq$VdkAOs@QeY!3*aza`u^u% zl^N`(lM<4cv}K&Cz{&aAu!TmzciF|;0aG$dD`nBO(y}}Y=BIRf6Bjh#lV4|IRWy*D zHnc>*dA_h0;;apz92G059kBk2Py|xilR$IS<5p?|_La^i2mo;UHm^X(ZW=!V7ZC8< zgah2rWOZ8*-R!gJWKEoNtt)W}B@h33T9tvHZ4DncKy4(T1xMD_Of^>daQ>F z(30<)>)|9h>@mx75JW4}JFkmGKO`hut z`6k_f`$P_KEX5d}{y3q7Kb>MV5D<@`)=)5yE-l^2rrsqbBE|K5!~gXLXG&;+tuTt?I6 z>;vklQIyNIZowWHToSBwGd8g&_=UNlKU&V^_G+j*N*#Z*0I} z*d8ZdXMAzZVkP1)_v@y41;O!MvDkfG#~y3ioz1Pf*>tm&#f5fXu;3sFksTkiDAn>{ zQ~=Whcw)58G@*R)H2Am5GR@s+_JS291jxW26OPIlIA6l$OQrjR&i>lKlASLy6LWE3 zM8pUsWGx+?TXt$IiGO-Aoa2$^VEhz{(*pcBLLHt)NK5+EZ&MBP5(Wuf43%lqi-t{m z@litnG33^A?C??m;lTR$1dM<^r1&g+vC4@?!*Qzk$VNr!t%qowIH@Uvd{Psm~njYh@~slA=ODh9RnZZvM3eN6ZPm!tdm#yOjKl!I3Z*5{APeeDx*w`zCTjWDY_O)z?lex~$!u6;XzQaFJJtD(ipH!4D4(7YfcYp6g~Q<&y#OevgSPU7mpl_@S_W5z4PGe9bF?5#Uo{VFNtSW zYP6x9CdiBN05wL)f(M#M2mZ#t2;_4kA!tvhX%KMueImEa$kWXKv?@Rlk3pRK`tMO1 zm%6;7#6S5ut33iZ9RX-Wox1=E*_n3NpJFgCu;=?L&XTyz&9xOZGa5pSVh$sGN8_+0 zq`_n_Yr_O}?qZitjbc3}a;*sTqwKpyDi>YXif>X&$lcOo+l%jTh=PAt065w>dMTSF z>eqbP;6(k=pN~=TGS~023s%{~aH2F<)=59~IW=srj>Q4tx@JE#M_&y)8igIJbrd?;1|I(|I11@&2oC zF{2CeT*B~#nhnv$JWW7(q!(aL2K}c=A+Kk`-Ps~L31_#PeK1Bx{VFSyY51Q*>f7{e z1-N!N*yt?AV2%g6tOyY?da`!HE4#z)_hMb6aq20$77NbcYy2V2akT1z7$d0U?1U^L z8wUUyl)$O=8zMW|-^F{E_I+X$Ke#OfqlA4o#R;yoyoZ7uaK?=~(JX!!jgm@N_|avE&GfXY$}WkpxH zaAXy5xOedG>B*8a>-l*f0x$1Bw~2Zt;&67t_8SXFK@ZJYzn%52hFG*R1WPo{axk33 z$z9%ds>FRgGW+0?!7oVfzlsIO$jIw9AII-ObA5M*ANt*@GS0*0oi*MQx=W)TFnjR> zumds-2kyIPkg&xxIxA4cAT$G<@ zx$&R?j#04=nXJY#Yf%?`3(pOu6+RiFc4#i*Fdk*VWzAi4Ay7oK42B?MPkQZ}%?VqB zpJbEg)`m`_e*@}xj(2VW;apVVmbe?lzGoqEl#Srp4JEX+)JI-PG$Arj%cB}B1OZ&( z6?0BA-fLY$V+GIIQfiyFoowGvVT-nS6!X4rkHPlse{{q7$xyJ;86TCA)n5EXEYy zpyHHXDx61D$)Cu^qnbMivFhz*k^+sNn!TbLOQ8>UoLuJikh4daV|4)T;1s3eIg|*C zhG1YmO11C_{2k<1VEyZ;SjBa0KAgjf(XlO!vTEwA!by3WPOj;Fyp|5 z>RCH`QwXxar)L`zJ>WZl&5gRi0c$}4Z;B;Pq2$s5XFJg3C1FUi*yiU zcm|e0bFy%|%g;@!I}eV~^Y zfG4u^+5a~=g2mrUSHLFK3v4h)Apxz z@bNIMW6?dCUner2+2^o;4Hta!d7xdgvv+tuxPZX#vdfBo#E#eP#C8U3nVsF+M@Qk> z55{YuuaJ%q==pE=vT**eo|Uuz3a^Dg=?a4 z3bS}V=#y5M^Ny>X^X`^E4gAB6NNe+liv#R;Pv;-Ixpoe!q+clRT{Ojx&`9qnDqg_X z1}McZcFxIj3^LxcQLuaXE(#O)(=O`E@@wH(4>Z2a&$eOhkx7ht(@+I^6II6tJvqk2 z8t-jH<)F^nsz%5!j?64DJiw6|gbIx${tzwfLfG|eSG#+JIqlNPJBE}uy|rGwLV4F$ zd4Akoc1g-CB%`90evJmR(YdtU)=0#agJMyD!L-Iu8SK8&cW9sY1qD~mX7>_qGQfGSuz|g z8;jj9gox-M)MUsNn63+j_E;6=3xS5@$=9lTirgQ*w!aa9-d2aNzp3uwn`t9Ab9h-H z&Oh;3j^wecC&kVH^jB{{i6R^?gH0h|+7TL^bEX0E%AM#0`>&40oxNSF=}w`dY| zM!MHx>%$4T%qT5-_MH5^1tt}|c9-9C`4C05j+?-&sO@47?t|WC7PmUiKr4z=ZWON{ zYkl2WH(cV8%o(+h>hakT-AKjz8%2q=ptD$Xg;v%s!JW&5kEWrWe4`$I|1qsQT49%#pN=ofK=bpJ0 zc=nkY5)|(2IY*X~9dC?ocC&O_yC=`i{6+5uZ7XJ(*$t^VwA*PUF}J!pp(NOIeRn$JYpfi&} zP2sCzD?rBg2!mc%a(0Mo{?2_tuvv-y^hr-p;~b8_V{mYv)`a&H05-4QeggUect!Z! zL`y}P&N0;*??)I9-a^Y@L#`c1pi+i|1z99JM{9x!9 z#*3d6l<{*ew{_4q=~aktoHKU6W#CjD^rU|k2sVWefewKFL- zr@;Ov;%+I23#=(-HjSaTqLU>S_Rz<~v>v7AlHh!tYLhF4T7QH7O7Na8U-I53gW$z8 zcwAukw4}%r<3cM&kl;L`$A?6AjV3+Iq~3LYFUanKz}(Zm`SA1(4y7;Fr$3pMQ@vHm z6_C+okQS2RvTY8}7fU+!)7>P6ER=Q8bgTFtp;_OAP&*&1TsxaxRf4P=iz`L>?ZI9-Iup|D#C%=2TmP(EPfz%Gp~!Z#M9}%gLC@+9gs_j zvLJ+AKuT~5$sQsY(_vr+p90xxq(5k0vN?ZonaoAIvY z+IzT{PUH6lf<@AoNnemI1@CcVMRS@vt!!@0w`qW`NY36i_U=IC)Mnt-@!986vzQtR z7nL@nfPm8<@adZ8(MwnYfqk7=`k8|DJ}a9(?FH3%c;j@rj5nvxCbusVq_8`C-?`4` zHb+>6BuLq6ZQV{(mpzXpVw%k=ux6w}pN(aI!%d>`{Q zl+uZj56s|?`;b9jGMqBW%s3%BQK1c@2x)(I||R`n@)ViF4M@vUhAU z+Q(Tgqd{G=Ugxep%YgP&iItpFKXB^J#Qx=#+tp&*9R2 zG$y1lFYu)!!Y25$`lvl;tB~{^UbuiszC}Rw^tTJ|Gu^8Q%x4+bx9S3?`83nxTzNGP zfmWaPS#2^q1{)oQf{gxrd0VrMeZ_6f$Cf>bs3?)Yi&K7)uY{9ueXSt7{DE$M_uYu? z42Z9Gr3LwfVivmqs2^PVtO4OL;z2q2oJTk}4JKSKdU++vWd7Q{qvY_kZi=XYJ|LN; z%^Rzach)Hk6)@Ad?ir+j%sy&B85_-L`P!|l){zqd%!FP&V_gI1X_fnoQp~%pFyh-) z4sG&(NL*B9s09!{!)FV2z5~D9&>eC<|I9l4(y#d&m6r2Lj9~>E%?CY~fc?oLqvz0F zLAKw4A??s@_K4e2cdy>Px%(qaL6Avu7UV5SNZ2b;vbOIUk+LaWGoxL1O`DL!PjvdrKJc(}rJ`HJ(d$2LcXqhE5;=xHhjur%NYx@;Qlb?;a*|wYYAkLB7raBdzP^H zZo8;$ed`zW_~1G`6*xxvv+_OM8431FB=P>l#|kFXot+7eZ5V0%f*oMy{X16KAk(+j z5(P1ArD43h;)On0=_3@K|M)MqSb@0OZpbU-q%XcGUNB8j9U;3-erUr7A1SO|l@BmD zebm7iu%cv<7Z-DdqL?<&sj(?hj@e()#N^Y9_l>yfPE-N&#z6>*XMw!;6(-;Z!ShZ0 zd}%G*?5uSLQuw1>i9|6&&To{pe!iHMPhWRpOz!raUqksq!llFE&3={P*c+AV9(5TL z{6v=U*mdimrv{xj?U{59nzvo_J85z+Dyc3~VhPvf$_)+F2e{(RFbj>spD!Jl*xU)yWW z8U@#aOTu0BDOjGDLb!g`(Anb46C?j-hhDybcIcIGAg{>%qUfGPfs-wsoae$Jf~gni zBuSpjS>_j2E`-6mn$+2qlkQOz^8~WiPdgW0tvUuNcCfKyX7>fybc#a{ zh~J^At=2tBG1E4gJDs1X@pXF_;4T^=={z zr)GcNyHx75zC(@3dZw`Nmb;8tzvIw24&uxIQhLD1;7&UAHXpr4esaBFwXjVNc8KXU zJ{~HO!j`X@T+DS2Gs4d!SlNOXjyVEf#4f5&txxdDPoPAl%AE)1BwMqO9t?1JY$#oZ zaf5FV!?^OX6+8vf*r)Jpmnx%pP;_StDf#d|WIqi3f&FxlC%64F~hfy$cOu1 z;Isv*)?oM&Gy>^&)U(q5<*g~0VqPA^%eb^4{QJt6y6bm@rtIl>>w;&U$YVBcq&Q#T z^)l4qr(3ly(=Pd}gwv7?rKo^uJt>)6OIR(EAP@U@M%aR7x;us2(xi>A&nlk&v(WU9 zn;Gqk=W|%L<6y4H{1KP)$)J&Kj2p@`C?)m9`MLk!5!|JaLZ0RYs4_wb9*Q7G>bE41 z%hSo&JXU!}Okis=Xm6axTa-`|+gRF3$4X+Zcm~kf|JVirDD-o6CDJoN?gO)}mcgcz zh1$HHpudSf9u5+kTT;i3jFp}78}!r@9igH((&dQQVlLcC=K@DWYmF^2FHykEVvQgz>*Bb5un!r_Tw@v;P?hODe#Q-sH~N+$wFdX{C$^7m)lk;TVv zj$q6SD%+0VT!BzEQ(>2YIeNH80#r?rIy@LB73wuV*i!9g`XJTA zmsQ&Low7e(JfPn#>l=};lt{>z&!=BJUb8URPeFs{qwmfoh-=ux4b#*+`H1&W`8|nH zt=AlcwG4T6<-Z!f(Ung;I=aISSu+;L-@O#<|Bf4du%9&j)|kx4ABZcq%~AgPxvcu| zHq#Hc%S~w-e3^=9jcpsfJp1p6Bn#xcc`f}-0b?BvS#KkISlYt9$L0Aq;ym0zwc7$~ z3ffDsxF46sa|10==^0sn^SeCz@7SUZToF81VMTx+=pw-(dp5dvCL76mBqRo!F{MV9 zq8OE@mlqdP68G@9Ro+joe}5X?OnqCI&johARgGUvk`@Rc(Vs*;%+yL8KU4f%pm znYi=3880R01jyaxf1j9mAf{%j>6b~y=Ouj{XzF)-CzPM~zD^I{4Rr6iHhH+DQsxrb ztTCJ@qZ%D#>%}j5?!RN^jj8w40})~~@or6SyWHdQH3~jW&8S#UL>0#s;$5I}pW30& zXT7tEmkQ*6MxeZDScBYi>+pZ+rkz5(dyx#FFY@32y*2Hma9m}`$l~V>CYp*Yripa- z(mynUeCmP!us!LezPkGRmeRkE^SFGPtU9$kO*DA>`=9CcpR5#H+<_6RRH92<<8_|W zCH<3;ikWf$h}?|J2?2_I(f?<{%txP8j!Fz`LJ;$jjkFU>UsP+R|K44jY8X7HTaC0}SkmG`A-y z@+LaVpp8@06e8QmUImgagHi@DUr}7K{Sf0czT;B{t3Y&z<&K|jjv916+B4krGXk+U zqIF90qLw&k3I{ExXsTT-v4~yO4f2Q5Q+HYl=Spy{UUQMqnz@2Zaqep%MDXd?&h6l0 zCve-T<1zy-YQJ1!H4r%o#dk8m&zu}=g7d$EX>H{3`4<-$_c8DVeemtV<>US*>Z zji~AGbT?qzBH9H1%ksr90;duuN!7;YRG(trX}t<<4F3A|s}Bv;;Z`hBTP1wT@U8#3 zMqnPJkPx)A829|9b12pFB~32;3$*%+=|3!_9do&sFL?XH{$0x>p{s_8orp@7WQWtd zr55SIcVl7wnRl`FA+|HQ0e1=2_qyzxD}@!L?hrrZy7Bkhh|6E8fi8(BLChD0Kq6MV zR#1xogy(t6Kb&@x$Y}<_dXsr9Fuy7B5qkK_Pp5AkM5;AXuz2KJ42ugkI{ILjleg!H z5F-L8Gf^Vi3jeW;oTnFCK`^=(eKrAaNx-Auk^qC7ciq!Lr@SUpyp2F#oWy(f!B4&8S6bl^ zZAKXJ3lNEL$Nk+BoW_eL5L%4{_@$YuG@uEC))A;iSh#U*%{z(NfADnQSRq#CQib%* zcCdApv3&KuT$Si%frrhDNP(ocTOAKi0dqF8c(iBFQ*o36u-)ik;5JwJ#TOSf9m!Q? zv_}Tq6c;4CXm*Brd8O#gnHEYijrr5G3(SdG^4Xe5MS9!ux1r7a4dW|}C zw1-*B_QR^R-_A7gpzKe4n)YR;frB)7IZmrsA`5F18hQHwoW%2| zYw^hY1`QbJ&qo8Wimu+ShWXwXLtp>d>d8d*;FXa{(ZHl?q{c?p562Iexa^w@!+3Xw zYWnGNI-R*(e=&noQrT;j*w4B`d~l_uD+D4jO_Vcmt!pE!Sl@il2nUwN1YC2Dk|`I3 z;hJP;F1Dd9ZCHZ+LicQA0#+0IYCCN5a89m`m96od9TrC#{590AgV!V$=DwhSc1Gdm z(20;;w>H;H`n?EjM6L{=3*d*3x1k5$b*c?r7yUGi5G{3TWl|5NUNUzAd-Wn31ZXja z%hyOh5O=5?$uBaoqYO`;0O5#iJ(mSF4M{zAr^flu`y-r*T_FJjd;S{SRRBklI=Zd8 zO}0b<__^HKWT$Mh0AZs&gf;f6cVsgK*Omr~;Dkzt@wLOk1qjNLzMtTKy(7gQm5~N^ zdnT89^*iJi86NVypOoS(OstyD$v44j1#i9-6}gF{u!&4@4#8^`)GSbc%AWGAH zonp(1{uK{GhTmQ@=7*mHjmDqs%A~G$bUbGDne{pVzUHd?yedxu{MpX=eEP+*8wfBluA z-s?{dOAmJ=T2aKUpMU{%VwC|G0QNL>7&^?lljz>cy}Dw;dC-Xfn)ws+udj`>y{-*S zv6jDxD*hQsM``nTKoTy+00u;DTL!b~GpfAe^v?DtXJGhsPo4qBHrSxY*0#Jm&k??A zt#;rZ{-1ZfcKNQYe9y@Lt57f9lW%gcrt!u#9tBvQvtY@btc$$CqVBB&qkNvHeRe~p z+HQ!F_T2M`7K_Z^A@7FUS>>3hjSg~eoEX)@)g)JzQ=Xhx(93_f2$t*3(MyS)34{L) z^|cO3r&(32Gj%KQ+S8BI_7e%4`C1Y3yTk+dVz2l%PYC3@x>AcO$>D6D$jx@wnxWd< z>YiJL#opa-9`=z?4ZlsH9<`|PdOooCdxG;z^^OMNtsC-`F-IJ};)Is>yPe6FyLv*%6Ji;+e z{M4CEH)^k^ts9o43@UXh>j?}74Ms(Ta&<9;aq{ z9{R`X^*%kA>?u_^xk_E{dsV|h{9Tpak)^Sd#qW3E|$dd(F&WeX{YH>W`vhjCRH78?e`ld$x{u*)`V# z*)|=s>mOFx+V*~nek)rKOoGHv{Kswo9~*k! z_RjCpza>4iha@V6qohqD?`GN__mJ5#vofVzxgry(^!nw;aOxvx^Wz=`t7cFA#o@*4 zTU7-$?{qaC^s<~NnVyuJf2EfZiM*8~TPQ|;;-I1}2Kk=#`Gyr~=DkN(%V%=c7xf%W z{~m|lm=-Z(40;)I@~n9g65XCH^(FAZr;?}UfI-T5d+Cq#EiC1jFKL;R*((+LW-|t~ zS)#J?P|jgCv*)VLv{r*un|#!?9OZd-2iz0Z+BdY5)(i(pt?xCfhzx)9*dFgJ?#*IM zV-?CZwRxB$sLaC5L|Vi$c)pF1?M057JG=tkWcYQoALB(=bMK`GE$Ut`=HS&cKAy2Z z%9a7~!CvzG-n5}5Pe=iL?K+3!T7Iu}go_Q|soID0^{+Z!ntRPdkIT>bfr`Q^k^gA4 zOVjGoeO09Rd+o3(+-|*<`sZNj7Oxg(u-S9^;PC;~hWfyc?BUxX#+km$Ry%hJ>I8NWvE<)rhz45cJ+X-54InqzfO!=wJ zAIwR7w^Lx&P+oE{P%V!$kBP@ezX@Un(`TE7>%DPtFyKFO?Dtx0x{i~O93)A}zHW+@ zaEQ>kb<3kK_TVGE)-x8;4KCi=u=|ydcq{3ob|uJweCyvHIU1P@QCK`FVX=5^h9Fsf zFg=#luG#rl`!ff>OsQJf6=L$Q$!}G9mee>|kEJpB!RM9s#n;t*kzaYQ0~z(_k}13k zZzIqm6nz!Hh`uW^Y{f>j_9EGUk*fdKp?O8-I)^m;;X`uEv6b8Ni{kS?3G^>%sla^g zt%dh?su$l(wf1aV{^Eb?YWt81Opz}NaQaf#)%T7{m0nWIHj8R6wF+l(#cAVhp5lk9 z4rK;t)lJxq+;DpR;!L_qG3p%q$a!6J3;Ecwn~BR0TU+tjjiWV`m2ndTOiosSXw5%@ zoUdrCpRZ>bl zTJ2X;Zg)5iD}p9w$2vSlcNaq0P0Sr-Pydz|@6AT$o&)=@nYQbn zTPav}5MT5k#N=Vz;!Xedm11be?z7Do4Ng5eX9*r^r(oH zSBO9U<)4dObP2VdZrrKMshM{Bn{#E^;gB1hH}4KU6gXp}Hj<$(*S^1cS9X&0ILIgR zDhjmB(bN%6YG6?ZXu7TXs~Nz4&cvko$IO8$M`(^_;vu=3VePYt+a3dXQKIIiL$~|+ z&sEJfZxqOcuXV(0b@2|_dgwK3+T8pnZl-uipI^TBQ~$5R8@tih^qMhv{BiP^T;ES5 zA&e+@yO)&r+Jpk>ncg*XtHhYia=T@IdVf8(MqAHv$-L;p7nW;`PlMjNZ-j7XS5oyn zF%}xSw@NCyXs}DRx=O0zWdACeiCkj({WpbYlm+)^CY|pwUx~f;%HpZ)I3V@Ugf}(U z-y>Y4jx1x;5=g&IUS({K+CYg9XX=P2cQ_qFS4arO{~bB+qlV=1@0$x$GDyj|gH)N7 z#)l`w4ulF~%uc2ru4-~#TkkjSxMO0OKnaw%TA`yjDaUP4F*;e;+Ou47^cI#9sxK(1 z%wJy9S>6@&2`b9@4~G<8Mh=VeVx|6Zy8k0W8e^{rjO}w0zB}N&5x=(P(-&fczWiCw zmD9R;-+J(SejZ1eh3&+(_jTpjZ&6vm={Xcvt`CO%a6!>xMEj?CSb72T2vL8~ATI_t)WXse8_i$IZUS zo>HbERSw){R`arrp^U;>oeWa!jRMWV!3ET-^?$fEIbtc9{!g8TXH@ z8LwAHSd&G=#>KO-1|_1teOuY>Q9`uJ)SAzRvZ?%?9rLWS9xBlKEc$J$|25xAW6{T} zv3W~=^)xS@3~5;Zd={4Q=CMq_!j_sPBsnOO`+A|PR9BBc(i966lc7(Q*5`FJ9W)>| z==bxNEKgx2eE%!z7Ud3mWx2fW_xW5t)o1}pz>Zt(qR}dYP<$uPP5aeUO6T&z@ZcEb zpNS7*xJWo+-d6`jcz4)^(5@nug}v5zGp5^U>M2X z3-NSUkUQW`wpDm7R;e)5(qlKtv9HYVyd2=VFB5bxn2onMRD87bFRSLmkS+`%sI0yD zB!Ru7)f{~CJN`vM$$?RvlW8C)qcY#8$&|b4gZ4&mtsWI^Eky)&8=?Z8Jbw+|#UD-` z-Ew4`mg#D0@i86Txk=kFrq>rZSmjsgHx^^ztN9@E>-Z<{TZJCqxoQ|*dYaP>%^9k; z%SGv&aFny#u)TQS){=}p3yNR;G;bayT^$v}e_c%Pu2A9^mikE};Lc3no!eqdul`Be z=(=3`0>|gif&cmflfq=K-E6_%{qrAI^`2%a*c!4KQJJ$b*sSX)3Oeya-j0#9M=##y zpYiX1MHie#{gj8-Rrl&^O7`?{22IP*Iv~&c>Z^`?U44rB+}RHb@gvLG+`lTKucw+7 zPOq<~D-X@Q-L^=T4ec^8cs=|)#5^Kv!P4s;vpr+>q_O}IeE%ia+wXd+<8=`+ydLIX z`p0wsJc`tim^|=}v1lJ`6ZrmGoAuT6+Vb$v6-nQqY}MJHWM*$O##B2QM9@H4=Qr#v zrjT7(%I2ADw_QKUt> zTLeU;Bm_ZF&w%gyJotX^x6Ze|bN=|wVeQ4bX0N?=-21+->v#RG*op`Fy^4;SV?RN! z0AmTZHA?(X7|I(F4u&^-Cg@Tgl8Kt|{cy6-ndX{Ql6L0o(@TDG_8VvLQlhEV^!u^R zS9vD4#B0?9KcwZgu|wFLx<=e5ZRU8q-84~{D?I9=>boU=*rXNgfTTXevpYofHtf~{ zzN(`)DvJ%+cNQkID0HK3x)iw}w{${i(G0<~cVmYZ33lEIdqQgkfgCiNJcO=3jJ>Cl zM#KxlY2Yrydm(1(81FA0ggRKp-=nphggX|(5`7J1RYnEY$WDnitshi)awbta6_Ukb zVNuA1@+UO|AR7})5)`;F(L0850VlIw_T%$d6!g58 zw9^>qHt5(HMevv}7{VJ!nG3Zjvz{8H^ta&*3cIF_8w&F(;|NxrrNe(NFskh+&&#iPwl9`6NX z%g*y2mdPMDnpr`K4u9lg*>3z(A&VL#O0TDn#T9DRp9RuY^)!=tpF>g?KgUUKx*a0Y z5?|51QQKM2Slt-CfoXCoBuT0pRz>W-pNjrCVH^L{c+6SWM4EE%niE^J46*1%UtbfLw#?@)aWgA|hYu$;+i#D9ei_ z{;O2`B$(^?(WGGSmRszO%FRy-HW+102%geomb-+6NW~AGnYONl-_I8|wY}JTMYZk5q$wbt z;Q5PcTcE5r;rWKZD`aZS&!V`AVE)HISDNk8pAf1-u=^>v)Zpn8R_v(S?}p@E2OP6b z=N95MZJWnOq3iz06!+{~_rDNDk8Dt!F&<)Ye2jGeiP4u;lXcf{6UDhI>6*Intb(;C z9p_*+>*QRS%@7q+Lqh_5!?OpvoiwbK18JM<>lgKGmvrQFO(ed#?ImmZ$RILD;3)$( zF-SJ0Ctu&1%?>-QTVm>M+h%ZpUKh$kE=;p1_pw6Mj|hRCPgnrfgL3@6hh@%RckKS8FH|XLDVpXY@SeOA@;AHH9{CNw2zx=SDO*~L&Lp2fVj z{1|!A`uXMNvZF=xh=wEiOlL+4Px&ln5VPU=(XQ;MsC~f#T zHAB-H#z@LE;r4o&-9iu3eZ1#kim%R#npu>{yU1iGalQj~iLHjhV~f?f2J&^UE;eCH zTVdB_JA>MYspmlTOp?+V0FAriNF)Pm{NwdPVdmz(uO~6^ zCtF^zbS&=*lG7kxaqriCOVYP zc}W<1e#Pg1{BCJY z03Pq9;=EG^DBCO^3wIY!dqtxSPUKam#C=Y~xowD7Cuw5_VJ5?(n)6obDumZ!-sRsf zt8U=jjWN|L2*X}o&Ho4%Z;I4U--sXb9tDmJhjyzIPmto8;HQuR* z0LUt~_IVns(Jas)8CNR7lWFxtcA?`r%l&($ZanmFdiGHxM&UQsb)4ha7<21Jqa!tj zN8um-|jSQJjlt}Whh!*OfjPkaT zz&o?Jgi~0s$B4C@mGI;USZ5yEs``Ah!<(ztFj0lZQ5e|2VR;*4)xe-}k7j%V`2w*F zUK#O+MsEkX>NwzNYBC|^s zw?eLUJZ~_G%2QyS+x!BljQBI-DVR z68rBz2YLM?WN{Hqs}y4$xMZmRF(6FVkX)H9$VZI#t@)OigEGFZ3N ztsEzTVZY{OGUeGhJo7?#=#-c*e_X7xjgxKIxxolt^Vg$M&}_wHDxB_tgD}DfC2*lC z29BC?oH2oLYB&x>P*Yi<=rSvGEA{^C4W~A`C%l3!ZD;M*)LoH0zoH)<2hBGnbn++E zQA|CgdPZUK>E=4;0A}g;?6FKF@)6#9M_=}hyOOl|#Ro+`U=E-8C z%|xdDU*oR*;y2ijvF=;Ir#H8~?fXhq|L7rXyuH}IN?H&nqkGD)P?O`jX454V&~jm- z7w@N>UPKdqZ|ydK0@}SM{^86WQ=UDK(K1^#^>?_`HKNeBWgY@yo1c2^xdSY=3Psk#iHv z`Tp4puxK?i9%#&quHYmgATBzS%TlApxhs9R9_fYTbcI6WU{8aqVeE zEDdXXZ7mhd^ap|`VkM4x`8y_S1-B_Kka?ZZ#9_!Ellx&&V49kmS^>7yz1Gj1v-PM5HFNX4L{8_YJ68vM@I6r9bA1 zNk1LX*aD6RAYvXwuRa3_!ip<@WSr_7(rrW zngOdRFCVHfq^nQv@M0dDKA**W97n@G*RJ;fKdt9ypKnHAMekS<4Y{Kc3AATW8eY41 z;von6nzgxOFcCcjIAur*sY>?RXPrdtM)2&GPM6un9%f$C(nBb`u(N8q99ch#&}q%fMaC{-y$Z zUTt)RFwtk!>IP*zYE+DD3O0Q5;)rwubThxlT~j$wy0X_LcBybpj6_pPPX2S*7LN&v z{gmhY7Fj4q(0x{Nty#i_8jWU98J??%>IlH!z7RyLSXeTVEusqVna zl5teAGperC_Mosa5Ud536PoDnQ5w(l?KukbNzVm|%7m`Y7|mBBxig*z$^R^>0j)pd zU?BQISJ`X$n7nBq$^Q#@b^k?pG^6jJd~S^1i>i8-*P|~k-TX=|bQZznGg`+hw9pMC z2(wA>+t&UVqWZiIbYqFYzO9;6puyY$imAD){Xyyb#)^hDc)iVPS!Gn2m%bA-KSOz9 z)Xoi(*WioyAjr6?R8g>-f-hbZ_g7Kj^;S9)9~B3X>H{4UHYFmHoE}}(Yf`G|L;U^H z-j##vS+u=sRqpt;PAP>&!#+sjRkLoHfwbWY+#bcrm!IG{%$7$lm5V8>d<6OAO4#e- z+AX$%dA&hYODS0As%{K)t65zqp##dXg8UPBe0UC(-n5;n-z(xySWFg+cGfp5+sLvo z08O#tKEYp_1)nKP+s|i-<5P0~_`K7W>2w8V>3q;6{ z0#2t`eOB)oI~IOEZWlYlroC|e9w#mp-Wo3BiMCpi;2!9v>dU%0u18KvJ$7B+_TnDNY0x=Wibvv*FDe4EjXJg26LujS z3&o`%pGx?~ zON8-MLL?G!WK2doHPsmYfkU9ab55^~#6hmA*y#>(&#QxMsc+JlQ}OF03v+_SoW~{LrzU(U?u!VlA)%u?_L9kTn_88K~C;C&@8hwE3$pP?0qxBw-}? zqas~D>~sV{Wb_D~9Emm$TS{QzJl%2Mmf*zX<3sL@;J#9>_ElKPXye<``*(EuO8=uY z1-<=LqMt=~?QqB8!>9R`(leRV;m)R+VcL_<{&2o7_0@NDM^6^5Am6bGSevkhS8i)N zIU(j8v06k__p;rV52dzK?Qh&uxA>OA6@M!*Am6+_ROKK5x?NoEq|2zz7eN6A3^A@0 zu4>Kq)OWe7u9=0F*hPkrNYZJ1yUk#4iOLAR5lYkwZbe}Pts0#{<~M}N&*Em#$rGg^ zd3WpXe`Njs!SpojHIMpZhu&p-!gW_bZ;B9w{SWdg<~Gxm$rE7m7`gPO{Tn$N5{|od zapCvgF!V+o45-ObEzdE5V-113#;5Q0V-!~kmG~*JU2gJOlilat_iDp`-yJQ7Nx{f|>1SzEmCuyXmEbfO;M)Y=FDVTtLA#x6CwixK2eSTS!iQH5o82q#?%>w{3;b z6UU9#v`Ls(TpP4&DTWyed|va`Ft99RlhVW4lx7YQVuicv7GsCwLdc@@vGz$dwHY|q zQd-i5xn5z;VnVUgk3qc()o3 z@u8rjFPCUxqKfFox_FCgC+LWYOj)q#mqKnmG1Bp1-3%&Na+j|zwPHpdzrl$zlenOW z4*8Uz33o2kb)Wcft_J^_tKcP@aDbihi?XZ#3jyT?Hu>i^SsHM zrAAkUU4SSh?yTUdRR-#LSdQ7{Qn7BXSUftX5wzp;hrr&K#>Nw>8faPmfJL)a086MO z+#y3dvWb1Y!R${nvbE>E-_QWkS_|FkKK4L1v-_rK$v>J?fG4=zLULnS`rMJQln_p` z5xaTY>~g1tqm=L>;c2ND#e4owRV|~vtg>N40Uw`7&U&r)K4*NWIrzp-c_o|;l7(y! zzwtv-|Iq7R(yIo8&5}1ig5R;5IH@x%oXtcfx>jl?-jGgwG#(y}w+ZWr`%R>ATo7ra z4nUK?ADAti95WR4-s*4_bLrNM&I{C@B9DUV+kvAGVO2QzO1|CtynJZ00uvqrWs7A)kTKWIgGg!*Ga zN~z#(nl<}ZML(t692Mjikm4AR3JUU5$*TT9_?_EKYb{U7b>4MWv=8M94~_Jn&8YVA zdNd3X^W-L3keWdSVpx9X@cdh|GQdfe`7yLO*<;}cO{hUL$hiUrS}UOz%E?iZEE6J< z%ksY`#CIV6K}r(2_f>?5s-2yJb77*SilV z-L_?BDYl(etkIbq98_B7C(ZY0oq_v+jNY6)ckKUR<5xieGyJH(VNIqct4fkCO8S|} zIom_Xk>rLENo)N{R;VhP7W$*$XJ0+=FqDBlfwj{T(?UMU3C0{R$MP#%%7#l*& zdZWMv>a3UiDR1M^Ny?Pv;Je!LZqQh>e}t!{ETL_)M1xo|{Yb4=RRvN)xARcQ z>xTO(IzpZElDl5&cgU>aA~$Wm+v7HGPp6Owq?ygL>@3W0CuO&})e*B*er&%+fimA(2j`ik3Q3p-WxK613MKA}x<$7_4lq#9| zGd(wZ6L9@iCznulR~#sr z@$nR6i8X+mL1!&O1X#0N3^V<3M$iWm`6BQzYyY6WBQDUwg=-$qOs6)P)~1dJ@N=_} z#Bc-3!$S6^{w52^#9fH5uRN>*Imkcf6*;E-fHt493HJ1a_IPb69jZ1JlbFUxlpoye z2Pn~i8~ z-n*vvY)pyI5k%NwNL{^Rj-kunIq28$;G<;yLPyz`k13&z@5iFsWC$oV_UqzR_Mu=+a8Pmo19QCJ_o4HZ^jSWSzjkqD@= zMU5O6@MNe0Zz+_x)&^P~ic44q5oyWqLR?;_4X?yfACvF<#$oDx_4)=jwYwW~w^oFR zFLL1sVAn-I4^U4U?{NzH@GMaUiQD)trCc&GSEjL_WUxYJqe(6zJuFbendz3=wgv=y z{2|N4(L3rRuv@4UqBmaTX6c7+`P(Chhd_2!5nOyFT4sW~yzj|u=ex?NLf0J=l z7yh>Cc(=pf{&pC)BV`#c<{X01cg4holmYI`r{Lt>cs$%ep+SgiD9$(P?S*|^{xp-& z&t`B}Wn` zmKZZJaD57A=|@|2Ry{bAF-5P`D~fBkLnOM>losS1u$-?qLS}6mq|#+NprXnYDdbgZ z=ho?rooock22sU}70gesf_B9#l6P`tt;C*}%O)eo%M!Uhnb>9VSSFs(a5r4gXka;f z-I6rt9R19i{n5~$s%fOB6W9-BCq%!CpMKSK!9V?v(%Zm8si)pQ1Ih39Q?(=;7Va^t zPj8owRaAfXd2uZ9!M9UE;Xb42UZk*&SQw4(jr{W2LPfY5MOB7*b5ZRSUdsB3VBAZC zjd8ntqU#D&XM2UGx7Q9|_R0Cqx;Req*eT3r6~$R$nOnVUtMx=_8sI%m1>5 zd#k$gPQI|}m!DRBoIWS(wu)BEBiGBqkT-Cv-$pJo9c}A$7G%v%+2qhrCL=xZS+zU1vnG=Xy`xFoYI2T3yc8= z-U)+cx}qy zBs{>nVMCeQg08)@On+b`Ait%LKs+Z|R5qc_gqAnenaHS{hbsZqt-v(e6@l(dJbGg@ zqBO#FzNhE#rhU{ZcC2r0?LR>j-+TaE4*(w$83z3cEXA9T1`F{F;jjjK> zfRJK|>7^R5<@So{G=-^w>ZEMM$*c{7Fk!xG8!8A>uDW`@j-kSdaK`BpN>hN_d9Hp^ zAI=3eiV(S|^>}ogCG$_B^dgmt2(u}yh5#!x{Cp#Td_Rr&Q#jHfN1~Rno`t!z!U1;3vB|GFwf1 z{KQQ*!?SpSW3V|a;>{g(TQ|%6T{3YWgtDe@ZKne=Pp(8hT@E?aS)O~kzRJV*;YN#~ zC=su%Xl&?gKea7dhf^u7GHg1cu^sS!?4`zhiq@E}(q6jg!iRsxV`*-0zw@t&VTu{ap$y<<>TR)vuog)&$s20je6T-?z+B~BV0 zO%NymR7egUBNEhC(^o4^C7eld-r3*d0MapY5%F^7un%G7EKOA-tOgKx(%-a&WYqVE zJ8Lf^sjXq?CujvzG!tHh8!zyd?OyRx@$>Al6CiZ(!OJx`G{d`tk!*;NXVPKuaKxwY zNOZ^JXcrF{>7zKqs1d_KvuRM0x?rohOU0p=s*KNQZxC$ojbjcAd3Su#==K%`9pjmR zpZ4rS)Y&?vFsY1w%)ZQ;iyKS#?UxKHqgmc$f<0wVos?z2(i)UYsY z4bSD+E-P}7t`{2Jwd9G+Ws&SZZWqaf(Rx;0j$dG8eb#8r!@IS>-19cx&L+<7T9yS$_^#d%k&6yf|1;5&w#pnlyf03}Sw>kiNprJ>K9GMtr*fw16lZ!;*Z$q|Mg71Lf? zw_!M*(pPddnw@^$38%G&vPuaS^L=%=53w<7v^UC&}H zsU?8U(rtvlQ=)V(Uc3(1lh!M-{~JiiHNmfym|^0Xe0%J*>G*JSgLFo3^R%P)-M9}% zO$3|Q3u+;s{T&6k1czN7s6MN3$s`n=r9mMfC285}uRBQxA@^4Vs(h*~50+f@e?&1I zQ;D+Y>c`|Jrv`SkhA#%lM)mLpeEzV(K&KvHY840ON>@5D&R#DO<<+4i#ZEli)@Od= zelcV-erUu#?`PD{j4tl`i%iJUyJq&whPiLB`}!++8-H<=@%o1bPo-7u!2}ST6*5Ju zggPVBlBcgk53Visg-8tFddsuxUqk(!g{PNK++-QR)FYVlM4i*#Cl}B6a2&rSe8A43 zLtS-!8~7BOQ?|aj1!zYZ9UMnePz3x3SiSkI{1m|y19z< zv@~1t=B}%IMW9-;AMo@uTd}9^K!S?v*UJ*|=gFmS6ReZ*m}eGCA{l*qV|fetMWzk= z_)wk`CcpxSV9ytCyn8^`g!mSsR4nlfH3hm()vSCd5{|I;nq66Q}y(E(yNJQ#d7_x8}Jnt zrw+Fcs}FDWOJXyeQM^y$CL|hP0k?U+>%G55MzGirS#baK?i++feNcn)%<73VO~RxA z*F<<m!%>Jby$3 zy_RV@`?2_t&TVM9-evuKO5LxnA0~!QJ1{Y3>2_3gvVl7-e)^&l*GF?c@OU>RWG2zaUo*bLcWP?Nd0bm9d`JE0@5ngThi%ZpW`xNvB)BxPM%Y5yT~Y6@5oX} zO(HwssA~RF6(nsfD3AABp_g8)>(Y{3nLpe@{cDq$H9TwU>jc3NOBa$+2IHFysLz`K zOHJ)0tY1ov3?o)C--il@P$Ghzfv!%5pXTU|kUQ9LbK3CLy||yAt>vfmIGqlp+%M_D z8$zq*n}ZcRRo=c$DVzC=U z1jJ;G@Qr9Jz}qnhv|4Z|OO$BPJwEa9rIZJd0TEELCWJ?K`u*XI zHxi}QMI|Vf*yfW;gh|z{SyAP^4BFP9TK^o+r8|BTcu@n)7A~iWR=aYNpBMgc89~?v zLS?)}bM^8B0_i=Nib7?;C_TO;8>f(Svck#=cnzUU{e)bIktj$W(BBgHk{`iv82n-u z&NiEpn0Eu|#9$|A-ztzx9U)?9&@kJuu8jI`fU7fL>+|%|u>ktjM$> zYp$yrOM{I7*T$>QTDAmw&tMJOp*r(ugDf|e&?g-})lz+I=7);&;^;S^Jg60*QRAwj zU+Hl~7=02iDRsM#pD;L|<@TB1@wQVXJ$;cF9X(2dF3v7ggo@@(x^@sgOS*R|icl*)}bTDP< zS-|dPAC7+p;_qO?3xs$iHv;zA6^)XR5Wf$Ag%HGS#T>H1yVqg|u&Bv$G?shxWMy<~ z(_G`VwXodxW>uWZp@D;Ec^@%LUNB>YJ?JI=q@G_`=j1UGy^9@bHN$y1l3=go-oKXf zrNDoK?0SqXhVu7=;kw9PKl1TGvEZmZlnb@0nze-oZ!WCfwMQ44)^rpKwHgSKsthdK z@#s|jyxxyU6n;N1}1Iun+^gejOOzQ~jZHJrUEDGg;*Q*ULtzi(lDz^q}`R7$v z;7?bkg;3`I4<{>Nl!gbJ^RI9lw_D%xbO(7uFc|0}r_{Ab!1-k%O@x7_e zqpSc*@CLF#f#QK`9b2DmIqlBA?e)9dpExk>_StmweqnMj77H^l`x`gui}YAstfOTJ zWtJ}YxM-f>-POV$=Td)XQMn&{&Yqw+D0lw)@1&g$Ts4RiI{<3X-X2-Z=nTkj zp?Pv!9XQ99Z^#eQl&9}@vQNJZiWr}BeY^@aFKp^P%rZ}+40Q+AX2#KW*#L?C&%u-> zQo+vr>3YEXuEcn5KOi$-N0Ct~Z+jA<1$I)rh_7zH>)-hS7quZ!fZ^>c9GD_zP)0ja zk-a-X-Jv`2U`9|eTgi;$GdA@Em*cOZ2ltwhkIM8sVRFQ#`Ry-N?vKwt0GLbh^OXXa zh~$ibNc-P)VQ7vw7}ir;%^=BF~LGL7{2C^JM zjjVQfv+RKHoQkcGc_kCQGwcn7^ip*wVp?8AMor(2CSP&3!mt~3!TS4!k9;L?c)HVj zUO+lMk?x2W9wqa-YX0}^iSZJKr77+Ty?Mcm8`M_!p*`995~GFZv9)63vXKl0yRU@G<>1^1_nCr%2Fz2C+LyI{()xG;p|1_yH0 zM+N`)C5ODzi?E;ZQm*wd*Cox4p4`7TLAQ;ro`Jpb_B2iV)cEaYOv^8O8k|7B8`-@Bkn54MFQ{?kLURM4hT%Cqb$oc`l1 z;U*VF0ldQ`K38Mpe;y)*HgW&Y+{o`L#t@xPnrEkFegD_r^MuOL&_x@Bzh3gc2uK#} z6Z74`0m>Iw!=ZnUXA;`2Wu_qbw=?x(Cs^*nva=j^@m~d0e;i)G(Y|668}( Date: Mon, 8 Apr 2024 15:14:44 +0100 Subject: [PATCH 08/45] updates --- website/docs/guides/quickstart-sl.md | 21 ++++++++++--------- website/snippets/_new-sl-setup.md | 2 -- website/snippets/_sl-connect-and-query-api.md | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/website/docs/guides/quickstart-sl.md b/website/docs/guides/quickstart-sl.md index 66440208d3b..4b2f1ef344c 100644 --- a/website/docs/guides/quickstart-sl.md +++ b/website/docs/guides/quickstart-sl.md @@ -1,15 +1,14 @@ --- -title: "Get started with the dbt Semantic Layer" +title: "Get started with the dbt Semantic Layer, with Snowflake" id: quickstart-sl -description: "Use this guide to build and define metrics, set up the dbt Semantic Layer, and query them using the Semantic Layer APIs." +description: "Use this guide to build and define metrics, set up the dbt Semantic Layer, and query them using Google Sheets." sidebar_label: "Get started with the dbt Semantic Layer" -tags: [Semantic Layer] meta: api_name: dbt Semantic Layer APIs icon: 'guides' hide_table_of_contents: true -tags: ['Semantic Layer','Metrics'] -keywords: ['dbt Semantic Layer','Metrics','dbt Cloud'] +tags: ['Semantic Layer','Quickstart'] +keywords: ['dbt Semantic Layer','Metrics','dbt Cloud', 'Snowflake', 'Google Sheets'] level: 'Intermediate' recently_updated: true --- @@ -35,7 +34,7 @@ The dbt Semantic Layer, powered by [MetricFlow](/docs/build/about-metricflow), s MetricFlow, a powerful component of the dbt Semantic Layer, simplifies the creation and management of company metrics. It offers flexible abstractions, SQL query generation, and enables fast retrieval of metric datasets from a data platform. ## Introduction -In this quickstart guide, you'll learn how to configure the Semantic Layer in dbt Cloud project, with Snowflake as your data warehouse. It will show you how to: +In this quickstart guide, you'll learn how to build and define metrics, configure the Semantic Layer in dbt Cloud project, with Snowflake as your data warehouse. It will show you how to: - Create a new Snowflake worksheet. - Load sample data into your Snowflake account. @@ -46,7 +45,7 @@ In this quickstart guide, you'll learn how to configure the Semantic Layer in db - Test and query metrics with MetricFlow - Run a production job in dbt Cloud - Set up dbt Semantic Layer in dbt Cloud -- Connect and query API with dbt Cloud +- Connect and query with Google Sheets with dbt Cloud MetricFlow allows you to define metrics in your dbt project and query them whether in dbt Cloud or dbt Core with [MetricFlow commands](/docs/build/metricflow-commands). @@ -789,14 +788,16 @@ This semantic model uses simple metrics to focus on customer metrics and emphasi -## Connect and query API +## Connect and query with Google Sheets -## Next steps +## What's next + +Great job, you've configured the Semantic Layer 🎉! You've learned how to build and define metrics, configure the Semantic Layer in dbt Cloud project, with Snowflake, and query metrics with Google Sheets. + - [dbt Semantic Layer FAQs](/docs/use-dbt-semantic-layer/sl-faqs) -- [Set up dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) - [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations) - Demo on [how to define and query metrics with MetricFlow](https://www.loom.com/share/60a76f6034b0441788d73638808e92ac?sid=861a94ac-25eb-4fd8-a310-58e159950f5a) - [Billing](/docs/cloud/billing) diff --git a/website/snippets/_new-sl-setup.md b/website/snippets/_new-sl-setup.md index 596521eedd6..b13d86b5807 100644 --- a/website/snippets/_new-sl-setup.md +++ b/website/snippets/_new-sl-setup.md @@ -33,5 +33,3 @@ Now that we've created and successfully run a job in your environment, you're re 7. Save and copy your environment ID, service token, and host, which you'll need to use downstream tools. For more info on how to integrate with partner integrations, refer to [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations). 8. Return to the **Project Details** page and click the **Generate a [Service Token](/docs/dbt-cloud-apis/service-tokens)** button. Make sure it has Semantic Layer Only and Metadata Only permissions. Name the token and save it. Once the token is generated, you won't be able to view this token again so make sure to record it somewhere safe. - -Great job, you've configured the Semantic Layer 🎉! diff --git a/website/snippets/_sl-connect-and-query-api.md b/website/snippets/_sl-connect-and-query-api.md index b8c95769889..00e7406f562 100644 --- a/website/snippets/_sl-connect-and-query-api.md +++ b/website/snippets/_sl-connect-and-query-api.md @@ -10,4 +10,4 @@ To query your metrics using Google Sheets: ## What's next -Congratulations 🎉! You've just defined your +Congratulations 🎉! You've just defined From 1198351c958686f0ed6a32337ebdf8facec74265 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Mon, 8 Apr 2024 16:44:11 +0100 Subject: [PATCH 09/45] updates --- .../docs/docs/build/build-metrics-intro.md | 2 +- .../docs/use-dbt-semantic-layer/dbt-sl.md | 8 +- .../docs/use-dbt-semantic-layer/setup-sl.md | 1 - website/docs/guides/quickstart-sl.md | 309 +++++++++++------- website/sidebars.js | 12 +- website/snippets/_new-sl-setup.md | 10 +- website/snippets/_sl-connect-and-query-api.md | 10 +- .../snippets/_sl-test-and-query-metrics.md | 17 +- .../semantic-layer/sl-snowflake-confirm.jpg | Bin 0 -> 389573 bytes website/vercel.json | 10 + 10 files changed, 222 insertions(+), 157 deletions(-) create mode 100644 website/static/img/docs/dbt-cloud/semantic-layer/sl-snowflake-confirm.jpg diff --git a/website/docs/docs/build/build-metrics-intro.md b/website/docs/docs/build/build-metrics-intro.md index 508f85fe1c6..cf24826dee2 100644 --- a/website/docs/docs/build/build-metrics-intro.md +++ b/website/docs/docs/build/build-metrics-intro.md @@ -5,7 +5,7 @@ description: "Learn about MetricFlow and build your metrics with semantic models sidebar_label: Build your metrics tags: [Metrics, Semantic Layer, Governance] hide_table_of_contents: true -pagination_next: "docs/build/sl-getting-started" +pagination_next: "guides/quickstart-sl" pagination_prev: null --- diff --git a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md index 6fe63b08a7a..c384b6ecf9e 100644 --- a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md @@ -5,7 +5,7 @@ description: "Learn how the dbt Semantic Layer enables data teams to centrally d sidebar_label: "About the dbt Semantic Layer" tags: [Semantic Layer] hide_table_of_contents: true -pagination_next: "docs/use-dbt-semantic-layer/quickstart-sl" +pagination_next: "guides/quickstart-sl" pagination_prev: null --- @@ -36,9 +36,9 @@ plan="dbt Cloud Team or Enterprise"
diff --git a/website/docs/guides/quickstart-sl.md b/website/docs/guides/quickstart-sl.md index 4b2f1ef344c..f7155e4f02d 100644 --- a/website/docs/guides/quickstart-sl.md +++ b/website/docs/guides/quickstart-sl.md @@ -1,18 +1,19 @@ --- -title: "Get started with the dbt Semantic Layer, with Snowflake" +title: "Quickstart with the dbt Semantic Layer and Snowflake" id: quickstart-sl description: "Use this guide to build and define metrics, set up the dbt Semantic Layer, and query them using Google Sheets." -sidebar_label: "Get started with the dbt Semantic Layer" +sidebar_label: "Quickstart with the dbt Semantic Layer and Snowflake" meta: api_name: dbt Semantic Layer APIs icon: 'guides' hide_table_of_contents: true -tags: ['Semantic Layer','Quickstart'] +tags: ['Semantic Layer', 'Snowflake', 'dbt Cloud','Quickstart'] keywords: ['dbt Semantic Layer','Metrics','dbt Cloud', 'Snowflake', 'Google Sheets'] level: 'Intermediate' recently_updated: true --- + import CreateModel from '/snippets/_sl-create-semanticmodel.md'; import DefineMetrics from '/snippets/_sl-define-metrics.md'; import ConfigMetric from '/snippets/_sl-configure-metricflow.md'; @@ -29,44 +30,44 @@ import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; +## Introduction + The dbt Semantic Layer, powered by [MetricFlow](/docs/build/about-metricflow), simplifies defining and using critical business metrics. It centralizes metric definitions, eliminates duplicate coding, and ensures consistent self-service access to metrics in downstream tools. MetricFlow, a powerful component of the dbt Semantic Layer, simplifies the creation and management of company metrics. It offers flexible abstractions, SQL query generation, and enables fast retrieval of metric datasets from a data platform. -## Introduction +import SLCourses from '/snippets/_sl-course.md'; + + + In this quickstart guide, you'll learn how to build and define metrics, configure the Semantic Layer in dbt Cloud project, with Snowflake as your data warehouse. It will show you how to: -- Create a new Snowflake worksheet. -- Load sample data into your Snowflake account. -- Connect dbt Cloud to Snowflake. +- Create a new Snowflake worksheet and set up your environment +- Load sample data into your Snowflake account +- Connect dbt Cloud to Snowflake - Build out an example dbt Cloud project -- Create a semantic model in dbt Cloud using MetricFlow -- Define metrics in dbt using MetricFlow -- Test and query metrics with MetricFlow +- Create a semantic model in dbt Cloud +- Define metrics in dbt Cloud +- Test and query metrics in dbt Cloud - Run a production job in dbt Cloud - Set up dbt Semantic Layer in dbt Cloud -- Connect and query with Google Sheets with dbt Cloud - +- Connect and query with Google Sheets MetricFlow allows you to define metrics in your dbt project and query them whether in dbt Cloud or dbt Core with [MetricFlow commands](/docs/build/metricflow-commands). However, to experience the power of the universal [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl) and query those metrics in downstream tools, you'll need a dbt Cloud [Team or Enterprise](https://www.getdbt.com/pricing/) account. -import SLCourses from '/snippets/_sl-course.md'; - - - ## Prerequisites -- You have a [dbt Cloud](https://www.getdbt.com/signup/) Team or Enterprise account - - Suitable for both Multi-tenant and Single-tenant deployment. Note, Single-tenant accounts should contact their account representative for necessary setup and enablement. -- You have both your production and development environments running [dbt version 1.6 or higher](/docs/dbt-versions/upgrade-dbt-version-in-cloud) or[ Keep on latest version](/docs/dbt-versions/upgrade-dbt-version-in-cloud#keep-on-latest-version). +- You have a [dbt Cloud](https://www.getdbt.com/signup/) Trial, Team, or Enterprise account. Suitable for both Multi-tenant and Single-tenant deployment. + - Note, Single-tenant accounts should contact their account representative for necessary setup and enablement. +- Both your production and development environments running [dbt version 1.6 or higher](/docs/dbt-versions/upgrade-dbt-version-in-cloud) or[ Keep on latest version](/docs/dbt-versions/upgrade-dbt-version-in-cloud#keep-on-latest-version). - You have a [trial Snowflake account.](https://signup.snowflake.com/) - Select the Enterprise edition: During trial account creation, make sure to choose the Enterprise Snowflake edition so you have ACCOUNTADMIN access. For a full implementation, you should consider organizational questions when choosing a cloud provider. For more information, see [Introduction to Cloud Platforms](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms) in the Snowflake docs. - Choose a cloud provider and region: Before proceeding, you will need to select a cloud provider. For this setup, all cloud providers and regions will work so choose whichever you’d like. -- Have a basic understanding of SQL and dbt (meaning you either used dbt before or completed the [dbt Fundamentals](https://courses.getdbt.com/collections) course). +- Basic understanding of SQL and dbt (meaning you either used dbt before or completed the [dbt Fundamentals](https://courses.getdbt.com/collections) course). -## Create a new Snowflake worksheet +## Create new Snowflake worksheet and set up environment 1. Log in to your trial Snowflake account. 2. In the Snowflake user interface (UI), click **+ Worksheet** in the upper right corner. @@ -74,12 +75,11 @@ import SLCourses from '/snippets/_sl-course.md'; ADD IMAGE HERE -## Set up your Snowflake environment -The data used here is stored as CSV files in a public S3 bucket and the following steps will guide you through how to prepare your Snowflake account for that data and upload it. +### Set up Snowflake environment -1. Create a new virtual warehouse, two new databases (one for raw data, the other for future dbt development), and two new schemas (one for jaffle_shop data, the other for stripe data). +The data used here is stored as CSV files in a public S3 bucket and the following steps will guide you through how to prepare your Snowflake account for that data and upload it. -To do this, run the following SQL commands one by one. Type them into the Editor of your new Snowflake SQL worksheet to set up your environment. +1. Create a new virtual warehouse, two new databases (one for raw data, the other for future dbt development), and two new schemas (one for `jaffle_shop` data, the other for stripe data). To do this, run the following SQL commands one by one. Type them into the Editor of your new Snowflake SQL worksheet to set up your environment. 2. Click **Run** in the upper right corner of the UI for each one: @@ -96,104 +96,105 @@ create schema raw.jaffle_shop; create schema raw.stripe; ``` +## Load data into Snowflake Now that your environment is set up, you can start loading data into it. You will be working within the raw database, using the `jaffle_shop` and stripe schemas to organize your tables. 1. Create customer table — First, delete all contents (empty) in the Editor of the Snowflake worksheet. Then, run this SQL command to create the customer table in the `jaffle_shop` schema: -```sql -create table raw.jaffle_shop.customers -( id integer, - first_name varchar, - last_name varchar -); -``` + ```sql + create table raw.jaffle_shop.customers + ( id integer, + first_name varchar, + last_name varchar + ); + ``` -You should see a ‘Table `CUSTOMERS` successfully created.’ message. + You should see a ‘Table `CUSTOMERS` successfully created.’ message. 2. Load data — After creating the table, delete all contents in the Editor. Run this command to load data from the S3 bucket into the customer table: -```sql -copy into raw.jaffle_shop.customers (id, first_name, last_name) -from 's3://dbt-tutorial-public/jaffle_shop_customers.csv' -file_format = ( - type = 'CSV' - field_delimiter = ',' - skip_header = 1 - ); -``` + ```sql + copy into raw.jaffle_shop.customers (id, first_name, last_name) + from 's3://dbt-tutorial-public/jaffle_shop_customers.csv' + file_format = ( + type = 'CSV' + field_delimiter = ',' + skip_header = 1 + ); + ``` -You should see a confirmation message after running the command. + You should see a confirmation message after running the command. 3. Create `orders` table — Delete all contents in the Editor. Run the following command to create… -```sql -create table raw.jaffle_shop.orders -( id integer, - user_id integer, - order_date date, - status varchar, - _etl_loaded_at timestamp default current_timestamp -); -``` + ```sql + create table raw.jaffle_shop.orders + ( id integer, + user_id integer, + order_date date, + status varchar, + _etl_loaded_at timestamp default current_timestamp + ); + ``` -You should see a confirmation message after running the command. + You should see a confirmation message after running the command. 4. Load data — Delete all contents in the Editor, then run this command to load data into the orders table: -```sql -copy into raw.jaffle_shop.orders (id, user_id, order_date, status) -from 's3://dbt-tutorial-public/jaffle_shop_orders.csv' -file_format = ( - type = 'CSV' - field_delimiter = ',' - skip_header = 1 - ); + ```sql + copy into raw.jaffle_shop.orders (id, user_id, order_date, status) + from 's3://dbt-tutorial-public/jaffle_shop_orders.csv' + file_format = ( + type = 'CSV' + field_delimiter = ',' + skip_header = 1 + ); -``` + ``` -You should see a confirmation message after running the command. + You should see a confirmation message after running the command. 5. Create `payment` table — Delete all contents in the Editor. Run the following command to create the payment table: -```sql -create table raw.stripe.payment -( id integer, - orderid integer, - paymentmethod varchar, - status varchar, - amount integer, - created date, - _batched_at timestamp default current_timestamp -); + ```sql + create table raw.stripe.payment + ( id integer, + orderid integer, + paymentmethod varchar, + status varchar, + amount integer, + created date, + _batched_at timestamp default current_timestamp + ); -``` + ``` -You should see a confirmation message after running the command. + You should see a confirmation message after running the command. 6. Load data — Delete all contents in the Editor. Run the following command to load data into the payment table: -```sql -copy into raw.stripe.payment (id, orderid, paymentmethod, status, amount, created) -from 's3://dbt-tutorial-public/stripe_payments.csv' -file_format = ( - type = 'CSV' - field_delimiter = ',' - skip_header = 1 - ); + ```sql + copy into raw.stripe.payment (id, orderid, paymentmethod, status, amount, created) + from 's3://dbt-tutorial-public/stripe_payments.csv' + file_format = ( + type = 'CSV' + field_delimiter = ',' + skip_header = 1 + ); -``` + ``` -You should see a confirmation message after running the command. + You should see a confirmation message after running the command. 7. Verify data — Verify that the data is loaded by running these SQL queries. Confirm that you can see output for each one, like the following confirmation image. -```sql -select * from raw.jaffle_shop.customers; -select * from raw.jaffle_shop.orders; -select * from raw.stripe.payment; -``` + ```sql + select * from raw.jaffle_shop.customers; + select * from raw.jaffle_shop.orders; + select * from raw.stripe.payment; + ``` -ADD IMAGE HERE + ## Connect dbt Cloud to Snowflake @@ -290,7 +291,11 @@ Now that you have a repository configured, you can initialize your project and s ``` - In the command line bar at the bottom, enter dbt run and click Enter. You should see a dbt run succeeded message. -## Building out your project: Adding sources +## Build your dbt project +The next step is to build your project. This involves adding sources, staging models, business-defined entities, and packages to your project. + +### Add sources + [Sources](/docs/build/sources) in dbt are the raw data tables you'll transform. By organizing your source definitions, you document the origin of your data. It also makes your project and transformation more reliable, structured, and understandable. Let’s add our sources now. You have two options for working with files in the dbt Cloud IDE: @@ -316,7 +321,9 @@ sources: - name: orders ``` +:::tip In your source file, you can also use the **Generate model** button to create a new model file for each source. This will create a new file in the models directory with the given source name and fill in the SQL code of the source definition. +::: 4. Hover over the `models` directory and click the **...**, then select **Create file**. 5. Name the file `staging/stripe/stripe.yml` , then click **Create**. @@ -333,22 +340,32 @@ sources: - name: payment ``` -## Building out your project: Adding staging models +### Add staging models [Staging models](/best-practices/how-we-structure/2-staging) are the first transformation step in dbt. They clean and prepare your raw data, making it ready for more complex transformations and analyses. Follow these steps to add your staging models to your project. 1. Create the file `models/staging/jaffle_shop/stg_customers.sql`. Or you can use the **Generate model** button to create a new model file for each source. 2. Copy the following query into the file and click **Save**. + +```sql + select + id as customer_id, + first_name, + last_name +from {{ source('jaffle_shop', 'customers') }} +``` + 3. Create the file `models/staging/jaffle_shop/stg_orders.sql` 4. Copy the following query into the file and click **Save**. ```sql -select - id as order_id, - user_id as customer_id, - order_date, - status -from {{ source('jaffle_shop', 'orders') }} + select + id as order_id, + user_id as customer_id, + order_date, + status + from {{ source('jaffle_shop', 'orders') }} ``` + 5. Create the file `models/staging/stripe/stg_payments.sql`. 6. Copy the following query into the file and click **Save**. @@ -365,10 +382,14 @@ select from {{ source('stripe', 'payment') }} ``` + 7. Enter `dbt run` in the command prompt at the bottom of the screen. You should get a successful run and see the three models. -## Finishing up building your project -This phase involves creating[ models that serve as the entity layer or concept layer of your dbt project](/best-practices/how-we-structure/4-marts), making the data ready for reporting and analysis. It also includes adding [packages](/docs/build/packages) and the [MetricFlow time spine](/docs/build/metricflow-time-spine) that extend dbt's functionality. +### Add business-defined entities + +This phase involves creating [models that serve as the entity layer or concept layer of your dbt project](/best-practices/how-we-structure/4-marts), making the data ready for reporting and analysis. It also includes adding [packages](/docs/build/packages) and the [MetricFlow time spine](/docs/build/metricflow-time-spine) that extend dbt's functionality. + +This phase is the [marts layer](/best-practices/how-we-structure/1-guide-overview#guide-structure-overview), which brings together modular pieces into a wide, rich vision of the entities an organization cares about. 1. Create the file `models/marts/fct_orders.sql`. 2. Copy the following query into the file and click **Save**. @@ -483,34 +504,37 @@ final as ( select * from final ``` + 9. Enter `dbt run` in the command prompt at the bottom of the screen. You should get a successful run popup and also see in the run details that dbt has successfully built five models. -## Semantic models +## Create semantic models + The following steps describe how to set up [semantic models](/docs/build/semantic-models). Semantic models contain many object types (such as entities, measures, and dimensions) that allow MetricFlow to construct the queries for metric definitions. -- Each semantic model will be 1:1 with a dbt SQL/python model +- Each semantic model will be 1:1 with a dbt SQL/Python model - Each semantic model will contain (at most) 1 primary or natural entity - Each semantic model will contain zero, one, or many foreign or unique entities used to connect to other entities -- Each semantic model may also contain dimensions, measures, and metrics–the stuff that actually gets fed into and queried by your downstream BI tool. +- Each semantic model may also contain dimensions, measures, and metrics — this is what actually gets fed into and queried by your downstream BI tool. -Semantic models define how to interpret the data related to orders. It includes entities (like ID columns serving as keys for joining data), dimensions (for grouping or filtering data), and measures (for data aggregations). +In the following steps, semantic models help us define how to interpret the data related to orders. It includes entities (like ID columns serving as keys for joining data), dimensions (for grouping or filtering data), and measures (for data aggregations). 1. Create a new file `models/metrics/fct_orders.yml` 2. Add the following code to that newly created file: -```sql - semantic_models: - - name: orders - description: | - Order fact table. This table’s grain is one row per order. - model: ref('fct_orders') +```yaml +semantic_models: + - name: orders + description: | + Order fact table. This table’s grain is one row per order. + model: ref('fct_orders') + ``` The following section will explain [dimensions](/docs/build/dimensions), [entities](/docs/build/entities), and [measures](/docs/build/measures) in more detail, showing how they each play a role in semantic models. -- Dimensions allow us to categorize and filter data, making it easier to organize. -- Entities act as unique identifiers (like ID columns) that link data together from different tables. -- Measures help us calculate data, providing valuable insights through aggregation. +- [Entities](#entities) act as unique identifiers (like ID columns) that link data together from different tables. +- [Dimensions](#dimensions) allow us to categorize and filter data, making it easier to organize. +- [Measures](#measures) help us calculate data, providing valuable insights through aggregation. ### Entities @@ -526,7 +550,8 @@ semantic_models: description: | Order fact table. This table’s grain is one row per order. model: ref('fct_orders') - entities: # Newly added + # Newly added + entities: - name: order_id type: primary - name: customer_id @@ -552,7 +577,8 @@ semantic_models: type: primary - name: customer_id type: foreign - dimensions: # Newly added + # Newly added + dimensions: - name: order_date type: time type_params: @@ -583,7 +609,8 @@ semantic_models: type: time type_params: time_granularity: day - measures: ## Newly added + # Newly added + measures: - name: order_total description: The total amount for each order including taxes. agg: sum @@ -604,15 +631,19 @@ semantic_models: use_approximate_percentile: False ``` -## Metrics +## Define metrics + +[Metrics](/docs/build/metrics-overview) are the language your business users speak and measure business performance. To be technical about it, they are an aggregation over a column in your warehouse that you enrich with dimensional cuts. -[Metrics](/docs/build/metrics-overview) are the language your business users speak and measure business performance. To be technical about it, they are an aggregation over a column in your warehouse that you enrich with dimensional cuts. Once you've created your semantic models, it's time to start referencing those measures you made to create some metrics. There are a few different types of metrics we can configure. +There are different types of metrics you can configure: -- **[Conversion metrics](/docs/build/conversion)**: Track when a base event and a subsequent conversion event occur for an entity within a set time period. -- [**Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics):** Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Note that you will need to create the time spine model before you add cumulative metrics. -- [**Derived metrics](/docs/build/metrics-overview#derived-metrics): Allows you to do calculations on top of metrics. -- [**Simple metrics**](/docs/build/metrics-overview#simple-metrics): Directly reference a single measure, without any additional measures involved. -- [**Ratio metrics](/docs/build/metrics-overview#ratio-metrics):** Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. +- **[Conversion metrics](/docs/build/conversion)**: Track when a base event and a subsequent conversion event occur for an entity within a set time period. +- **[Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics):** Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Note that you will need to create the time spine model before you add cumulative metrics. +- **[Derived metrics](/docs/build/metrics-overview#derived-metrics)**: Allows you to do calculations on top of metrics. +- **[Simple metrics](/docs/build/metrics-overview#simple-metrics)**: Directly reference a single measure, without any additional measures involved. +- **[Ratio metrics](/docs/build/metrics-overview#ratio-metrics):** Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. + +Once you've created your semantic models, it's time to start referencing those measures you made to create some metrics: 1. Add metrics to your `fct_orders.yml` semantic model file: @@ -770,10 +801,20 @@ This semantic model uses simple metrics to focus on customer metrics and emphasi ## Test and query metrics + + ## Run a production job + +
@@ -786,16 +827,34 @@ This semantic model uses simple metrics to focus on customer metrics and emphasi ## Set up dbt Semantic Layer + + ## Connect and query with Google Sheets + + ## What's next -Great job, you've configured the Semantic Layer 🎉! You've learned how to build and define metrics, configure the Semantic Layer in dbt Cloud project, with Snowflake, and query metrics with Google Sheets. + + +Great job on completing the dbt Semantic Layer guide 🎉! You've learned: +- How to build and define metrics +- Configure the dbt Semantic Layer in a dbt Cloud project +- Query metrics with Google Sheets + + +Here are some additional resources to help you continue your journey: - [dbt Semantic Layer FAQs](/docs/use-dbt-semantic-layer/sl-faqs) - [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations) diff --git a/website/sidebars.js b/website/sidebars.js index 59edba1760b..227c6386e4a 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -302,7 +302,11 @@ const sidebarSettings = { collapsed: true, items: [ "docs/build/build-metrics-intro", - "guides/quickstart-sl", + { + type: "link", + label: "Quickstart with the dbt Semantic Layer", + href: `/guides/quickstart-sl`, + }, { type: "category", label: "About MetricFlow", @@ -503,7 +507,11 @@ const sidebarSettings = { link: { type: "doc", id: "docs/use-dbt-semantic-layer/dbt-sl" }, items: [ "docs/use-dbt-semantic-layer/dbt-sl", - "guides/quickstart-sl", + { + type: "link", + label: "Quickstart with the dbt Semantic Layer", + href: `/guides/quickstart-sl`, + }, "docs/use-dbt-semantic-layer/setup-sl", "docs/use-dbt-semantic-layer/exports", "docs/use-dbt-semantic-layer/sl-architecture", diff --git a/website/snippets/_new-sl-setup.md b/website/snippets/_new-sl-setup.md index b13d86b5807..eac0ca4fc63 100644 --- a/website/snippets/_new-sl-setup.md +++ b/website/snippets/_new-sl-setup.md @@ -6,10 +6,6 @@ You can set up the dbt Semantic Layer in dbt Cloud at the environment and projec * If you are using a free trial dbt Cloud account, you are on a trial of the Team plan as an Owner, so you're good to go. - You must have a successful run in your new environment. -:::tip -If you've configured the legacy Semantic Layer, it has been deprecated. dbt Labs strongly recommends that you [upgrade your dbt version](/docs/dbt-versions/upgrade-dbt-version-in-cloud) to dbt version 1.6 or higher to use the latest dbt Semantic Layer. Refer to the dedicated [migration guide](/guides/sl-migration) for details. -::: - Now that we've created and successfully run a job in your environment, you're ready to configure the semantic layer. 1. Navigate to **Account Settings** in the navigation menu. @@ -25,11 +21,11 @@ Now that we've created and successfully run a job in your environment, you're re -2. Select the deployment environment you want for the Semantic Layer and click **Save**. -3. After saving it, you'll be provided with the connection information that allows you to connect to downstream tools. If your tool supports JDBC, save the JDBC URL or individual components (like environment id and host). If it uses the GraphQL API, save the GraphQL API host information instead. +5. Select the deployment environment you want for the Semantic Layer and click **Save**. +6. After saving it, you'll be provided with the connection information that allows you to connect to downstream tools. If your tool supports JDBC, save the JDBC URL or individual components (like environment id and host). If it uses the GraphQL API, save the GraphQL API host information instead. 7. Save and copy your environment ID, service token, and host, which you'll need to use downstream tools. For more info on how to integrate with partner integrations, refer to [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations). -8. Return to the **Project Details** page and click the **Generate a [Service Token](/docs/dbt-cloud-apis/service-tokens)** button. Make sure it has Semantic Layer Only and Metadata Only permissions. Name the token and save it. Once the token is generated, you won't be able to view this token again so make sure to record it somewhere safe. +8. Return to the **Project Details** page and click the **[Generate a Service Token](/docs/dbt-cloud-apis/service-tokens)** button. Make sure it has Semantic Layer Only and Metadata Only permissions. Name the token and save it. Once the token is generated, you won't be able to view this token again so make sure to record it somewhere safe. diff --git a/website/snippets/_sl-connect-and-query-api.md b/website/snippets/_sl-connect-and-query-api.md index 00e7406f562..6522e644f11 100644 --- a/website/snippets/_sl-connect-and-query-api.md +++ b/website/snippets/_sl-connect-and-query-api.md @@ -1,13 +1,9 @@ -This section will walk you through how to query your metrics using the Google Sheets integration. You can also query your metrics using: +This section will guide you on how to query and use the Google Sheets integration. You can also query your metrics using: - [First-class integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations) (such as Tableau, Hex, and more) -- Wth other tools like the [dbt Semantic Layer APIs](/docs/dbt-cloud-apis/sl-api-overview). -- Use [exports](/docs/use-dbt-semantic-layer/exports) to expose tables of metrics and dimensions in your data platform and create a custom integration with tools such as PowerBI, and more. +- Other tools using the [dbt Semantic Layer APIs](/docs/dbt-cloud-apis/sl-api-overview). +- [Exports](/docs/use-dbt-semantic-layer/exports) to expose tables of metrics and dimensions in your data platform and create a custom integration with tools such as PowerBI, and more. To query your metrics using Google Sheets: 1. Make sure you have a Gmail account. If you don’t already have one, make one at [gmail.com](http://gmail.com/). 2. To set up Google Sheets and query your metrics, follow the detailed instructions on the [Google Sheets integration](/docs/use-dbt-semantic-layer/gsheets) page. 3. Start playing around with it! Query a metric, like `order_total`. Filter it with a dimension, like `order_date`. You can also use the `group_by` parameter to group your metrics by a specific dimension. - -## What's next - -Congratulations 🎉! You've just defined diff --git a/website/snippets/_sl-test-and-query-metrics.md b/website/snippets/_sl-test-and-query-metrics.md index dd76c142114..c8941f8ad4a 100644 --- a/website/snippets/_sl-test-and-query-metrics.md +++ b/website/snippets/_sl-test-and-query-metrics.md @@ -1,24 +1,24 @@ -This section explains how you can test and run MetricFlow commands with dbt Cloud or dbt Core (dbt Cloud IDE support coming soon). dbt Cloud IDE users can skip to [Run a production job](#run-a-production-job) to run a model. +This section explains how you can validate or run commands with dbt Cloud or dbt Core (dbt Cloud IDE support coming soon). -:::important Testing and querying metrics in the dbt Cloud IDE is currently not supported +:::important Validating and querying metrics in the dbt Cloud IDE is currently not supported -Support for running [MetricFlow commands](/docs/build/metricflow-commands) in the dbt Cloud IDE is not available but is coming soon. +Support for running [MetricFlow commands](/docs/build/metricflow-commands) in the dbt Cloud IDE is not available but is coming soon. -You can use the **Preview** or **Compile** buttons in the IDE to run semantic validations and make sure your metrics are defined. Alternatively, you can run commands with the [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) or with SQL client tools like DataGrip, DBeaver, or RazorSQL. +You can use the **Preview** or **Compile** buttons in the IDE, or use the DAG for semantic validations and make sure your metrics are defined. Alternatively, you can run commands with the [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) or with SQL client tools like DataGrip, DBeaver, or RazorSQL. ::: - + -You can validate your metrics in the dbt Cloud IDE by selecting the metric you want to validate and viewing it in the **Lineage** tab. +You can validate your metrics in the dbt Cloud IDE by selecting the metric you want to validate and viewing it in the **Lineage** tab. (Suport for running commands in the dbt Cloud IDE support coming soon). - + This section is for people using the dbt Cloud CLI (support for dbt Cloud IDE is coming soon). With dbt Cloud: @@ -67,6 +67,3 @@ The dbt Cloud CLI is strongly recommended to define and query metrics for your d - -To streamline your metric querying process, you can connect to the [dbt Semantic Layer APIs](/docs/dbt-cloud-apis/sl-api-overview) to access your metrics programmatically. For SQL syntax, refer to [Querying the API for metric metadata](/docs/dbt-cloud-apis/sl-jdbc#querying-the-api-for-metric-metadata). - diff --git a/website/static/img/docs/dbt-cloud/semantic-layer/sl-snowflake-confirm.jpg b/website/static/img/docs/dbt-cloud/semantic-layer/sl-snowflake-confirm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..956c09398c13971b19b3d50bbb788b917d70f46b GIT binary patch literal 389573 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

From 2702d03b189ac94f6cb32632af56279969921b79 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Tue, 9 Apr 2024 11:50:33 +0100 Subject: [PATCH 19/45] fix links --- website/docs/docs/build/build-metrics-intro.md | 2 +- website/docs/guides/sl-migration.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/build/build-metrics-intro.md b/website/docs/docs/build/build-metrics-intro.md index d21f8460a00..4eda2271bd1 100644 --- a/website/docs/docs/build/build-metrics-intro.md +++ b/website/docs/docs/build/build-metrics-intro.md @@ -65,7 +65,7 @@ MetricFlow allows you to: ## Related docs -- [Quickstart guide with the dbt Semantic Layer](/docs/guides/sl-snowflake-qs) +- [Quickstart guide with the dbt Semantic Layer](/guides/sl-snowflake-qs) - [The dbt Semantic Layer: what's next](https://www.getdbt.com/blog/dbt-semantic-layer-whats-next/) blog - [dbt Semantic Layer on-demand courses](https://courses.getdbt.com/courses/semantic-layer) - [dbt Semantic Layer FAQs](/docs/use-dbt-semantic-layer/sl-faqs) diff --git a/website/docs/guides/sl-migration.md b/website/docs/guides/sl-migration.md index 44e384245bb..76446666638 100644 --- a/website/docs/guides/sl-migration.md +++ b/website/docs/guides/sl-migration.md @@ -133,7 +133,7 @@ If you created a new environment in [Step 3](#step-3-setup-the-semantic-layer-in ### Related docs -- [Quickstart guide with the dbt Semantic Layer](/docs/guides/sl-snowflake-qs) +- [Quickstart guide with the dbt Semantic Layer](/guides/sl-snowflake-qs) - [dbt Semantic Layer FAQs](/docs/use-dbt-semantic-layer/sl-faqs) - [dbt metrics converter](https://github.com/dbt-labs/dbt-converter) - [Why we're deprecating the dbt_metrics package](/blog/deprecating-dbt-metrics) blog post From 8542d961df010741432c1c3349379ff36e886352 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:48:26 +0100 Subject: [PATCH 20/45] Update sl-snowflake-qs.md --- website/docs/guides/sl-snowflake-qs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index e55abd1da5f..6da76d6c8f5 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -41,7 +41,7 @@ import SLCourses from '/snippets/_sl-course.md'; This quickstart guide is designed for dbt Cloud users using Snowflake as their data platform. It focuses on building and defining metrics, setting up the dbt Semantic Layer in a dbt Cloud project, and querying metrics in Google Sheets. -If you're using a data platform other than Snowflake, this guide is also applicable to you. To adapt the setup for your specific platform, follow the account setup and data loading instructions detailed on the following pages: +If you're using a data platform other than Snowflake, this guide is also applicable to you. You can adapt the setup for your specific platform by following the account setup and data loading instructions detailed on the following pages: - [BigQuery](https://docs.getdbt.com/guides/bigquery?step=2) (Steps 2 - 5) - [Databricks](https://docs.getdbt.com/guides/databricks?step=2) (Steps 2 - 4) From 9ad30cb45cc4fc3e6b024bdae0efa94b72edc903 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:54:21 +0100 Subject: [PATCH 21/45] Update sl-snowflake-qs.md --- website/docs/guides/sl-snowflake-qs.md | 1 - 1 file changed, 1 deletion(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 6da76d6c8f5..40fc729e863 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -81,7 +81,6 @@ This guide will cover the following topics: 2. In the Snowflake user interface (UI), click **+ Worksheet** in the upper right corner. 3. Select **SQL Worksheet** to create a new worksheet. -ADD IMAGE HERE ### Set up Snowflake environment From b0f524b1d37977eb36a892aad97a7ee68793ee59 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:54:27 +0100 Subject: [PATCH 22/45] Update sl-snowflake-qs.md --- website/docs/guides/sl-snowflake-qs.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 40fc729e863..4a8b9c0d48f 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -86,7 +86,9 @@ This guide will cover the following topics: The data used here is stored as CSV files in a public S3 bucket and the following steps will guide you through how to prepare your Snowflake account for that data and upload it. -1. Create a new virtual warehouse, two new databases (one for raw data, the other for future dbt development), and two new schemas (one for `jaffle_shop` data, the other for stripe data). To do this, run the following SQL commands one by one. Type them into the Editor of your new Snowflake SQL worksheet to set up your environment. +Create a new virtual warehouse, two new databases (one for raw data, the other for future dbt development), and two new schemas (one for `jaffle_shop` data, the other for stripe data). + +1. Run the following SQL commands one by one by typing them into the Editor of your new Snowflake SQL worksheet to set up your environment. 2. Click **Run** in the upper right corner of the UI for each one: From 078af4975238609fb092ed60676f0535bfbd3414 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:54:31 +0100 Subject: [PATCH 23/45] Update _sl-test-and-query-metrics.md --- website/snippets/_sl-test-and-query-metrics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/snippets/_sl-test-and-query-metrics.md b/website/snippets/_sl-test-and-query-metrics.md index d68de58eb0e..7a1e71580e6 100644 --- a/website/snippets/_sl-test-and-query-metrics.md +++ b/website/snippets/_sl-test-and-query-metrics.md @@ -1,7 +1,7 @@ To work with metrics in dbt, you have several tools to validate or run commands. Here's how you can test and query metrics depending on your setup: - [**dbt Cloud IDE users**](#dbt-cloud-ide-users) — Currently, running MetricFlow commands directly in the [dbt Cloud IDE](/docs/cloud/dbt-cloud-ide/develop-in-the-cloud) isn't supported, but it's on the way! You can still validate metrics using the **Preview** or **Compile** options, or visually through the DAG for semantic checks. This ensures your metrics are correctly defined without directly running commands. -- [**dbt Cloud CLI users**](#dbt-cloud-cli-users) — The [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) enables you to run MetricFlow commands for direct interaction with metrics. +- [**dbt Cloud CLI users**](#dbt-cloud-cli-users) — The [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) enables you to run [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) for direct interaction with metrics. - **dbt Core users** — Use the MetricFlow CLI for command execution. Whicle this guide focuses on dbt Cloud users, dbt Core users can find detailed MetricFlow CLI instructions in the [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) page. Alternatively, you can run commands with SQL client tools like DataGrip, DBeaver, or RazorSQL. From d5431fe814835fe0aa97347bedb3761109fd5a1a Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:54:41 +0100 Subject: [PATCH 24/45] Update _sl-test-and-query-metrics.md --- website/snippets/_sl-test-and-query-metrics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/snippets/_sl-test-and-query-metrics.md b/website/snippets/_sl-test-and-query-metrics.md index 7a1e71580e6..313b0dfb03a 100644 --- a/website/snippets/_sl-test-and-query-metrics.md +++ b/website/snippets/_sl-test-and-query-metrics.md @@ -2,7 +2,7 @@ To work with metrics in dbt, you have several tools to validate or run commands. - [**dbt Cloud IDE users**](#dbt-cloud-ide-users) — Currently, running MetricFlow commands directly in the [dbt Cloud IDE](/docs/cloud/dbt-cloud-ide/develop-in-the-cloud) isn't supported, but it's on the way! You can still validate metrics using the **Preview** or **Compile** options, or visually through the DAG for semantic checks. This ensures your metrics are correctly defined without directly running commands. - [**dbt Cloud CLI users**](#dbt-cloud-cli-users) — The [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) enables you to run [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) for direct interaction with metrics. -- **dbt Core users** — Use the MetricFlow CLI for command execution. Whicle this guide focuses on dbt Cloud users, dbt Core users can find detailed MetricFlow CLI instructions in the [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) page. +- **dbt Core users** — Use the MetricFlow CLI for command execution. Whicle the this guide focuses on dbt Cloud users, dbt Core users can find detailed MetricFlow CLI setup instructions in the [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) page. Note that to use the dbt Semantic Layer, you need to have a Team or Enterprise account. Alternatively, you can run commands with SQL client tools like DataGrip, DBeaver, or RazorSQL. From cfb023b9ed2b0989ebac92050325005deea5fd78 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Wed, 10 Apr 2024 10:52:39 +0100 Subject: [PATCH 25/45] Update build-metrics-intro.md --- website/docs/docs/build/build-metrics-intro.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/build/build-metrics-intro.md b/website/docs/docs/build/build-metrics-intro.md index 4eda2271bd1..8aa6d8ad5aa 100644 --- a/website/docs/docs/build/build-metrics-intro.md +++ b/website/docs/docs/build/build-metrics-intro.md @@ -20,8 +20,8 @@ MetricFlow allows you to:
From 51c35fe236b063ec3587c8a8f01896845924c9a2 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Wed, 10 Apr 2024 10:53:12 +0100 Subject: [PATCH 26/45] Update website/docs/docs/use-dbt-semantic-layer/dbt-sl.md --- website/docs/docs/use-dbt-semantic-layer/dbt-sl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md index f0265581d82..21b15d518f1 100644 --- a/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md +++ b/website/docs/docs/use-dbt-semantic-layer/dbt-sl.md @@ -37,7 +37,7 @@ plan="dbt Cloud Team or Enterprise" From c2bc9244ef20e7614fca627191f770ee2245e1ff Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Wed, 10 Apr 2024 10:53:46 +0100 Subject: [PATCH 27/45] Update website/docs/docs/use-dbt-semantic-layer/sl-faqs.md --- website/docs/docs/use-dbt-semantic-layer/sl-faqs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/use-dbt-semantic-layer/sl-faqs.md b/website/docs/docs/use-dbt-semantic-layer/sl-faqs.md index bcdc9814e1b..e9e33356aa2 100644 --- a/website/docs/docs/use-dbt-semantic-layer/sl-faqs.md +++ b/website/docs/docs/use-dbt-semantic-layer/sl-faqs.md @@ -136,7 +136,7 @@ MetricFlow is hosted in dbt Cloud. Requests from the [Semantic Layer APIs](/docs 2. Then you build your metrics on top of these semantic models. This is all done in `.yml` configurations alongside your dbt models in your projects. 3. Once you've defined your metrics and semantic models, you can [configure the dbt Semantic Layer](/docs/use-dbt-semantic-layer/setup-sl) in dbt Cloud. -Read our [Quickstart](/guides/sl-snowflake-qs) for more information. +Read our [dbt Semantic Layer quickstart](/guides/sl-snowflake-qs) guide for more information. From 81770eada4f845faa08f458075c2e298833e20e5 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Wed, 10 Apr 2024 11:21:49 +0100 Subject: [PATCH 28/45] Update website/docs/guides/sl-snowflake-qs.md --- website/docs/guides/sl-snowflake-qs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 4a8b9c0d48f..598c8736daa 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -32,7 +32,7 @@ import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; ## Introduction -The dbt Semantic Layer, powered by [MetricFlow](/docs/build/about-metricflow), simplifies setting up key business metrics. It centralizes definitions, avoids duplicate code, and ensures easy access to metrics in downstream tools. MetricFlow helps manage company metrics with ease, allowing you to define metrics in your dbt project and query them in dbt Cloud with [MetricFlow commands](/docs/build/metricflow-commands). +The [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl), powered by [MetricFlow](/docs/build/about-metricflow), simplifies setting up key business metrics. It centralizes definitions, avoids duplicate code, and ensures easy access to metrics in downstream tools. MetricFlow helps manage company metrics with ease, allowing you to define metrics in your dbt project and query them in dbt Cloud with [MetricFlow commands](/docs/build/metricflow-commands). import SLCourses from '/snippets/_sl-course.md'; From e014697b409d554988122eeccc06d45766d35c03 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 12 Apr 2024 12:49:55 +0100 Subject: [PATCH 29/45] FIX CODE --- website/docs/guides/sl-snowflake-qs.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 598c8736daa..d5b010b2429 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -158,7 +158,6 @@ Now that your environment is set up, you can start loading data into it. You wil field_delimiter = ',' skip_header = 1 ); - ``` You should see a confirmation message after running the command. @@ -175,7 +174,6 @@ Now that your environment is set up, you can start loading data into it. You wil created date, _batched_at timestamp default current_timestamp ); - ``` You should see a confirmation message after running the command. @@ -190,7 +188,6 @@ Now that your environment is set up, you can start loading data into it. You wil field_delimiter = ',' skip_header = 1 ); - ``` You should see a confirmation message after running the command. From aa3a6bab0003a96674ca19acf644788fb4d6f262 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 15 Apr 2024 13:47:36 +0100 Subject: [PATCH 30/45] Update website/docs/guides/sl-snowflake-qs.md --- website/docs/guides/sl-snowflake-qs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index d5b010b2429..b67352ceb94 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -754,7 +754,7 @@ After setting up your orders model: ```yaml semantic_models: - - name: dim_customers + - name: customers defaults: agg_time_dimension: most_recent_order_date description: | From 9018fed1493bb3478ea7881aed3e1c33ebb6f453 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 15 Apr 2024 13:52:06 +0100 Subject: [PATCH 31/45] Update website/snippets/_sl-test-and-query-metrics.md --- website/snippets/_sl-test-and-query-metrics.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/snippets/_sl-test-and-query-metrics.md b/website/snippets/_sl-test-and-query-metrics.md index 313b0dfb03a..29a75a4b5f2 100644 --- a/website/snippets/_sl-test-and-query-metrics.md +++ b/website/snippets/_sl-test-and-query-metrics.md @@ -10,6 +10,8 @@ Alternatively, you can run commands with SQL client tools like DataGrip, DBeaver You can validate your metrics in the dbt Cloud IDE by selecting the metric you want to validate and viewing it in the **Lineage** tab. (Support for running commands in the dbt Cloud IDE support coming soon). +Once validated, make sure you commit and merge your changes in your project. + ### dbt Cloud CLI users From cb65dcce3a83c48357c93b3d5133065f3ded2f2a Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 15 Apr 2024 13:52:14 +0100 Subject: [PATCH 32/45] Update website/snippets/_sl-run-prod-job.md --- website/snippets/_sl-run-prod-job.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/snippets/_sl-run-prod-job.md b/website/snippets/_sl-run-prod-job.md index 3f58ce5c70e..8eb4049efc8 100644 --- a/website/snippets/_sl-run-prod-job.md +++ b/website/snippets/_sl-run-prod-job.md @@ -1,4 +1,4 @@ -Once you’ve defined metrics in your dbt project, you can perform a job run in your deployment environment in dbt Cloud to materialize your metrics. The deployment environment is only supported for the dbt Semantic Layer currently. +Once you’ve committed and merged your metric changes in your dbt project, you can perform a job run in your deployment environment in dbt Cloud to materialize your metrics. The deployment environment is only supported for the dbt Semantic Layer currently. 1. In dbt Cloud, create a new [deployment environment](/docs/deploy/deploy-environments#create-a-deployment-environment) or use an existing environment on dbt 1.6 or higher. * Note — Deployment environment is currently supported (_development experience coming soon_) From 3ff93d841e9579f16d69cd56d8a748d8128cf30b Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Mon, 15 Apr 2024 13:52:23 +0100 Subject: [PATCH 33/45] Update website/docs/guides/sl-snowflake-qs.md --- website/docs/guides/sl-snowflake-qs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index b67352ceb94..5a3a99730c5 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -759,7 +759,7 @@ semantic_models: agg_time_dimension: most_recent_order_date description: | semantic model for dim_customers - model: ref('dim_customers') + model: ref('customers') entities: - name: customer expr: customer_id From fc06a8dd7651098c5284d3d6c4893f01ef590d66 Mon Sep 17 00:00:00 2001 From: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Date: Thu, 18 Apr 2024 12:26:22 +0100 Subject: [PATCH 34/45] Update sl-snowflake-qs.md --- website/docs/guides/sl-snowflake-qs.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 5a3a99730c5..b6d6ae57cfe 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -53,8 +53,8 @@ The rest of this guide applies universally across all supported platforms, ensur ## Prerequisites -- You have a [dbt Cloud](https://www.getdbt.com/signup/) Trial, Team, or Enterprise account, which is suitable for both Multi-tenant and Single-tenant deployments. If you have a Single-tenant account, please contact your account representative for the necessary setup steps. -- Your production and development environments must be on [dbt version 1.6 or higher](/docs/dbt-versions/upgrade-dbt-version-in-cloud). Alternatively, set your environment to[ Keep on latest version](/docs/dbt-versions/upgrade-dbt-version-in-cloud#keep-on-latest-version) to alway remain on the latest version. +- You need a [dbt Cloud](https://www.getdbt.com/signup/) Trial, Team, or Enterprise account for all deployments. Contact your representative for Single-tenant setup; otherwise, create an account using this guide. +- Your production and development environments must be on [dbt version 1.6 or higher](/docs/dbt-versions/upgrade-dbt-version-in-cloud). Alternatively, set your environment to[ Keep on latest version](/docs/dbt-versions/upgrade-dbt-version-in-cloud#keep-on-latest-version) to always remain on the latest version. - You have a [trial Snowflake account.](https://signup.snowflake.com/). When creating an account: - Select the Enterprise Snowflake edition to ensure you have ACCOUNTADMIN access. For a full implementation, you should consider organizational questions when choosing a cloud provider. For more information, see [Introduction to Cloud Platforms](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms) in the Snowflake documentation. - Before proceeding, you will need to select a cloud provider and region. For this setup, all cloud providers and regions will work so choose whichever you’d like. @@ -77,7 +77,7 @@ This guide will cover the following topics: ## Create new Snowflake worksheet and set up environment -1. Log in to your trial Snowflake account. +1. Log in to your [trial Snowflake account](https://signup.snowflake.com). 2. In the Snowflake user interface (UI), click **+ Worksheet** in the upper right corner. 3. Select **SQL Worksheet** to create a new worksheet. @@ -267,7 +267,7 @@ Using Partner Connect allows you to create a complete dbt account with your [Sno 5. Enter your **Development Credentials** for Snowflake with: * **Username** — The username you created for Snowflake. The username is not your email address and is usually your first and last name together in one word. * **Password** — The password you set when creating your Snowflake account. - * **Schema** — You’ll notice that the schema name has been auto created for you. By convention, this is `dbt_`. This is the schema connected directly to your development environment, and it's where your models will be built when running dbt within the Cloud IDE. + * **Schema** — You’ll notice that the schema name has been auto-created for you. By convention, this is `dbt_`. This is the schema connected directly to your development environment, and it's where your models will be built when running dbt within the Cloud IDE. * **Target name** — Leave as the default. * **Threads** — Leave as 4. This is the number of simultaneous connects that dbt Cloud will make to build models concurrently. @@ -291,6 +291,7 @@ Now that you have a repository configured, you can initialize your project and s 2. Above the file tree to the left, click **Initialize your project**. This builds out your folder structure with example models. 3. Make your initial commit by clicking **Commit and sync**. Use the commit message `initial commit`. This creates the first commit to your managed repo and allows you to open a branch where you can add new dbt code. 4. You can now directly query data from your warehouse and execute `dbt run`. You can try this out now: + - Delete the models/examples folder in the **File Explorer**. - Click **+ Create new file**, add this query to the new file, and click **Save as** to save the new file: ```sql select * from raw.jaffle_shop.customers @@ -332,7 +333,7 @@ In your source file, you can also use the **Generate model** button to create a ::: 4. Hover over the `models` directory and click the **...**, then select **Create file**. -5. Name the file `staging/stripe/stripe.yml` , then click **Create**. +5. Name the file `staging/stripe/src_stripe.yml` , then click **Create**. 6. Copy the following text into the file and click **Save**. ```yaml @@ -789,12 +790,6 @@ semantic_models: agg: count_distinct metrics: - - name: "customers" - description: "Count of customers" - type: simple - label: "customers" - type_params: - measure: customers - name: "customers_with_orders" label: "customers_with_orders" description: "Unique count of customers placing orders" From 490b1d85070cfaf2ca3447bbef5d659c8f38e684 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 18 Apr 2024 08:18:23 -0700 Subject: [PATCH 35/45] Minor nits to first 3 steps --- website/docs/guides/sl-snowflake-qs.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index b6d6ae57cfe..2cfd15b30ed 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -32,7 +32,7 @@ import DeprecationNotice from '/snippets/_sl-deprecation-notice.md'; ## Introduction -The [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl), powered by [MetricFlow](/docs/build/about-metricflow), simplifies setting up key business metrics. It centralizes definitions, avoids duplicate code, and ensures easy access to metrics in downstream tools. MetricFlow helps manage company metrics with ease, allowing you to define metrics in your dbt project and query them in dbt Cloud with [MetricFlow commands](/docs/build/metricflow-commands). +The [dbt Semantic Layer](/docs/use-dbt-semantic-layer/dbt-sl), powered by [MetricFlow](/docs/build/about-metricflow), simplifies the setup of key business metrics. It centralizes definitions, avoids duplicate code, and ensures easy access to metrics in downstream tools. MetricFlow helps manage company metrics easier, allowing you to define metrics in your dbt project and query them in dbt Cloud with [MetricFlow commands](/docs/build/metricflow-commands). import SLCourses from '/snippets/_sl-course.md'; @@ -41,7 +41,7 @@ import SLCourses from '/snippets/_sl-course.md'; This quickstart guide is designed for dbt Cloud users using Snowflake as their data platform. It focuses on building and defining metrics, setting up the dbt Semantic Layer in a dbt Cloud project, and querying metrics in Google Sheets. -If you're using a data platform other than Snowflake, this guide is also applicable to you. You can adapt the setup for your specific platform by following the account setup and data loading instructions detailed on the following pages: +If you're using a data platform other than Snowflake, this guide can also be applicable to you. You can adapt the setup for your specific platform by following the account setup and data loading instructions detailed on the following pages: - [BigQuery](https://docs.getdbt.com/guides/bigquery?step=2) (Steps 2 - 5) - [Databricks](https://docs.getdbt.com/guides/databricks?step=2) (Steps 2 - 4) @@ -57,8 +57,8 @@ The rest of this guide applies universally across all supported platforms, ensur - Your production and development environments must be on [dbt version 1.6 or higher](/docs/dbt-versions/upgrade-dbt-version-in-cloud). Alternatively, set your environment to[ Keep on latest version](/docs/dbt-versions/upgrade-dbt-version-in-cloud#keep-on-latest-version) to always remain on the latest version. - You have a [trial Snowflake account.](https://signup.snowflake.com/). When creating an account: - Select the Enterprise Snowflake edition to ensure you have ACCOUNTADMIN access. For a full implementation, you should consider organizational questions when choosing a cloud provider. For more information, see [Introduction to Cloud Platforms](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms) in the Snowflake documentation. - - Before proceeding, you will need to select a cloud provider and region. For this setup, all cloud providers and regions will work so choose whichever you’d like. -- Basic understanding of SQL and dbt (meaning you either used dbt before or completed the [dbt Fundamentals](https://courses.getdbt.com/collections) course). + - Before proceeding, you will need to select a cloud provider and region. For this setup, all cloud providers and regions will work so choose whichever you prefer. +- Basic understanding of SQL and dbt. For example, you've used dbt before or have completed the [dbt Fundamentals](https://courses.getdbt.com/collections) course. ### What you'll learn @@ -67,7 +67,7 @@ This guide will cover the following topics: - Create a new Snowflake worksheet and set up your environment - Load sample data into your Snowflake account - Connect dbt Cloud to Snowflake -- Build out an example dbt Cloud project +- Build an example dbt Cloud project - Create a semantic model in dbt Cloud - Define metrics in dbt Cloud - Test and query metrics in dbt Cloud From 6b2a6db056dc4c18c784537186baf5556aad977b Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Thu, 18 Apr 2024 16:24:42 +0100 Subject: [PATCH 36/45] add img --- website/snippets/_sl-connect-and-query-api.md | 2 ++ .../dbt-cloud/semantic-layer/sl-gsheets.jpg | Bin 0 -> 195622 bytes 2 files changed, 2 insertions(+) create mode 100644 website/static/img/docs/dbt-cloud/semantic-layer/sl-gsheets.jpg diff --git a/website/snippets/_sl-connect-and-query-api.md b/website/snippets/_sl-connect-and-query-api.md index 6522e644f11..bc58a374e8d 100644 --- a/website/snippets/_sl-connect-and-query-api.md +++ b/website/snippets/_sl-connect-and-query-api.md @@ -7,3 +7,5 @@ To query your metrics using Google Sheets: 1. Make sure you have a Gmail account. If you don’t already have one, make one at [gmail.com](http://gmail.com/). 2. To set up Google Sheets and query your metrics, follow the detailed instructions on the [Google Sheets integration](/docs/use-dbt-semantic-layer/gsheets) page. 3. Start playing around with it! Query a metric, like `order_total`. Filter it with a dimension, like `order_date`. You can also use the `group_by` parameter to group your metrics by a specific dimension. + + diff --git a/website/static/img/docs/dbt-cloud/semantic-layer/sl-gsheets.jpg b/website/static/img/docs/dbt-cloud/semantic-layer/sl-gsheets.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ce8a801f88d4566ad4311b8e1f4b73f529d9cae GIT binary patch literal 195622 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
What’s happening internally? + - Merging the code into your main branch allows dbt Cloud to pull those changes and builds the definition in the manifest produced by the run.
- Re-running the job in the deployment environment helps materialize the models, which the metrics depend on, in the data platform. It also makes sure that the manifest is up to date.
- The Semantic Layer APIs pulls in the most recent manifest and allows your integration information to extract metadata from it. +
## Set up dbt Semantic Layer diff --git a/website/snippets/_sl-test-and-query-metrics.md b/website/snippets/_sl-test-and-query-metrics.md index 29a75a4b5f2..0733feb164a 100644 --- a/website/snippets/_sl-test-and-query-metrics.md +++ b/website/snippets/_sl-test-and-query-metrics.md @@ -1,14 +1,14 @@ To work with metrics in dbt, you have several tools to validate or run commands. Here's how you can test and query metrics depending on your setup: -- [**dbt Cloud IDE users**](#dbt-cloud-ide-users) — Currently, running MetricFlow commands directly in the [dbt Cloud IDE](/docs/cloud/dbt-cloud-ide/develop-in-the-cloud) isn't supported, but it's on the way! You can still validate metrics using the **Preview** or **Compile** options, or visually through the DAG for semantic checks. This ensures your metrics are correctly defined without directly running commands. +- [**dbt Cloud IDE users**](#dbt-cloud-ide-users) — Currently, running MetricFlow commands directly in the [dbt Cloud IDE](/docs/cloud/dbt-cloud-ide/develop-in-the-cloud) isn't supported, but is coming soon. You can still validate metrics using the **Preview** or **Compile** options, or visually through the DAG for semantic checks. This ensures your metrics are correctly defined without directly running commands. - [**dbt Cloud CLI users**](#dbt-cloud-cli-users) — The [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) enables you to run [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) for direct interaction with metrics. -- **dbt Core users** — Use the MetricFlow CLI for command execution. Whicle the this guide focuses on dbt Cloud users, dbt Core users can find detailed MetricFlow CLI setup instructions in the [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) page. Note that to use the dbt Semantic Layer, you need to have a Team or Enterprise account. +- **dbt Core users** — Use the MetricFlow CLI for command execution. While this guide focuses on dbt Cloud users, dbt Core users can find detailed MetricFlow CLI setup instructions in the [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) page. Be aware that to use the dbt Semantic Layer, you need to have a Team or Enterprise account. Alternatively, you can run commands with SQL client tools like DataGrip, DBeaver, or RazorSQL. ### dbt Cloud IDE users -You can validate your metrics in the dbt Cloud IDE by selecting the metric you want to validate and viewing it in the **Lineage** tab. (Support for running commands in the dbt Cloud IDE support coming soon). +You can validate your metrics in the dbt Cloud IDE by selecting the metric you want to validate and viewing it in the **Lineage** tab. Once validated, make sure you commit and merge your changes in your project. @@ -16,7 +16,7 @@ Once validated, make sure you commit and merge your changes in your project. ### dbt Cloud CLI users -This section is for dbt Cloud CLI users (Note, support for dbt Cloud IDE is coming soon). MetricFlow commands are integrated with dbt Cloud, which means you can run MetricFlow commands as soon as you install the dbt Cloud CLI. Your account will automatically manage version control for you. +This section is for dbt Cloud CLI users. MetricFlow commands are integrated with dbt Cloud, which means you can run MetricFlow commands as soon as you install the dbt Cloud CLI. Your account will automatically manage version control for you. Refer to the following steps to get started: @@ -25,7 +25,7 @@ Refer to the following steps to get started: 3. MetricFlow builds a semantic graph and generates a `semantic_manifest.json` file in dbt Cloud, which is stored in the `/target` directory. If using the Jaffle Shop example, run `dbt seed && dbt run` to ensure the required data is in your data platform before proceeding. :::info Run dbt parse when you make changes to metrics -Anytime you make changes to metrics, you need to run `dbt parse` at a minimum. This ensures the `semantic_manifest.json` file is updated and you can have your changes reflected when querying metrics. +Any time you make changes to metrics, you need to run `dbt parse` at a minimum. This ensures the `semantic_manifest.json` file is updated and you can have your changes reflected when querying metrics. ::: 4. Run `dbt sl --help` to confirm you have MetricFlow installed and that you can view the available commands. From 3327df2dedfaf692867f60bd30a922c865af3002 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 18 Apr 2024 10:07:19 -0700 Subject: [PATCH 41/45] Minor nits for step pages 14 -16 --- website/snippets/_new-sl-setup.md | 2 +- website/snippets/_sl-connect-and-query-api.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/snippets/_new-sl-setup.md b/website/snippets/_new-sl-setup.md index eac0ca4fc63..74273a4c617 100644 --- a/website/snippets/_new-sl-setup.md +++ b/website/snippets/_new-sl-setup.md @@ -26,6 +26,6 @@ Now that we've created and successfully run a job in your environment, you're re -7. Save and copy your environment ID, service token, and host, which you'll need to use downstream tools. For more info on how to integrate with partner integrations, refer to [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations). +7. Save and copy your environment ID, service token, and host, which you'll need to use in the downstream tools. For more info on how to integrate with partner integrations, refer to [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations). 8. Return to the **Project Details** page and click the **[Generate a Service Token](/docs/dbt-cloud-apis/service-tokens)** button. Make sure it has Semantic Layer Only and Metadata Only permissions. Name the token and save it. Once the token is generated, you won't be able to view this token again so make sure to record it somewhere safe. diff --git a/website/snippets/_sl-connect-and-query-api.md b/website/snippets/_sl-connect-and-query-api.md index bc58a374e8d..001f780f2bc 100644 --- a/website/snippets/_sl-connect-and-query-api.md +++ b/website/snippets/_sl-connect-and-query-api.md @@ -4,8 +4,8 @@ This section will guide you on how to query and use the Google Sheets integratio - [Exports](/docs/use-dbt-semantic-layer/exports) to expose tables of metrics and dimensions in your data platform and create a custom integration with tools such as PowerBI, and more. To query your metrics using Google Sheets: -1. Make sure you have a Gmail account. If you don’t already have one, make one at [gmail.com](http://gmail.com/). -2. To set up Google Sheets and query your metrics, follow the detailed instructions on the [Google Sheets integration](/docs/use-dbt-semantic-layer/gsheets) page. -3. Start playing around with it! Query a metric, like `order_total`. Filter it with a dimension, like `order_date`. You can also use the `group_by` parameter to group your metrics by a specific dimension. +1. Make sure you have a [Gmail](http://gmail.com/) account. +2. To set up Google Sheets and query your metrics, follow the detailed instructions on [Google Sheets integration](/docs/use-dbt-semantic-layer/gsheets). +3. Start using with it. You can query a metric, like `order_total`. Filter it with a dimension, like `order_date`. You can also use the `group_by` parameter to group your metrics by a specific dimension. From bfa5d80b078289f3e350666c093fee6fb1669bb9 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 19 Apr 2024 13:04:17 +0100 Subject: [PATCH 42/45] final updates --- website/docs/guides/sl-snowflake-qs.md | 119 +++++++++++++----- website/snippets/_sl-connect-and-query-api.md | 2 +- 2 files changed, 92 insertions(+), 29 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 2f859bf8b5a..153772b4e2f 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -41,39 +41,102 @@ import SLCourses from '/snippets/_sl-course.md'; This quickstart guide is designed for dbt Cloud users using Snowflake as their data platform. It focuses on building and defining metrics, setting up the dbt Semantic Layer in a dbt Cloud project, and querying metrics in Google Sheets. -If you're using a data platform other than Snowflake, this guide can also be applicable to you. You can adapt the setup for your specific platform by following the account setup and data loading instructions detailed on the following pages: +**For users on different data platform** -- [BigQuery](https://docs.getdbt.com/guides/bigquery?step=2) (Steps 2 - 5) -- [Databricks](https://docs.getdbt.com/guides/databricks?step=2) (Steps 2 - 4) -- [Microsoft Fabric](https://docs.getdbt.com/guides/microsoft-fabric?step=2) (Steps 2 - 3) -- [Redshift](https://docs.getdbt.com/guides/redshift?step=2) (Steps 2 - 4) -- [Starburst Galaxy](https://docs.getdbt.com/guides/starburst-galaxy?step=2) (Steps 2 - 5) +If you're using a data platform other than Snowflake, this guide is also be applicable to you. You can adapt the setup for your specific platform by following the account setup and data loading instructions detailed in the following tabs for each respective platform. The rest of this guide applies universally across all supported platforms, ensuring you can fully leverage the dbt Semantic Layer. + + + + +Open a new tab and follow these quick steps for account setup and data loading instructions: + +- [Step 2: Create a new GCP project](https://docs.getdbt.com/guides/bigquery?step=2) +- [Step 3: Create BigQuery dataset](https://docs.getdbt.com/guides/bigquery?step=3) +- [Step 4: Generate BigQuery credentials](https://docs.getdbt.com/guides/bigquery?step=4) +- [Step 5: Connect dbt Cloud to BigQuery](https://docs.getdbt.com/guides/bigquery?step=5) + + + + + +Open a new tab and follow these quick steps for account setup and data loading instructions: + +- [Step 2: Create a Databricks workspace](https://docs.getdbt.com/guides/databricks?step=2) +- [Step 3: Load data](https://docs.getdbt.com/guides/databricks?step=3) +- [Step 4: Connect dbt Cloud to Databricks](https://docs.getdbt.com/guides/databricks?step=4) + + + + + +Open a new tab and follow these quick steps for account setup and data loading instructions: + +- [Step 2: Load data into your Microsoft Fabric warehouse](https://docs.getdbt.com/guides/microsoft-fabric?step=2) +- [Step 3: Connect dbt Cloud to Microsoft Fabric](https://docs.getdbt.com/guides/microsoft-fabric?step=3) + + + + + +Open a new tab and follow these quick steps for account setup and data loading instructions: + +- [Step 2: Create a Redshift cluster](https://docs.getdbt.com/guides/redshift?step=2) +- [Step 3: Load data](https://docs.getdbt.com/guides/redshift?step=3) +- [Step 4: Connect dbt Cloud to Redshift](https://docs.getdbt.com/guides/redshift?step=3) + + + + + +Open a new tab and follow these quick steps for account setup and data loading instructions: + +- [Step 2: Load data to an Amazon S3 bucket](https://docs.getdbt.com/guides/starburst-galaxy?step=2) +- [Step 3: Connect Starburst Galaxy to Amazon S3 bucket data](https://docs.getdbt.com/guides/starburst-galaxy?step=3) +- [Step 4: Create tables with Starburst Galaxy](https://docs.getdbt.com/guides/starburst-galaxy?step=4) +- [Step 5: Connect dbt Cloud to Starburst Galaxy](https://docs.getdbt.com/guides/starburst-galaxy?step=5) + + + + + ## Prerequisites - You need a [dbt Cloud](https://www.getdbt.com/signup/) Trial, Team, or Enterprise account for all deployments. Contact your representative for Single-tenant setup; otherwise, create an account using this guide. -- Your production and development environments must be on [dbt version 1.6 or higher](/docs/dbt-versions/upgrade-dbt-version-in-cloud). Alternatively, set your environment to[ Keep on latest version](/docs/dbt-versions/upgrade-dbt-version-in-cloud#keep-on-latest-version) to always remain on the latest version. -- You have a [trial Snowflake account.](https://signup.snowflake.com/). When creating an account: - - Select the Enterprise Snowflake edition to ensure you have ACCOUNTADMIN access. For a full implementation, you should consider organizational questions when choosing a cloud provider. For more information, see [Introduction to Cloud Platforms](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms) in the Snowflake documentation. - - Before proceeding, you will need to select a cloud provider and region. For this setup, all cloud providers and regions will work so choose whichever you prefer. +- Have the correct [dbt Cloud license](/docs/cloud/manage-access/seats-and-users) and [permissions](/docs/cloud/manage-access/self-service-permissions) based on your plan: + + + - Enterprise — Developer license with Account Admin permissions. Or "Owner" with a Developer license, assigned Project Creator, Database Admin, or Admin permissions. + - Team — "Owner" access with a Developer license. + - Trial — Automatic "Owner" access under a trail of the Team plan. + + + +- Production and development environments must be on [dbt version 1.6 or higher](/docs/dbt-versions/upgrade-dbt-version-in-cloud). Alternatively, set your environment to[ Keep on latest version](/docs/dbt-versions/upgrade-dbt-version-in-cloud#keep-on-latest-version) to always remain on the latest version. +- Create a [trial Snowflake account](https://signup.snowflake.com/): + - Select the Enterprise Snowflake edition with ACCOUNTADMIN access. Consider organizational questions when choosing a cloud provider, refer to Snowflake's [Introduction to Cloud Platforms](https://docs.snowflake.com/en/user-guide/intro-cloud-platforms). + - Select a cloud provider and region. All cloud providers and regions will work so choose whichever you prefer. - Basic understanding of SQL and dbt. For example, you've used dbt before or have completed the [dbt Fundamentals](https://courses.getdbt.com/collections) course. ### What you'll learn This guide will cover the following topics: -- Create a new Snowflake worksheet and set up your environment -- Load sample data into your Snowflake account -- Connect dbt Cloud to Snowflake -- Build an example dbt Cloud project -- Create a semantic model in dbt Cloud -- Define metrics in dbt Cloud -- Test and query metrics in dbt Cloud -- Run a production job in dbt Cloud -- Set up dbt Semantic Layer in dbt Cloud -- Connect and query metrics with Google Sheets +- [Create a new Snowflake worksheet and set up your environment](/guides/sl-snowflake-qs?step=3) +- [Load sample data into your Snowflake account](/guides/sl-snowflake-qs?step=4) +- [Connect dbt Cloud to Snowflake](/guides/sl-snowflake-qs?step=5) +- [Set up a dbt Cloud managed repository](/guides/sl-snowflake-qs?step=6) +- [Initialized a dbt Cloud project and start developer](/guides/sl-snowflake-qs?step=7) +- [Build your dbt Cloud project](/guides/sl-snowflake-qs?step=8) +- [Create a semantic model in dbt Cloud](/guides/sl-snowflake-qs?step=9) +- [Define metrics in dbt Cloud](/guides/sl-snowflake-qs?step=10) +- [Add second semantic model](/guides/sl-snowflake-qs?step=11) +- [Test and query metrics in dbt Cloud](/guides/sl-snowflake-qs?step=12) +- [Run a production job in dbt Cloud](/guides/sl-snowflake-qs?step=13) +- [Set up dbt Semantic Layer in dbt Cloud](/guides/sl-snowflake-qs?step=14) +- [Connect and query metrics with Google Sheets](/guides/sl-snowflake-qs?step=15) ## Create new Snowflake worksheet and set up environment @@ -523,7 +586,7 @@ select * from final - Each semantic model will contain zero, one, or many foreign or unique entities used to connect to other entities. - Each semantic model may also contain dimensions, measures, and metrics. This is what actually gets fed into and queried by your downstream BI tool. -In the following steps, semantic models help us define how to interpret the data related to orders. It includes entities (like ID columns serving as keys for joining data), dimensions (for grouping or filtering data), and measures (for data aggregations). +In the following steps, semantic models enable you to define how to interpret the data related to orders. It includes entities (like ID columns serving as keys for joining data), dimensions (for grouping or filtering data), and measures (for data aggregations). 1. Create a new file `models/metrics/fct_orders.yml` 2. Add the following code to that newly created file: @@ -540,8 +603,8 @@ semantic_models: The following sections explain [dimensions](/docs/build/dimensions), [entities](/docs/build/entities), and [measures](/docs/build/measures) in more detail, showing how they each play a role in semantic models. - [Entities](#entities) act as unique identifiers (like ID columns) that link data together from different tables. -- [Dimensions](#dimensions) allow us to categorize and filter data, making it easier to organize. -- [Measures](#measures) help us calculate data, providing valuable insights through aggregation. +- [Dimensions](#dimensions) categorize and filter data, making it easier to organize. +- [Measures](#measures) calculates data, providing valuable insights through aggregation. ### Entities @@ -644,11 +707,11 @@ semantic_models: There are different types of metrics you can configure: -- **[Conversion metrics](/docs/build/conversion)** — Track when a base event and a subsequent conversion event occur for an entity within a set time period. -- **[Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics)** — Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Be aware that you must create the time spine model before you add cumulative metrics. -- **[Derived metrics](/docs/build/metrics-overview#derived-metrics)** — Allows you to do calculations on top of metrics. -- **[Simple metrics](/docs/build/metrics-overview#simple-metrics)** — Directly reference a single measure without any additional measures involved. -- **[Ratio metrics](/docs/build/metrics-overview#ratio-metrics)** — Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. +- [Conversion metrics](/docs/build/conversion) — Track when a base event and a subsequent conversion event occur for an entity within a set time period. +- [Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics) — Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Be aware that you must create the time spine model before you add cumulative metrics. +- [Derived metrics](/docs/build/metrics-overview#derived-metrics) — Allows you to do calculations on top of metrics. +- [Simple metrics](/docs/build/metrics-overview#simple-metrics) — Directly reference a single measure without any additional measures involved. +- [Ratio metrics](/docs/build/metrics-overview#ratio-metrics) — Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. Once you've created your semantic models, it's time to start referencing those measures you made to create some metrics: diff --git a/website/snippets/_sl-connect-and-query-api.md b/website/snippets/_sl-connect-and-query-api.md index 001f780f2bc..df15d9e4f67 100644 --- a/website/snippets/_sl-connect-and-query-api.md +++ b/website/snippets/_sl-connect-and-query-api.md @@ -8,4 +8,4 @@ To query your metrics using Google Sheets: 2. To set up Google Sheets and query your metrics, follow the detailed instructions on [Google Sheets integration](/docs/use-dbt-semantic-layer/gsheets). 3. Start using with it. You can query a metric, like `order_total`. Filter it with a dimension, like `order_date`. You can also use the `group_by` parameter to group your metrics by a specific dimension. - + From b253564f1a0028af9744f940f0c43383eaecefb2 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 19 Apr 2024 13:04:55 +0100 Subject: [PATCH 43/45] update size --- website/snippets/_sl-connect-and-query-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/snippets/_sl-connect-and-query-api.md b/website/snippets/_sl-connect-and-query-api.md index df15d9e4f67..dd177f93604 100644 --- a/website/snippets/_sl-connect-and-query-api.md +++ b/website/snippets/_sl-connect-and-query-api.md @@ -8,4 +8,4 @@ To query your metrics using Google Sheets: 2. To set up Google Sheets and query your metrics, follow the detailed instructions on [Google Sheets integration](/docs/use-dbt-semantic-layer/gsheets). 3. Start using with it. You can query a metric, like `order_total`. Filter it with a dimension, like `order_date`. You can also use the `group_by` parameter to group your metrics by a specific dimension. - + From 650fe55ba6570e8eaf81ca6d86f286fbf728ec29 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 19 Apr 2024 13:13:55 +0100 Subject: [PATCH 44/45] final twweaks --- website/docs/guides/sl-snowflake-qs.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 153772b4e2f..eb607497c8e 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -913,23 +913,22 @@ https://github.com/dbt-labs/docs.getdbt.com/blob/current/website/snippets/_sl-co -Great job on completing the dbt Semantic Layer guide 🎉! You've learned: - -- Create a new Snowflake worksheet and set up your environment -- Load sample data into your Snowflake account -- Connect dbt Cloud to Snowflake -- Build out an example dbt Cloud project -- How to build and define metrics -- Test and query metrics in dbt Cloud -- Run a production job in dbt Cloud -- Set up dbt Semantic Layer in dbt Cloud -- Connect and query metrics with Google Sheets +Great job on completing the comprehensive dbt Semantic Layer guide 🎉! You should hopefully have gained a clear understanding of what the dbt Semantic Layer is, its purpose, and when to use it in your projects. + +You've learned how to: + +- Set up your Snowflake environment and dbt Cloud, including creating worksheets and loading data. +- Connect and configure dbt Cloud with Snowflake. +- Build, test, and manage dbt Cloud projects, focusing on metrics and semantic layers. +- Run production jobs and query metrics with Google Sheets. + +For next steps, you can start defining your own metrics and learn additional configuration options such as [exports](/docs/use-dbt-semantic-layer/exports), [fill null values](/docs/build/advanced-topics), and more. Here are some additional resources to help you continue your journey: - [dbt Semantic Layer FAQs](/docs/use-dbt-semantic-layer/sl-faqs) - [Available integrations](/docs/use-dbt-semantic-layer/avail-sl-integrations) - Demo on [how to define and query metrics with MetricFlow](https://www.loom.com/share/60a76f6034b0441788d73638808e92ac?sid=861a94ac-25eb-4fd8-a310-58e159950f5a) -- [Billing](/docs/cloud/billing) +- [Join our live demos](https://www.getdbt.com/resources/webinars/dbt-cloud-demos-with-experts) From c444f6b6df8f1edd81dc114f33c9801f2d28fd68 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Fri, 19 Apr 2024 13:19:37 +0100 Subject: [PATCH 45/45] update --- website/docs/guides/sl-snowflake-qs.md | 2 +- website/snippets/_sl-test-and-query-metrics.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index eb607497c8e..28e2be9fc66 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -708,7 +708,7 @@ semantic_models: There are different types of metrics you can configure: - [Conversion metrics](/docs/build/conversion) — Track when a base event and a subsequent conversion event occur for an entity within a set time period. -- [Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics) — Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Be aware that you must create the time spine model before you add cumulative metrics. +- [Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics) — Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Note, that you must create the time spine model before you add cumulative metrics. - [Derived metrics](/docs/build/metrics-overview#derived-metrics) — Allows you to do calculations on top of metrics. - [Simple metrics](/docs/build/metrics-overview#simple-metrics) — Directly reference a single measure without any additional measures involved. - [Ratio metrics](/docs/build/metrics-overview#ratio-metrics) — Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. diff --git a/website/snippets/_sl-test-and-query-metrics.md b/website/snippets/_sl-test-and-query-metrics.md index 0733feb164a..936f4804f9f 100644 --- a/website/snippets/_sl-test-and-query-metrics.md +++ b/website/snippets/_sl-test-and-query-metrics.md @@ -2,7 +2,7 @@ To work with metrics in dbt, you have several tools to validate or run commands. - [**dbt Cloud IDE users**](#dbt-cloud-ide-users) — Currently, running MetricFlow commands directly in the [dbt Cloud IDE](/docs/cloud/dbt-cloud-ide/develop-in-the-cloud) isn't supported, but is coming soon. You can still validate metrics using the **Preview** or **Compile** options, or visually through the DAG for semantic checks. This ensures your metrics are correctly defined without directly running commands. - [**dbt Cloud CLI users**](#dbt-cloud-cli-users) — The [dbt Cloud CLI](/docs/cloud/cloud-cli-installation) enables you to run [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) for direct interaction with metrics. -- **dbt Core users** — Use the MetricFlow CLI for command execution. While this guide focuses on dbt Cloud users, dbt Core users can find detailed MetricFlow CLI setup instructions in the [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) page. Be aware that to use the dbt Semantic Layer, you need to have a Team or Enterprise account. +- **dbt Core users** — Use the MetricFlow CLI for command execution. While this guide focuses on dbt Cloud users, dbt Core users can find detailed MetricFlow CLI setup instructions in the [MetricFlow commands](/docs/build/metricflow-commands#metricflow-commands) page. Note that to use the dbt Semantic Layer, you need to have a Team or Enterprise account. Alternatively, you can run commands with SQL client tools like DataGrip, DBeaver, or RazorSQL.

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 KeDNjo(EkU3^cda% literal 0 HcmV?d00001 From 89cfa40ef8ef5fd215831dd64d0bb92d1e4a54f5 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 18 Apr 2024 08:44:39 -0700 Subject: [PATCH 37/45] Minor nits --- website/docs/guides/sl-snowflake-qs.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 2cfd15b30ed..34e720b2f81 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -86,7 +86,7 @@ This guide will cover the following topics: The data used here is stored as CSV files in a public S3 bucket and the following steps will guide you through how to prepare your Snowflake account for that data and upload it. -Create a new virtual warehouse, two new databases (one for raw data, the other for future dbt development), and two new schemas (one for `jaffle_shop` data, the other for stripe data). +Create a new virtual warehouse, two new databases (one for raw data, the other for future dbt development), and two new schemas (one for `jaffle_shop` data, the other for `stripe` data). 1. Run the following SQL commands one by one by typing them into the Editor of your new Snowflake SQL worksheet to set up your environment. @@ -108,7 +108,7 @@ create schema raw.stripe; ## Load data into Snowflake Now that your environment is set up, you can start loading data into it. You will be working within the raw database, using the `jaffle_shop` and stripe schemas to organize your tables. -1. Create customer table — First, delete all contents (empty) in the Editor of the Snowflake worksheet. Then, run this SQL command to create the customer table in the `jaffle_shop` schema: +1. Create customer table. First, delete all contents (empty) in the Editor of the Snowflake worksheet. Then, run this SQL command to create the customer table in the `jaffle_shop` schema: ```sql create table raw.jaffle_shop.customers @@ -120,7 +120,7 @@ Now that your environment is set up, you can start loading data into it. You wil You should see a ‘Table `CUSTOMERS` successfully created.’ message. -2. Load data — After creating the table, delete all contents in the Editor. Run this command to load data from the S3 bucket into the customer table: +2. Load data. After creating the table, delete all contents in the Editor. Run this command to load data from the S3 bucket into the customer table: ```sql copy into raw.jaffle_shop.customers (id, first_name, last_name) @@ -134,7 +134,7 @@ Now that your environment is set up, you can start loading data into it. You wil You should see a confirmation message after running the command. -3. Create `orders` table — Delete all contents in the Editor. Run the following command to create… +3. Create `orders` table. Delete all contents in the Editor. Run the following command to create… ```sql create table raw.jaffle_shop.orders @@ -148,7 +148,7 @@ Now that your environment is set up, you can start loading data into it. You wil You should see a confirmation message after running the command. -4. Load data — Delete all contents in the Editor, then run this command to load data into the orders table: +4. Load data. Delete all contents in the Editor, then run this command to load data into the orders table: ```sql copy into raw.jaffle_shop.orders (id, user_id, order_date, status) @@ -162,7 +162,7 @@ Now that your environment is set up, you can start loading data into it. You wil You should see a confirmation message after running the command. -5. Create `payment` table — Delete all contents in the Editor. Run the following command to create the payment table: +5. Create `payment` table. Delete all contents in the Editor. Run the following command to create the payment table: ```sql create table raw.stripe.payment @@ -178,7 +178,7 @@ Now that your environment is set up, you can start loading data into it. You wil You should see a confirmation message after running the command. -6. Load data — Delete all contents in the Editor. Run the following command to load data into the payment table: +6. Load data. Delete all contents in the Editor. Run the following command to load data into the payment table: ```sql copy into raw.stripe.payment (id, orderid, paymentmethod, status, amount, created) @@ -192,7 +192,7 @@ Now that your environment is set up, you can start loading data into it. You wil You should see a confirmation message after running the command. -7. Verify data — Verify that the data is loaded by running these SQL queries. Confirm that you can see output for each one, like the following confirmation image. +7. Verify data. Verify that the data is loaded by running these SQL queries. Confirm that you can see output for each one, like the following confirmation image. ```sql select * from raw.jaffle_shop.customers; From 05417940626ed70831c90afb20a6e22ed1bf264d Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 18 Apr 2024 08:59:16 -0700 Subject: [PATCH 38/45] Minor nits for review of step page 8 --- website/docs/guides/sl-snowflake-qs.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 34e720b2f81..5d634177282 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -303,16 +303,16 @@ The next step is to build your project. This involves adding sources, staging mo ### Add sources -[Sources](/docs/build/sources) in dbt are the raw data tables you'll transform. By organizing your source definitions, you document the origin of your data. It also makes your project and transformation more reliable, structured, and understandable. Let’s add our sources now. +[Sources](/docs/build/sources) in dbt are the raw data tables you'll transform. By organizing your source definitions, you document the origin of your data. It also makes your project and transformation more reliable, structured, and understandable. You have two options for working with files in the dbt Cloud IDE: -- Create a new branch (recommended) — Create a new branch to edit and commit your changes. Navigate to **Version Control** on the left sidebar and click **Create branch**. -- Edit in the protected primary branch — If you prefer to edit, format, or lint files and execute dbt commands directly in your primary git branch. The dbt Cloud IDE prevents commits to the protected branch, so you will be prompted to commit your changes to a new branch. +- **Create a new branch (recommended)** — Create a new branch to edit and commit your changes. Navigate to **Version Control** on the left sidebar and click **Create branch**. +- **Edit in the protected primary branch** — If you prefer to edit, format, or lint files and execute dbt commands directly in your primary git branch, use this option. The dbt Cloud IDE prevents commits to the protected branch so you'll be prompted to commit your changes to a new branch. Name the new branch `build-project`. -1. Hover over the `models` directory and click the **...**, then select **Create file**. +1. Hover over the `models` directory and click the three dot menu (**...**), then select **Create file**. 2. Name the file `staging/jaffle_shop/src_jaffle_shop.yml` , then click **Create**. 3. Copy the following text into the file and click **Save**. @@ -329,10 +329,10 @@ sources: ``` :::tip -In your source file, you can also use the **Generate model** button to create a new model file for each source. This will create a new file in the models directory with the given source name and fill in the SQL code of the source definition. +In your source file, you can also use the **Generate model** button to create a new model file for each source. This creates a new file in the `models` directory with the given source name and fill in the SQL code of the source definition. ::: -4. Hover over the `models` directory and click the **...**, then select **Create file**. +4. Hover over the `models` directory and click the three dot menu (**...**), then select **Create file**. 5. Name the file `staging/stripe/src_stripe.yml` , then click **Create**. 6. Copy the following text into the file and click **Save**. @@ -350,7 +350,7 @@ sources: ### Add staging models [Staging models](/best-practices/how-we-structure/2-staging) are the first transformation step in dbt. They clean and prepare your raw data, making it ready for more complex transformations and analyses. Follow these steps to add your staging models to your project. -1. Create the file `models/staging/jaffle_shop/stg_customers.sql`. Or you can use the **Generate model** button to create a new model file for each source. +1. Create the file `models/staging/jaffle_shop/stg_customers.sql`. Or, you can use the **Generate model** button to create a new model file for each source. 2. Copy the following query into the file and click **Save**. ```sql @@ -512,7 +512,7 @@ select * from final ``` -9. Enter `dbt run` in the command prompt at the bottom of the screen. You should get a successful run popup and also see in the run details that dbt has successfully built five models. +9. Enter `dbt run` in the command prompt at the bottom of the screen. You should get a successful run message and also see in the run details that dbt has successfully built five models. ## Create semantic models From e03555e48614e6437446405ff8a91ab5f2262911 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 18 Apr 2024 09:42:16 -0700 Subject: [PATCH 39/45] Nits for step pages 8 - 10 --- website/docs/guides/sl-snowflake-qs.md | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index 5d634177282..a35584c45a5 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -516,12 +516,12 @@ select * from final ## Create semantic models -The following steps describe how to set up [semantic models](/docs/build/semantic-models). Semantic models contain many object types (such as entities, measures, and dimensions) that allow MetricFlow to construct the queries for metric definitions. +[Semantic models](/docs/build/semantic-models) contain many object types (such as entities, measures, and dimensions) that allow MetricFlow to construct the queries for metric definitions. -- Each semantic model will be 1:1 with a dbt SQL/Python model -- Each semantic model will contain (at most) 1 primary or natural entity -- Each semantic model will contain zero, one, or many foreign or unique entities used to connect to other entities -- Each semantic model may also contain dimensions, measures, and metrics — this is what actually gets fed into and queried by your downstream BI tool. +- Each semantic model will be 1:1 with a dbt SQL/Python model. +- Each semantic model will contain (at most) 1 primary or natural entity. +- Each semantic model will contain zero, one, or many foreign or unique entities used to connect to other entities. +- Each semantic model may also contain dimensions, measures, and metrics. This is what actually gets fed into and queried by your downstream BI tool. In the following steps, semantic models help us define how to interpret the data related to orders. It includes entities (like ID columns serving as keys for joining data), dimensions (for grouping or filtering data), and measures (for data aggregations). @@ -537,7 +537,7 @@ semantic_models: ``` -The following section will explain [dimensions](/docs/build/dimensions), [entities](/docs/build/entities), and [measures](/docs/build/measures) in more detail, showing how they each play a role in semantic models. +The following sections explain [dimensions](/docs/build/dimensions), [entities](/docs/build/entities), and [measures](/docs/build/measures) in more detail, showing how they each play a role in semantic models. - [Entities](#entities) act as unique identifiers (like ID columns) that link data together from different tables. - [Dimensions](#dimensions) allow us to categorize and filter data, making it easier to organize. @@ -545,9 +545,9 @@ The following section will explain [dimensions](/docs/build/dimensions), [entiti ### Entities -[Entities](/docs/build/semantic-models#entities) are a real-world concept in a business, serving as the backbone of your semantic model. These are going to be id columns (like `order_id`) in our semantic models. These will serve as join keys to other semantic models. +[Entities](/docs/build/semantic-models#entities) are a real-world concept in a business, serving as the backbone of your semantic model. These are going to be ID columns (like `order_id`) in our semantic models. These will serve as join keys to other semantic models. -1. Add entities to your `fct_orders.yml` semantic model file: +Add entities to your `fct_orders.yml` semantic model file: ```yaml semantic_models: @@ -569,7 +569,7 @@ semantic_models: [Dimensions](/docs/build/semantic-models#entities) are a way to group or filter information based on categories or time. -1. Add dimensions to your `fct_orders.yml` semantic model file: +Add dimensions to your `fct_orders.yml` semantic model file: ```yaml semantic_models: @@ -596,7 +596,7 @@ semantic_models: [Measures](/docs/build/semantic-models#measures) are aggregations performed on columns in your model. Often, you’ll find yourself using them as final metrics themselves. Measures can also serve as building blocks for more complicated metrics. -1. Add measures to your `fct_orders.yml` semantic model file: +Add measures to your `fct_orders.yml` semantic model file: ```yaml semantic_models: @@ -640,19 +640,19 @@ semantic_models: ## Define metrics -[Metrics](/docs/build/metrics-overview) are the language your business users speak and measure business performance. To be technical about it, they are an aggregation over a column in your warehouse that you enrich with dimensional cuts. +[Metrics](/docs/build/metrics-overview) are the language your business users speak and measure business performance. They are an aggregation over a column in your warehouse that you enrich with dimensional cuts. There are different types of metrics you can configure: -- **[Conversion metrics](/docs/build/conversion)**: Track when a base event and a subsequent conversion event occur for an entity within a set time period. -- **[Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics):** Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Note that you will need to create the time spine model before you add cumulative metrics. -- **[Derived metrics](/docs/build/metrics-overview#derived-metrics)**: Allows you to do calculations on top of metrics. -- **[Simple metrics](/docs/build/metrics-overview#simple-metrics)**: Directly reference a single measure, without any additional measures involved. -- **[Ratio metrics](/docs/build/metrics-overview#ratio-metrics):** Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. +- **[Conversion metrics](/docs/build/conversion)** — Track when a base event and a subsequent conversion event occur for an entity within a set time period. +- **[Cumulative metrics](/docs/build/metrics-overview#cumulative-metrics)** — Aggregate a measure over a given window. If no window is specified, the window will accumulate the measure over all of the recorded time period. Be aware that you must create the time spine model before you add cumulative metrics. +- **[Derived metrics](/docs/build/metrics-overview#derived-metrics)** — Allows you to do calculations on top of metrics. +- **[Simple metrics](/docs/build/metrics-overview#simple-metrics)** — Directly reference a single measure without any additional measures involved. +- **[Ratio metrics](/docs/build/metrics-overview#ratio-metrics)** — Involve a numerator metric and a denominator metric. A constraint string can be applied to both the numerator and denominator or separately to the numerator or denominator. Once you've created your semantic models, it's time to start referencing those measures you made to create some metrics: -1. Add metrics to your `fct_orders.yml` semantic model file: +Add metrics to your `fct_orders.yml` semantic model file: ```yaml semantic_models: From 6a66054cede8f4bab75bed9fccc00caefc1b4372 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 18 Apr 2024 09:56:42 -0700 Subject: [PATCH 40/45] Nits for step pages 11 - 13 --- website/docs/guides/sl-snowflake-qs.md | 4 +++- website/snippets/_sl-test-and-query-metrics.md | 10 +++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/website/docs/guides/sl-snowflake-qs.md b/website/docs/guides/sl-snowflake-qs.md index a35584c45a5..2f859bf8b5a 100644 --- a/website/docs/guides/sl-snowflake-qs.md +++ b/website/docs/guides/sl-snowflake-qs.md @@ -746,7 +746,7 @@ metrics: Great job, you've successfully built your first semantic model! It has all the required elements: entities, dimensions, measures, and metrics. -Let’s expand your project's analytical capabilities by adding another semantic model in your other marts model: `dim_customers.yml`. +Let’s expand your project's analytical capabilities by adding another semantic model in your other marts model, such as: `dim_customers.yml`. After setting up your orders model: @@ -821,9 +821,11 @@ https://github.com/dbt-labs/docs.getdbt.com/blob/current/website/snippets/_sl-ru