From 2abffcb0a56748f603e682814a2cfc029fa21ebd Mon Sep 17 00:00:00 2001 From: Rachel Feinberg Date: Fri, 30 Aug 2024 14:17:05 -0700 Subject: [PATCH 1/7] BD-3419 Add Connected sources screenshot --- .../cloud_ingestion/connected_sources.md | 80 +++++++++--------- .../cloud_ingestion/connected_source_tab.png | Bin 0 -> 33639 bytes 2 files changed, 41 insertions(+), 39 deletions(-) create mode 100644 assets/img/cloud_ingestion/connected_source_tab.png diff --git a/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md b/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md index 22e8f37ab6d..62211aff320 100644 --- a/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md +++ b/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md @@ -9,21 +9,21 @@ page_type: reference # Connected Sources -> Connected sources are a zero-copy alternative to directly syncing data with Braze’s Cloud Data Ingestion (CDI) feature. With a connected source, directly query your data warehouse to create new segments–without copying any of the underlying data to Braze. +> Connected sources are a zero-copy alternative to directly syncing data with Braze’s Cloud Data Ingestion (CDI) feature. A connected source directly queries your data warehouse to create new segments without copying any of the underlying data to Braze. -Once a connected source is added to your Braze workspace, you can create a CDI segment within Segment Extensions. CDI Segments lets you write SQL that directly queries on your own data warehouse (using data there that’s made available via your CDI Connected Source), and creates and maintains a group of users that can be targeted within Braze. +After adding a connected source to your Braze workspace, you can create a CDI segment within Segment Extensions. CDI segments lets you write SQL that directly queries your own data warehouse (using data there that’s made available through your CDI Connected Source), and creates and maintains a group of users that can be targeted within Braze. -For more information on creating a segment with this source, see the [CDI Segments documentation]({{site.baseurl}}/user_guide/engagement_tools/segments/segment_extension/cdi_segments/). +For more information on creating a segment with this source, view [CDI segments]({{site.baseurl}}/user_guide/engagement_tools/segments/segment_extension/cdi_segments/). {% alert warning %} -Because connected sources run on your data warehouse directly, you will incur all costs associated with running these queries in your data warehouse. Connected sources do not consume data points, and CDI segments do not consume SQL Segment credits. +Because connected sources run on your data warehouse directly, you will incur all costs associated with running these queries in your data warehouse. Connected sources don't consume data points, and CDI segments don't consume SQL segment credits. {% endalert %} ## Integrating connected sources ### Step 1: Connect your resources -Cloud Data Ingestion connected sources require some setup on the Braze side and in your instance. Follow these steps to set up the integration−some steps will be done in your data warehouse and some steps will be done in your Braze dashboard. +Cloud Data Ingestion connected sources require some setup on Braze and in your instance. Follow these steps to set up the integration−some steps will be done in your data warehouse and some steps will be done in your Braze dashboard. {% tabs %} {% tab Snowflake %} @@ -77,7 +77,7 @@ There may be two to five minutes of warm-up time when Braze connects to Classic ### Step 2: Set up your data warehouse -First, set up the source data and required resources in your data warehouse environment. The connected source may reference one or more tables, so ensure your Braze user has permissions for all tables you want available in the connected source. +Set up the source data and required resources in your data warehouse environment. The connected source may reference one or more tables, so ensure your Braze user has permissions for all tables you want available in the connected source. {% tabs %} {% tab Snowflake %} @@ -114,7 +114,7 @@ GRANT USAGE ON WAREHOUSE BRAZE_INGESTION_WAREHOUSE TO ROLE BRAZE_INGESTION_ROLE; ``` {% alert note %} -The warehouse will need to have the **auto-resume** flag on. If not, you will need to grant Braze additional `OPERATE` privileges on the warehouse for Braze to turn it on when it's time to run the query. +The warehouse needs to have the **auto-resume** flag turned on. If it's not, you'll need to grant Braze additional `OPERATE` privileges on the warehouse for Braze to turn it on when it's time to run the query. {% endalert %} #### Step 2.3: Set up the user @@ -130,9 +130,9 @@ You will share connection information with Braze and receive a public key to app When connecting different workspaces to the same Snowflake account, you must create a unique user for each Braze workspace where you are creating an integration. Within a workspace, you can reuse the same user across integrations, but integration creation will fail if a user on the same Snowflake account is duplicated across workspaces. {% endalert %} -#### Step 2.4: Allow Braze IPs in Snowflake network policy (optional) +#### Step 2.4: Allow Braze IPs in your Snowflake network policy (optional) -Depending on the configuration of your Snowflake account, you may need to allow the following IP addresses in your Snowflake network policy. For more information on enabling this, see the relevant Snowflake documentation on [modifying a network policy](https://docs.snowflake.com/en/user-guide/network-policies.html#modifying-network-policies). +Depending on the configuration of your Snowflake account, you may need to allow the following IP addresses in your Snowflake network policy. For more information on doing this, view the relevant Snowflake documentation on [modifying a network policy](https://docs.snowflake.com/en/user-guide/network-policies.html#modifying-network-policies). {% subtabs %} {% subtab United States (US) %} @@ -176,7 +176,7 @@ Create a user for your connected source to use. This user will be used to genera You may choose to grant access to all tables in a schema, or grant privileges only to specific tables. Whichever tables the Braze role has access to will be available to query in the CDI segment. Be sure to grant access to any new tables to the user when they're created, or set default permissions for the user. - The `create table` permission is required so Braze can create a table with your CDI Segment query results before updating the segment in Braze. Braze will create a temporary table per segment, and the table will only persist while Braze is updating the segment. +The `create table` permission is required so Braze can create a table with your CDI Segment query results before updating the segment in Braze. Braze will create a temporary table per segment, and the table will only persist while Braze is updating the segment. #### Step 2.2: Allow access to Braze IPs @@ -185,7 +185,7 @@ If you have a firewall or other network policies, you must give Braze network ac You may also need to change your security groups to allow Braze access to your data in Redshift. Make sure to explicitly allow inbound traffic on the IPs below and on the port used to query your Redshift cluster (default is 5439). You should explicitly allow Redshift TCP connectivity on this port even if the inbound rules are set to "allow all". In addition, it is important that the endpoint for the Redshift cluster be publicly accessible in order for Braze to connect to your cluster. -If you do not want your Redshift cluster to be publicly accessible, you can set up a VPC and EC2 instance to use an ssh tunnel to access the Redshift data. For more information, see [AWS: How do I access a private Aamazon Redshift cluster from my local machine?](https://repost.aws/knowledge-center/private-redshift-cluster-local-machine) +If you don't want your Redshift cluster to be publicly accessible, you can set up a VPC and EC2 instance to use an ssh tunnel to access the Redshift data. For more information, see [AWS: How do I access a private Aamazon Redshift cluster from my local machine?](https://repost.aws/knowledge-center/private-redshift-cluster-local-machine) {% subtabs %} {% subtab United States (US) %} @@ -220,11 +220,11 @@ For instances `EU-01` and `EU-02`, these are the relevant IP addresses: Create a service account in GCP for Braze to use to connect and read data from your table(s). The service account should have the below permissions: -- **BigQuery Connection User:** This will allow Braze to make connections. -- **BigQuery User:** This will provide Braze access to run queries, read dataset metadata, and list tables. -- **BigQuery Data Viewer:** This will provide Braze access to view datasets and their contents. -- **BigQuery Job User:** This will provide Braze access to run jobs. -- **bigquery.tables.create** This will provide Braze access to create temporary tables during segment refresh. +- **BigQuery Connection User:** This allows Braze to make connections. +- **BigQuery User:** This provides Braze access to run queries, read dataset metadata, and list tables. +- **BigQuery Data Viewer:** This provides Braze access to view datasets and their contents. +- **BigQuery Job User:** This provides Braze access to run jobs. +- **bigquery.tables.create** This provides Braze access to create temporary tables during segment refresh. Create a service account for your connected source to use. This user will be used to generate the list of tables available in your CDI segments, and to query source tables to create new segments. After the connected source is created, Braze will discover the names and description of all tables available to the user in the source schema. @@ -232,7 +232,7 @@ You may choose to grant access to all tables in a dataset, or grant privileges o The `create table` permission is required so Braze can create a table with your CDI Segment query results before updating the segment in Braze. Braze will create a temporary table per segment, and the table will only persist while Braze is updating the segment. -After creating the service account and granting permissions, generate a JSON key. For more information, see [Google Cloud: Create and delete service account keys](https://cloud.google.com/iam/docs/keys-create-delete). You'll upload this to the Braze dashboard later. +After creating the service account and granting permissions, generate a JSON key. For more information, view [Google Cloud: Create and delete service account keys](https://cloud.google.com/iam/docs/keys-create-delete). You'll upload this to the Braze dashboard later. #### Step 2.2: Allow access to Braze IPs @@ -269,20 +269,20 @@ For instances `EU-01` and `EU-02`, these are the relevant IP addresses: {% tab Databricks %} #### Step 2.1: Create a Access Token -In order for Braze to access Databricks, a personal access token needs to be created. +For Braze to access Databricks, a personal access token needs to be created. -1. In your Databricks workspace, click your Databricks username in the top bar, and then select **User Settings** from the drop-down. +1. In your Databricks workspace, select your Databricks username in the top bar, and then select **User Settings** from the drop-down. 2. Make sure the service account has `CREATE TABLE` priviliges on the schema used for the connected souce. -3. On the Access tokens tab, click **Generate new token**. +3. On the Access tokens tab, select **Generate new token**. 4. Enter a comment that helps you to identify this token, such as "Braze CDI", and change the token’s lifetime to no lifetime by leaving the Lifetime (days) box empty (blank). -5. Click **Generate**. -6. Copy the displayed token, and then click **Done**. +5. Select **Generate**. +6. Copy the displayed token, and then select **Done**. This token will be used to generate the list of tables available in your CDI segments, and to query source tables to create new segments. After the connected source is created, Braze will discover the names and description of all tables available to the user in the source schema. You may choose to grant access to all tables in a schema, or grant privileges only to specific tables. Whichever tables the Braze role has access to will be available to query in the CDI segment. - The `create table` permission is required so Braze can create a table with your CDI Segment query results before updating the segment in Braze. Braze will create a temporary table per segment, and the table will only persist while Braze is updating the segment. +The `create table` permission is required so Braze can create a table with your CDI Segment query results before updating the segment in Braze. Braze will create a temporary table per segment, and the table will only persist while Braze is updating the segment. Keep the token in a safe place until you need to enter it on the Braze dashboard during the credential creation step. @@ -325,7 +325,9 @@ For instances `EU-01` and `EU-02`, these are the relevant IP addresses: {% tab Snowflake %} #### Step 3.1: Add Snowflake connection information and source table -Next, create a connected source in the Braze dashboard. Go to **Data Settings** > **Cloud Data Ingestion**. Navigate to the **Connected Sources** tab and click **Create data connection**. +Create a connected source in the Braze dashboard. Go to **Data Settings** > **Cloud Data Ingestion** > **Connected Sources** and select **Create data connection**. + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_tab.png %}) Input the information for your Snowflake data warehouse and source schema, then proceed to the next step. @@ -333,7 +335,7 @@ Input the information for your Snowflake data warehouse and source schema, then #### Step 3.2: Configure sync details -Next, choose a name for connected source. This name will be used in the list of available sources when you create a new CDI Segment. +Choose a name for the connected source. This name will be used in the list of available sources when you create a new CDI Segment. Configure a maximum runtime for this source. Braze will automatically abort any queries that exceed the maximum runtime when it's creating or refreshing a segment. The maximum runtime allowed is 60 minutes; a lower runtime will reduce costs incurred on your Snowflake account. @@ -345,7 +347,7 @@ If queries are consistently timing out and you have set a maximum runtime of 60 #### Step 3.3: Note the public key -In the **Test connection** page, you will see a RSA public key. Note this down. You will need it complete the integration in Snowflake. +In the **Test connection** page, take note of the RSA public key. You'll need it complete the integration in Snowflake. ![]({% image_buster /assets/img/cloud_ingestion/connected_source_sf_3.png %}) @@ -364,16 +366,16 @@ If you want to rotate the keys at any point, Braze can generate a new key pair a ALTER USER BRAZE_INGESTION_USER SET rsa_public_key='{INSERT_YOUR_KEY}'; ``` -Once you have added the key to the user in Snowflake, select **Test Connection** in Braze, and then select **Done**. Your connected source is now created and ready to use in CDI Segments. +After you add the key to the user in Snowflake, select **Test Connection** in Braze, and then select **Done**. Your connected source is now created and ready to use in CDI Segments. {% endtab %} {% tab Redshift %} #### Step 4.1: Add Redshift connection information and source table -Go to **Data Settings** > **Cloud Data Ingestion**. Navigate to the **Connected Sources** tab and click **Create data connection**. +Go to **Data Settings** > **Cloud Data Ingestion**. Navigate to the **Connected Sources** tab and select **Create data connection**. {% alert note %} -If you are using the [older navigation]({{site.baseurl}}/navigation), go to **Cloud Data Ingestion** under **Data**. +If you're using the [older navigation]({{site.baseurl}}/navigation), go to **Cloud Data Ingestion** under **Data**. {% endalert %} Input the information for your Redshift account and source schema, then proceed to the next step. @@ -382,7 +384,7 @@ Input the information for your Redshift account and source schema, then proceed #### Step 4.2: Configure sync details -Next, choose a name for connected source. This name will be used in the list of available sources when you create a new CDI Segment. +Choose a name for connected source. This name will be used in the list of available sources when you create a new CDI segment. Configure a maximum runtime for this source. Braze will automatically abort any queries that exceed the maximum runtime when it's creating or refreshing a segment. The maximum runtime allowed is 60 minutes; a lower runtime will reduce costs incurred on your Snowflake account. @@ -394,7 +396,7 @@ If queries are consistently timing out and you have set a maximum runtime of 60 #### Step 4.3: Test Connection -Select **Test Connection** in Braze to verify that the list of tables visible to the user is what you expect, select **Done**. Your connected source is now created and ready to use in CDI Segments. +Select **Test Connection** in Braze to verify that the list of tables visible to the user is what you expect, then select **Done**. Your connected source is now created and ready to use in CDI Segments. ![]({% image_buster /assets/img/cloud_ingestion/connected_source_3.png %}) {% endtab %} @@ -408,7 +410,7 @@ Upload the JSON key and provide a name for the service account, then input the d #### Step 4.2: Configure sync details -Next, choose a name for connected source. This name will be used in the list of available sources when you create a new CDI Segment. +Choose a name for connected source. This name will be used in the list of available sources when you create a new CDI segment. Configure a maximum runtime for this source. Braze will automatically abort any queries that exceed the maximum runtime when it's creating or refreshing a segment. The maximum runtime allowed is 60 minutes; a lower runtime will reduce costs incurred on your Snowflake account. @@ -420,7 +422,7 @@ If queries are consistently timing out and you have set a maximum runtime of 60 #### Step 4.3: Test Connection -Select **Test Connection** in Braze to verify that the list of tables visible to the user is what you expect, select **Done**. Your connected source is now created and ready to use in CDI Segments. +Select **Test Connection** in Braze to verify that the list of tables visible to the user is what you expect, select **Done**. Your connected source is now created and ready to use in CDI segments. ![]({% image_buster /assets/img/cloud_ingestion/connected_source_3.png %}) {% endtab %} @@ -434,7 +436,7 @@ Input the information for your Databricks data warehouse and source data, then p #### Step 4.2: Configure sync details -Next, choose a name for connected source. This name will be used in the list of available sources when you create a new CDI Segment. +Choose a name for connected source. This name will be used in the list of available sources when you create a new CDI Segment. Configure a maximum runtime for this source. Braze will automatically abort any queries that exceed the maximum runtime when it's creating or refreshing a segment. The maximum runtime allowed is 60 minutes; a lower runtime will reduce costs incurred on your Snowflake account. @@ -446,14 +448,14 @@ If queries are consistently timing out and you have set a maximum runtime of 60 #### Step 4.3: Test Connection -Select **Test Connection** in Braze to verify that the list of tables visible to the user is what you expect, select **Done**. Your connected source is now created and ready to use in CDI Segments. +Select **Test Connection** in Braze to verify that the list of tables visible to the user is what you expect, select **Done**. Your connected source is now created and ready to use in CDI segments. ![]({% image_buster /assets/img/cloud_ingestion/connected_source_3.png %}) {% endtab %} {% endtabs %} {% alert note %} -You must successfully test a source before it can move from Draft to Active state. If you need to close out of the creation page, your integration will be saved, and you can revisit the details page to make changes and test. +You must successfully test a source before it can move from the "Draft" to "Active" state. If you need to close out of the creation page, your integration will be saved, and you can revisit the details page to make changes and test. {% endalert %} ## Setting up additional integrations or users (optional) @@ -462,7 +464,7 @@ You must successfully test a source before it can move from Draft to Active stat {% tab Snowflake %} You may set up multiple integrations with Braze, but each integration should be configured to connect a different schema. When creating additional connections, you may reuse existing credentials if connecting to the same Snowflake account. -If you reuse the same user and role across integrations, you will not need to add the public key again. +If you reuse the same user and role across integrations, you won't need to add the public key again. {% endtab %} {% tab Redshift %} @@ -480,8 +482,8 @@ You may set up multiple sources with Braze, but each source should be configured ## Using the connected source -Once the source is created, it can be used to create one or more CDI Segments. For more information on creating a segment with this source, see the [CDI Segments documentation]({{site.baseurl}}/user_guide/engagement_tools/segments/segment_extension/cdi_segments/). +After the source is created, it can be used to create one or more CDI segments. For more information on creating a segment with this source, see the [CDI Segments documentation]({{site.baseurl}}/user_guide/engagement_tools/segments/segment_extension/cdi_segments/). {% alert note %} -If queries are consistently timing out and you have set a maximum runtime of 60 minutes, consider trying to optimize your query execution time or dedicating more compute resources (e.g., a larger warehouse) to the Braze user. +If queries are consistently timing out and you have set a maximum runtime of 60 minutes, consider trying to optimize your query execution time or dedicating more compute resources (such as a larger warehouse) to the Braze user. {% endalert %} diff --git a/assets/img/cloud_ingestion/connected_source_tab.png b/assets/img/cloud_ingestion/connected_source_tab.png new file mode 100644 index 0000000000000000000000000000000000000000..5760e8aee18dd0bcad7dfc26b8deca76568efa17 GIT binary patch literal 33639 zcmeEtby$>7*DwvzNGTmkcS_*h|3+0F2a^mF0RaI=;kC?L1O${)1O!A(3^aHPV0MHO z0RgkzT3Y&zg0wWv8y80lYddoUgxBvAlF&6ZcAf@4`bt zq$u=-1QRV9QY6l&9%2v{3!Skvi7b(R0-dd-OjT~tjJqTWs<{E%%o}ggSD_1jTdkgp z>AaS0%9~jMn}Ex9OAds0vgM$3Oje|i41-@nue^Tb<(h3b&<3LI24Zt{qznz=R|kh6 zBhc|)9G$Lk1Tq}he;Ckze0U5Xe%VG7f{s8G?Ia2aNeVxHB4c#g{aG2|jSoS)zej=B zXAyz|#g9k?ZGeIIlcGEWCmPXc8r&wdcA>=x%L@ACF9;BxQl3m!d%b^6^_0+rmB5He z3KU(br>iSWy^@EKM#CK$$Cr{t@R%g}K49oM=g`0g!=P7F5_6{yCU1A~{Kn&!^PQuD zQo`uINhlMu!YX+%$b5bHu<+~c5QwOq#wtAQuK0>s_47^m7#C*>pO2AAroG<{$tDx69sUjT?NXMH2yCAf&I3LFHR`{g^o`fV=9;*(pT6_x`UsO zzJ3DBiZL0wdukn7>L1kKXXat#sB>ifJYYw=|5MqBGUizVY&4_Hh{kkeb2#!dw3pNi zJklFFwAzzG^{utLxbvHrWJ%m`)+b^Xy|nkDAFFLc%q^3LVOW_a9cVi=#OhD7LlD-J z7!gu}(}xG-W_DILo|>4xWylDd=R(Y&U)34Sp9B4xLFDo_Dx{9^tSR=v7%v~b`AOT_ z?2w+E{EC0?%m}fgiW?zv+R~5V9RiUSqEm4=W5PR?+k(TVX!t=$*>sM`_StyKfvA;; zxE-imL8QmXk~G*dAuj{bKTD9k^%ej<`57$r23sKHARB2P@wQXa355cgeVOPLI!7>M znPD3>PJ;RwN<|0L6+$m9#&^kgkx0eT!XIhh;r^1q?#DR|M#{!#B8v)nN=xt}OiOAn z+q8(NB=ADg{Rig{g>4GA=et2v68As2&Pi^N@{FGdr=Js>Qn+K&^W^hSInI_ z^bs6GhgNK^xaP65LMpzuI#J(YQb{9zp@<5fkk!e4#w5UkK^&qeq3{NxE?dN-$zOs9 z4d0bokb~vOy~!E}@u8~7>t!4KXxnz;!)wKEB{K*vm!Osr%o7=}AHUyLKlj9bp7)-+ z@0HoBWF}=g26Bx^=B_EzR4!7k)?~?HbT$&DE;2L9s!G7BNUQxy@mz6s@Sy^9+jZpxf6Q7!JX<%SrXFzCx z{R`pX#z4XlWkU0dY0k@(ugX01RSH!vn62q|5Q;O-1J7fX8OT4StUq&M@TPB!_07Ed za;K0<=g2(vX=|wBQ^gm@#P*kux2sqMj(a0P#^%A|!2qpjnlc%E3P^tkgR z!LHq;5ajH0xs>I&#?HpM>P=C3L3u^Fre~Hz{b569m0^Qnn_=D}pc?GwNqbp9XSMHPCUW{&Zcr-LxsJF2f)*GkN&v3{vq+FtM zm~5)@ynwl&S=lkQ)8fKH!6LyzaM;8Z-8JW$<1Di=xlz?s))lg~SWTl-$@YzHm;Hv_ zIuSAPI*~oGV(a_PpnR_`aLWvOzVAeMg2rSh&H!=Y5m^H(vk_@^JWB3 z`^4SM+?F0&U-n$x+&Y}J_KmL|zj9Ak2gtVr{WBh3Jid9ve6&QgK>Qq7C-LeBr<3jS z8frL}43=)N1U{pc?T>ilwPo|pc8+ciY(r4vv3I0<|KP{+H;UU6KcsW0zl(ks2ou8; ze3BIIDZ?bwEjK0W8+{(l7PJ2$m9&;+*QQ3UhO3Dmjg*i;gPgan-*)^$Hl*sJDy+(r zl$>)^$JhIP@8_wPg-I-I8ysR(5$``lix6EVkaw4D#`d_bLRRIy?G|wtS;gbqV*qSU z#9uHCUoqC`gUEsXfP;6U4e&u2gZNs&X$4rd33pg%2&Ya+v@pmEY;%X z^6#j})CUPR^z|I-e7jCb8y6b^6%rN8W!s?QW|xD(2Vg1iR!bVPrtMieZlqCZ!8OKs zw5+>2`=xgJtn5_jY^mad{d&k^s$!dFQmvAF-&ndBmW^}ed z+Mch^eiVQk40Qp%uP%;9=riSY$=S#*_$SCd#0BR~*m;ftQ>3?p?-cSjGbB9jAWNw%>^_DP(W|<+M^Ehlr85cbIejMoAZR)AnLI zwS3OVao1zpp>4%04^}WaQkQuxX6ewlB>=pLsu>87A(-*Fo+D^XWY@LdVLC z&q`|j;jJ$Cj@Qj*#^-8tNR|`b=)F-)9MMD0xjfW1ewy*&-GjG1pN-pb%=$?8+-J|- zBixpHpCxV*(Tj8G*@%-k*{mr5<=ybrJnZG^(1(-#iiV1fCFS;7zstu5FFJcuso?~t zLODdDTqh|c1V=msiCDBi7s3>35|yz@4J4HSWMzUYHBm8FwfD#fIFTt7A7%~^C}gLY z@DRKi5aQ|8pAmM{)$wGc_!VxRD|FHsvH2`86l=$1p+C@0^4=NkJ`|$H>l}0d4%!jC z>Cl`bi#1_z12)PWq+p?T-xo2+03vM?ye|utq@n z*BDiJ`TO$`{{DvfXNmkd9048v?J4~A%0~M4Xq3`y9vk40s_g)-!G!V+ZV_1`KPTlL2e)wWnnW%dk&L#j;7`uUiMDE z=Rpwl5{6gp&D~6ByzK29T!p>F=>9Q67+(L~%t=S{k0EZhVss#tH#E|YF6J}>99$e+ zbmEvaG&G_v?<|Dh%Ell*%g8FN=N7i%XsYexr~-}9Q7I=Z`w(b4^0=zl){#M9i%`adf< zxc+Nf@C|bQ?&0L-;NtwBx#6IqzgvahSbLe<>Bv~y!)XRzL!3uIK=dEu|JL)L75@MU z`VS;Gx6q$J|IqbUP@t>1i?pLXd`&m;|M2Ty>;AFxUx1>VzqkGeQv8$7|7e91S{zf9 z^M9Boj@e9yZ4c)og|&>DCcK18**`vE@V`v(_jd_@UoIBA_7uX)5(ODaO)td#1Qk_L#*ZJE48i_yz zL?jdp{Qp#b$fH;gfMB0^SGfMz{Lg`yh(QThL4O62$X0uTQF=4Ai``zpsI!RsI*0;PV8Dzoe<$)hO)h`~#~0LLQ@3ANlX=`YB2nLkm?S zLTLXr>_33`phmR6uY2<)u%kpR0~cNTZ#1E)biw%#_`hj&&WsoY%o3)=4gcE)C5$)7 z{ypqJfZG~KNDy&%VG8WOZ7{H7kpFLZ()=hyLDBNtb$j*f&pi4)GAP0JZ+QOy#)xgf zAZYti0HBroA%oAVW4=`!!nounPX;(?U4<#Jzv4RhHcHm&@7Qc~b(-dwf9BBME*!0* zt;gW&PMX+c4Pe7b_bK1G9vA=cXO6fLY|nJ;wgxdzC2uScrZ3|lk^;vuFcZBGiTKLgv zH$d-x+*v2clCn^bR?gk4Hgd&K-GX7)+LYX)ILT(QyC=gQjKO1;MwEJf2RMK_w^X0l zUW6l&B>l8Q@M_8~Kf2vFRbi)icSzsie`Ni)^at&*|8Ne13ei8N%H3^b5@{g#h-m4* zdwtVmDB|{n0Y$5oP~WB#b;7fLiKndc_~T-04rvA0_Iqf}S`~eXw!cG6!bH7zy*JED zZh-*AKlpGH{%Pm44^^o^=H*6fv!)tlzy)K{(p*KY4UEe3&zjwFPO@Fp zvD>LWMyfHps}2nm+Eh*}t<=QT2qyt*<{A2kE!=Gr?xb*6@Pq7I?s#@0L;@H_gooIm z7b#+uQ9J%~WkNz;UVw-|b-(lVA+sodS@*3T(r3x4ln>WC0)89?rr`lXb@x|;J84<> zn%7R@3z(&3)@uDGQ%5!?Q`Zsu@g$i6i{Yd(Syv9iwCH+xfJ@U^wo643E^Ri|2UZ)e zV)Q?8R>HUm!%f+ke`Vn^DpLhU!&30k&ohF(`Mfx47lL)z0?6n>Oy7Fl43dxo;|e!aU5)weMt~E7 zb=T`PzV9j)Su1Vc*_3BC9kbqk%{k*o(~3Ddj{LLg40{E|J}Dh-y|36g*E=egS(S%H zhFoq>I2M8>+s=jn3yI||k2yAzXhZA?4@+ABZL!SRj@^X%Mb$i4)M+~8Ej28DV2&pB zO=pIuYg|DQh(+ENuZUU9sEyNsK9HQ>!Vb>x?wa9`s8Pi+)CD_WS3F225@g1)ROZ!P z&4-DG_k?RE>KPuZ56x~O{9HG0#nR%=Mm!k`UZUgK{SstrQ))ScIUju$Qx&ein!jRX zDUF>0Pp&#^c8(<8#?_K>u7~e%ww+j%Bc)cnLWe~)YE?Kc{?srgw%l8oZ)m4*#y+_w zNPO7K*Pd)~9r=_yQQBdz;x0wL#uYXZK-ydVC$!+Y@ zb`1IIOvt#tcOJ6}*5NaPNT1ctw#0$5X?mYbFD)Jmx*R55C`xap6?&D6)}5vklb-=L zE>4}#>|4ZRuWRSm0R{1+fG{BHklFh&=8-ktOn+GIcmJKc=Occ#sh2z4f4U;hIe&AZ zEkoP0d8=4G!QZu36DD(@dS|tG^aU#lI%4X2_pELEhaZF{AAY3HIIm3>3ohyKVFdWy zi9id-1gF!Pkt&N`u>>q@t8I!zq{Es^nD0!5>|QaVBf?I4csZH11f%T+_p4eFb`IN}myAcSnVb_?ym#5IQPJWH^?nlotpoc}+ zwVBMC-SZDEkkp%;r==afo(9}`RlPO4ey1!X`r_8EZNg=vz-^K8(!JOhl6kj0nh0Ub zdSJaAW|0r|Azgq;l&3aV=t8+O(?kT7mKX&?#`q z52sg?vi&4k#E|tKo9OZAwq`$Zo}2vDmU~`KO#Bu7Xsi7;VEN(gdel(Cqw@)WPuCOZI%}Ocn;k8tvEm>ADW|3`Rih_aD2- z9n=B>4#RfAF^p?R^hg7Kf_E}QYvqrWy^YalH*?Joi2yT~H)IYGj;%Vn#+i+f`^G;T z8~57TW=Ie*RZ&6NFpX%?{n0Lc`wxg>lHRGJo9nQE?L&?T4bJEz-UuLb2s7mdZv!L9 zzi!I|#}fPwm&G4E5>rg2$=^Z)h@{e$x3AWjwSjJsXQuw_VENuiZFsU3-jUlDf>EA} znNPvXQb`7zopI|ZZfEz57q6a;+7aohE23&o)~32s#NDE+*>#{um4+;wx_y79K@O5# zK7(NeWaS3vc+%g*-(Pafxm~(-T@*hl-Ar*EJ@;_HU9xejAH#C}@zg})etv3+8Y<^F z6+E`tv70l`$P(Ots$0=s-_ovG{`1BgH-;qLQ=*Z%$NOgYSCYF=Yd02NKkKcm6R{Z> zUCVOI_-y~vr52(=ReV7J{3_=13n(mW*4&0Z;`;E!VOCG#&9aZAjeU^(lL2(EmraiZ z!HD({dMMphmVwG^1}N_pJ-%_kEj4BNDOqTgUI^qzBMCtp&M2&osVJ#ieU`hsxsL3? zUI0kw<6{p3Y9>-R%{ppmf}rwuZ{l{m%f5enP7IQDpR8*nE1b71CAvzxGZ;F7VO1zz z0(hHzL7J33=Vf3f!nieG*=4TUAZTR!eA?(BL@JS3Gt06sU`=*q=(bi%E17|XF0%IDo59Zc|5 z9~TruhG2NK`|MDc`1NIAgl%QG#&VcADicJvCtRg5%ikYW&i`CE7|jCFQ`SLy7sTvE z{(RmL2E}5O=I*Xno^e$4Pa9agKc8HP0LB6KGvGo8=V^1&LzRgQP+8+Pu1tWrfKV=y z7|5qRf9X`a2PHLnMcF*23SF~)QmWdzG3xd}d8wUM+l>?wXeu;!812 zvC9R~o}F-nRO}t9PuBtvnaoM-_2((b$sOZ(ysd9nySD7tXwA1a~qW zgh3nbcz{Iz^IP($gOf2_+p^TyyI~9H+To$Hy>ac&w;%Eirgic#3^^KagU;7k%}U}H zZJ@*xkMoC<(6z47W;(Gig)VGH+ItHbg`Pj<#VW}@g)~;X zNNC57RW!>v8=CE!gsK7>Z+eM{LpCD!*vp%ral_o*GLgvXSt>_Gy)IY%7nnzfJ~gU= z_!{Eg?BCxRDbtps8!+zIyLx15b`rJD=B9FM5$roC8oM@-B?O=cxP;i%fe93Q{QX@< zRB(u0xHC?d)yj=1jP5iZMWXwhTaTI!cV#OYhR*oirU}QoH%(=>pU14={K<9LUP7WI z0QH;~B|inl=95ySkM?VX6u3_XFij&virju3YFlb1@C@M?aAo)|m&-mD-H68x2Mrr{?gR(mI0qr`2RCzlV+7*&@-7Jwlfocg#fRJT{8p=-w1JR6GGv8NSW}scP)J z7j2v^2CkiE-LGuA!I0xfjy?o%0QNg_wY6$#mv)#dn*`Mi?zIj%wPPu#4fzGf9IOMRj9&<6Pdr+!u{mN~ixzQ2Xc$ zeaY8c-4bt^AE%n-;!#nlAVeo++~<2xi4l#)+)L#C`O=K6P*`WT>-$RLo$V9N zZuNm4Q|LhR5r|b{#d{~u55PoLa9odO$L6@N=jaTg2I2>sZn5o;PC#X#T zsS2ZakhYTL<^0n>L_o41G2u=PF`zfk#8W8OW&O)av({wo-~nvzA1=*jAC&~No_XZm zulJ0C*hhyErvO7QAxiK?{>Iz{>1o{Ey}+St7}Q~|0G4F%&C3YxnH8HS`Px5*V^)Z% z4nnB>e`t!8$gawJMK5Z>%|&xwy2>bP2krz&8D`&o$T{@^o);W_UmSF{5!JZO2-M206{$?6BGwY263Mms zNVVkHidUY$J0!TE!>y(;ZyQoeR@W=k_)qHr_$yw;VIbxBLv5w31CAiUqG>)(7Nt-qQ*ksKUtB zabY9v4fTU~<9C*uKv_WL%{Kg`z1*4a+O3cG0of;!HwE~msr_8aG#u)qSZdaH=GDR! zJ5Sy>BPxTj2{ru(Zn8gCM8CwH)@DulkN0vq|UeYwTJxxHeMjo*|!!+xFTT9KFb za8hxe)R$S(UW&mNJLee@ZZRTu|K?#S>7H4TDB#;oH0Xp~>q#_lFn4u(T~wu5Jb|S| zF}LX}1z;#>0$M9!y&)S>AU18p+M1CTVU%1bn83Q!v$sdAb#euFq-{W`T$zumnIsLn zrdY(pvPt)_9MSu|(Gq6gmaQ%nt#QunWi=JUGWL?@O!6}@cy&Yj)H9%Dw~#0c@Mby_~T{=3sNDaO9x>+cW(QPiMQfL0V|sxN=Q}v zwl`6N&_*Pc_V^x)+)STaolA{KWz?Egt>Ut_3lyXo3bRP)0MT-3VY11WZjwT7WZ#f& zF_3+ou4u#vr=uYgbe3|E2v9ZGaYS1Zh4F}=k;6ABv$&;G>n8_-_4ul=rD|hPyfQA& z4f0V70*1b;`fSEG9!EgzG_D^|57Xj&_?e4&m~88)iWiqju`gF^s>z<1SJ>X=6$4iQ zm%l0i+$?;>K9V5YDg-3pk$tHYss|gN#M{_@>3;m2R8ZOT!=+q6R=q2~il0o#K89@~ z$oNfdqmW&3rj>J{P$gNCbYKw!t90NgdsSA^gAFuq8&1`YE!7N2MN!$ZM(Rm; zc!IScMC@Z>uB-;^#tOG|wGk|p z6$I<^XJr*3u(5XTF7X~tvzF4e+`cuW{YGWc>uKnpgX$W2Wz%Jeo#L742FAr7+Wnr# z(NL0%1oHPU-F$|)wUp`CW)*7W;CNW(zC}3p^|57r_H-wFjsX4WQzC_EQ6CU#4aZaL z+U{nwXPU1?5UIb>g&2gQ3nSRt>Av^m2(EPTQ45GTAqxUBZzTRPT*DhD(TA$#Y~wI0 z299k%FJCpm>kq|n`<&J36QV5^(&? z%9>cp=_o1R5dWihV}biScDgzx14wsu4ah`yNj|Aa>gCgP>BhSuCZYO#@yqI<HZ{l52LyuWGDS2VaJ#zie(T40HZ{nb&R7PS$@q=Mk0`gtmgbkwUlzcXjC z`(0aL^`2G`(AOBnrEin?=Fr2qU&J8&Vg5zKOzOa<2vW@ok`TuOaS zSZVd}Q+9Hz>2|wwec_8HJxIdYY9mPOC~{tJ-^W|m{MUIi(3rU5er@S7B_y_){6;t- z2q;R8#<=cuTCi^vi`eL5*&Z{k;0d@^zS*0M*NWX|4FXb_B~y6be@!49T4uQc`@y5B zXSF0}}qw$~V1(jXdW^>^a{{wzUy!&`V_fH+5^ zA#`ji`pTbk%cd+DN$8TInz*j&o2g&7VrZUAKv|<}*9o2(=&>|z*I)U>XLW+^uxDi6!yxwR-}zm+B@kAsl}LJh?{Pv~Cb^sJP3PcH_3 z8YyP427wyV}J3H>g_H2W^hylMa8N`C+z)y5;4qi<+A zJzf#|n$|kBXZHtd>i49))qx#07UH*Uw{FBmg5q(^d3{Iq8sqiF^9q^+ez5(alFc2Z z4Vz|O*EP40KOPeBXtNa&K8PReC9^DzrT;r2k_?#FZv}u=?Z17WfK$aM6U-rYH;;vb zvl#~urq-;@LVy*X5r3H^`2{>J_7Xo?6=}SB7v0;u?^7Irzenw^d*VZ3-sMcWwpek& zm5JeBvRXGO@GM(a#v7x;RwM#l$|P<6Xei#A|5+rE%2UrV#x$V|)H?Q;t)etxVw5(e z&PW-jqV~dd%E9;iq~-e(xwW#PflJQymVy%A^K|jH?p*5=R5aDIty_dYN*g}Sk1SLa zt^4c!8;3tf+Tj@rTsS4%mla(5|JL)s22VJSSx$S>|78alZrSiHAgiTHGyJvZ+!CG< z3=nT_Bmd)h^E)AtjSNSD(rbc(=Wjg#EO_qp>=$g|&xs2-wJDk4D0IYce*BZ4@|*eh zI`HIX)>!$G+@IwO1AkirjskinU&LP|58g8d&ptl*diV+cnK}}I66kRH3Lk$JdiS@U z01|kfcB^`?nc%NH5q<+lA&7B=mhi7VH*m=;0c060#r#ELXnq92QNR_o#!dNK&;N@> zSN%wkvRI*fWbfbPyH{Cma`Z25_j|eYCy~5Yg(GyNTFfaED4_;lC(}(-{twg%YNLfy zlYFaF9iQfy0G_WFr?YDQqsQIBhk;RAfHdk)-n~q0x1cb-O znpcBy2nZ4gzkjuLkbyoQ3nlMU>l#f|dGTvt@z<{xipcDF#U^}2QdrhX%)P5#>>63XTe(Sv?TH!yvb=Ec}Hs-gq|^%2m-l!%&S#|Endv_^;e|zuqi8KB(_Z77E5+DIrk>#aoUR@jl*W z4So?Q6O2LL;tcYWk1csJr0s(af?S!GOqip#oV-SJTA&c~Rx}^!uvB_6-@x|dBf>u( ziMyv)w@2;J6GBGl%M_m8BUP8N*EE<&M5VzJKKB{iyUSS-EibA3jtvt8RLC6Dkq4BF zM`p92s~bxt20j->0KEHrtg#n(3-dy*#j{XI5exAk1dF4A##?Z3;w@@W*D2D&)vdct zSEirMC+7NnQY$<0K9(cM-w_6|dUKwZ*p|EmSnM0!H+z_V|HN z72uH1S`M1Pfk<{Q`@QOY+hw4>NCb3=PB%Zv(mTjbN3(2IRx^TSi=R6NJeZERsmnsiDJ$1r1nh|kc4J8v>p@*GSkSi1T2b^t< zKv>@hxxTv;$s!z6Lplq1Fo*$FYTkSA%ltqdP8ZK;YMh0Z_~n1w&BfxxZep_xS2Knt z9_&V9gjc#*b7(<1IVm0n2WsB21w-|W{PGG)@6@rngA}efyW*3$=54jbsvaaujN^UN_ zWeobaTKZlHq0I|BCdJkloti6!8JyoN`DtNC zflpt&C-g#o@eMNt2uaLu*WckO2+?pNUT+ufYrT6*0GEOdq+e*1i|xl9yEVWXeJyCLO*sD`h?Hf2~r zBlkPn{BDQZCI>*d>u21#8sxx8;;l+A=bUv${9@xUu|O-0b`KnPgR_ExCh4lS>3Ca9 z)ePaXOt3?wu*dvmNRI)f<6G?{_IUj?6CtUNva|0)yYC|o@syt3$%|%2v~s_-zc-8M z`y8AQ5sXZND5DWgCfJ#V#GP-`1A&WSsJ!v@;L+3-^JJIqE5D}ml1t62S@(Kt!Uii_**DpgI^pkMa6N&C^#xb<| zU4Qy_d%5pxuGXr9T6p&onR27n2Xhi1>U7wz?IFU>H#PNU#F$&!T@H3DF|L6q4=PCI z#=uq=*#xEU!qFL`-fs_PYUO2u08=Iddlqve)Aj275Uo1K9zKd8AF%=)5mwG?kNi}= z12fB#w>?q%1yoJVN}qSq@x>79M?ZZ2-df)F=v+o7=Kp!Dml<@uyxgyY1d*)-M+5_v zr@NSo>(41gWino+Fs(})m%k~G9%M9G1C-zDl=}wk@p$!~-lvsY-!Qo%Kko@;lS|LVA!oyy^MGS77{Mn~uR}jxzLjRr8-30-ELjfTA!A7udBIJ^g4o&eaWp%}zm5(wDIgw# zSha-yAX;>)4=x@|rVY{a{o%}X0^d#oY(j~rE!{BXK}+i8vsRU7UC5&^L;)N^g~xA1 z>8Y?Qi>o(_DqiX|RUyV*XzK7XVxV4tE!yt)!jTsz4uyeviZ6W#44!~(hrNnF7A8=b z?r8pG(;+f+IuxoD`h|+3JDTAzN-Kr;@k-3+XQ|}ar&b*7kUkCtOn==rUz#zk#A@vM zjaO8u5=R5oP|wdI1E7pm*{MK*m=UYbOB$9BT6oG=Ggt;)NCp+f4DTC}eROE8Z#fh? z?zgJegq=lPj8S<*nM^649ir0P>-3o6nbEALEL z9pyW@I+_4H?yi%B-R{1^4}Jk^g3Wyfqz7Yz7i9pa^M*lp1qSwA6C=Co%ge*6N$BQ1 zI?T=s6w{X1T5pv~Lri_XkKX3}G8%vG$#iAF93ItM`Ikf(eTkARI^$lT#+ASrMWY-l zN5dsc!OF4-hEYw%4N;mGTp{a=(yy!!hl4Ij=~zT>9}*3fs{-&Fk)99sxtn2cO@f`H5Xuru5a*S9{X*?V2y5TxA9~!25 zHu5CySWv%nkZ2DqnZT)`>%QYwoszMBStPpWakK#8QLrQya$SEzdfOOa=3PPW>$r6& zHbK+$MoP`4JAIpU5n9nECOqJr{Nz}oxz60bQZR;Y3I*-wrgNec2z9IhHpr#KXz zfCECOnOe&VVfLefmTztCqIFgp#zJt0rCfc|_U$7t*G?Ernq147#a>i=JV6wsz|VN= ze)th2h)ks~&Djo%tx*^)a@(0uNaHKpbuzGBDCZvY4jHcr7;d=6snM^Q4rHFbm!0!i zdboE1SWH~XRql-$kggq8vyyaTPH+1w7zSKzj~C6(T1g)+eh_#ka72aY2DlX=Q9V-& z3{D8(0NYfOBhWe(v61chJ&M`v%WF(IcpG>9$Y%e@8P}ju4}2XRr8pm2Jn8NW;Lv|& zsO9DLg&imrH}`mh?IqX5pyC9VKNWja?J=D!zw(FA;Z@w4Xk^pPa^N2j8-|zHJy@$l zJxa1~ZsbDCrQz94Y)n$7?Abc20uENqjx-0fk52G^0+CBr40cx`88F5 z8;%gN8qO=oW1&zq`Oyy znl>L&F=kZYe`l5y$@cyhSMA%JEl_JZk=a2YWt|kMm)wX$8(_DvQq6&qzsK@L-JUh^ zM5duupEEt}EX1+D6DMs-XmbVIgh zNkznIkH@1}GAR(O4ec`4FBd1Fn1x9lu;zE=F`6!`9T8Ya4mH`{Nf>8lICqErh8~%MBCTcs5gkxV{f|F7wp72 zQdGX@nS{6G{h;9r#}iGcXj61C;#W`MR5+K3*=%j|+v4E&-YgXU#KUsi%h6t1*_5L) zR22W6-VP&1&+Ii>i^F||g{EK$y7*6#qV2$Yotk~}jGBc**z>-)o8DU39@>06=%=i~ zG9-T}|Dm>f5B5wXwn=;EX%7^qOwXENP$an;dHclnr{x(m4)D0jiv{bkz}efw10PD-E5dN#veNS+k3B5*L z`JVU^O_bC*rl~I&<~zq&d+v(v?oH?)zDKCilx+a+dKexy_F*92xEk=Ok^>&|ZuWRZdSD-g} zE-&xPF&MtmlAi5zww;TUWh1<3aby{@7eyA&5Hw19&l8Tfdz3I1bd2$)67xIr49;?! z^73^Er)hZ((y!B5w5FkPv%a|IYFGon6Lf2WpjINWmmA3QvO?29c(GJJ%(p^QRX!$z z$uuRv6I}X%RH;>$e+tH)W-`UAUHM&!GME^+1@)H%=7Yt()5Bi z_dtbY^xot54~DW&IDd7jonI9D9?b7(M#8~5MHTU#Kkqq5Z>3vo9ee~&_Q=UvyF_ZR-y=0f(lD8mN+M;x{KXSR z8gv%sJ^$?p+F-uq9URgwMH`J{HOcgT`yH0n@lB91it`A+S7(chD=Ux%{;QuvR*uc|8~g>-0yU>5aW3fFXmGeXEFSCJ7yF#WJ_MmfU}#bo@EqCM8D``BzWj+ z0ir)fX}rBqRglR5P5ZeHgHUtmKT4Kv&t8*c9psJ*oY#I@>{ATb6R@36cItZ%TwNHO}T&l0N3OS`7fll1~^h1AE)KEF)(}{ z_g5s`MbA}*To1Q0lg%nZOzQm)F}2d_9O8Xd2sg}J-%5^s36q(@^JpI`bUvhVb*bm3 z(Ovc?EPaUb!438Z5w0CB-!*FXds@0!n#KOKz)tk}lGml5Z08`l`4s)DfH*v`YNyip zvu?>374m8a{U;GVfRF4XjA)`tF$NlWO&HPa!$lA7^v260m=#(exG`a<^AP50wEp>Z zHhS~IjyH3P`#s!!Du0a%X*?q>5jrD9X&I|h@#TuxO?lKdz6SUb$GUfSkeZ2B zVc}ZN1VZg5azjIf(0IXJfWx5|ueoV0SN1F(#qq3Z``PRO*u#8xtDOOgZC{%cr0XZb zuQ_8V^4HQ2U?=(eUzz$m8mKqBLP~V=F&A?mLSOLm3Zb%!x-H!szwIEW#4ASLJ?MS0ndCJ^9hSAb2=i#sy7SI@+kOlN*5M$5PuqVih?t~OJhi?9&HAU_2;%N^x zlHBK}LrV;(RJVuT?7p=CQjSJciu)KuKH1?=&5O+v-(Zgjf?w4@Jib!eMaxg#Ajzpl z+hHQg0xQhn&*B*@+FV(o9*4)jR9l}Wv3eyx5BV{pgQDmK`jx04)4IkpCN97Wpy3Z`}!^S?M%C{HVF`>XjtCb(9xaM3QN%3*Ls181Y&5N-=e#`ePP#k&ajFK zEwnaW6N1z8i(?u=DNVY^b6#kKSRyjO%ixzsqkd8zTSXUWRIiy}?M3=UCNl@!Q)3^F8gvBtDkpY}@zt%0Zao#wQ8oA~Hig-Oz{=^Qw4`vqvh_L__k7)!p3L z{U{@&wl5*0@_Ec^A@#vdz4K<2Hxm|)ov(gP+|tsmSe<)eWMsqae$&M>PVWukS>(Zs zQ>ooR#;=lb^E_M_YWUgFoxGS^Sh+M43LP|b=Y(VKQ!&PB*#3)39dS4EI@YCBq@SpA zGlk>=zJD_Ob-ne|yNX={ZSZh<&m^mtz6A}fUtW4LB(GI8%A=lq1QzLHS_Ww}ytrz> z+PsJ`)<;%@`Sx#JEvut)l5`>5BDuK_>eXDGXFrEM*?-Rk9%Yk3N36R{ECPvbDkb+Fr2@tHdoUH{v47K0+qm`jcbl z2Wvv&%g?X7mq|s{=tD{Io;qrYq8pDJB7;Z`Q^s2F!pHoAcC41Z?+psn+*0{)bwY+R z4{@8}3XQ@lYP1A?M9!k?WDS`ji0OZ4L8pH)PIU>U;PP9U9(ut)YF8ck&{NIT8fvoo ze247WMAu;cQ*b&w<|)_dfN*IZ+^|=&N{m9fQrmu4l5IFgEMQkq*U+f-<&}L)4QW5B z!&35Vy4ZKCz4H->`cHHANtiX?

I`uR?k4e^OL8#FEw<)nOo~KUlBc!9$V?zOEt% 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 Date: Tue, 3 Sep 2024 10:25:49 -0700 Subject: [PATCH 2/7] Apply suggestions from code review Co-authored-by: Lydia Xie <87040416+lydia-xie@users.noreply.github.com> --- .../cloud_ingestion/connected_sources.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md b/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md index 62211aff320..3ea80c9c885 100644 --- a/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md +++ b/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md @@ -11,7 +11,7 @@ page_type: reference > Connected sources are a zero-copy alternative to directly syncing data with Braze’s Cloud Data Ingestion (CDI) feature. A connected source directly queries your data warehouse to create new segments without copying any of the underlying data to Braze. -After adding a connected source to your Braze workspace, you can create a CDI segment within Segment Extensions. CDI segments lets you write SQL that directly queries your own data warehouse (using data there that’s made available through your CDI Connected Source), and creates and maintains a group of users that can be targeted within Braze. +After adding a connected source to your Braze workspace, you can create a CDI segment within Segment Extensions. CDI segments let you write SQL that directly queries your data warehouse (using data there that’s made available through your CDI Connected Source), and creates and maintains a group of users that can be targeted within Braze. For more information on creating a segment with this source, view [CDI segments]({{site.baseurl}}/user_guide/engagement_tools/segments/segment_extension/cdi_segments/). @@ -77,7 +77,7 @@ There may be two to five minutes of warm-up time when Braze connects to Classic ### Step 2: Set up your data warehouse -Set up the source data and required resources in your data warehouse environment. The connected source may reference one or more tables, so ensure your Braze user has permissions for all tables you want available in the connected source. +Set up the source data and required resources in your data warehouse environment. The connected source may reference one or more tables, so ensure your Braze user has permission to access all tables you want in the connected source. {% tabs %} {% tab Snowflake %} @@ -176,7 +176,7 @@ Create a user for your connected source to use. This user will be used to genera You may choose to grant access to all tables in a schema, or grant privileges only to specific tables. Whichever tables the Braze role has access to will be available to query in the CDI segment. Be sure to grant access to any new tables to the user when they're created, or set default permissions for the user. -The `create table` permission is required so Braze can create a table with your CDI Segment query results before updating the segment in Braze. Braze will create a temporary table per segment, and the table will only persist while Braze is updating the segment. +The `create table` permission is required so Braze can create a table with your CDI segment query results before updating the segment in Braze. Braze will create a temporary table per segment, which will only persist while Braze updates the segment. #### Step 2.2: Allow access to Braze IPs @@ -185,7 +185,7 @@ If you have a firewall or other network policies, you must give Braze network ac You may also need to change your security groups to allow Braze access to your data in Redshift. Make sure to explicitly allow inbound traffic on the IPs below and on the port used to query your Redshift cluster (default is 5439). You should explicitly allow Redshift TCP connectivity on this port even if the inbound rules are set to "allow all". In addition, it is important that the endpoint for the Redshift cluster be publicly accessible in order for Braze to connect to your cluster. -If you don't want your Redshift cluster to be publicly accessible, you can set up a VPC and EC2 instance to use an ssh tunnel to access the Redshift data. For more information, see [AWS: How do I access a private Aamazon Redshift cluster from my local machine?](https://repost.aws/knowledge-center/private-redshift-cluster-local-machine) +If you don't want your Redshift cluster to be publicly accessible, you can set up a VPC and EC2 instance to use an ssh tunnel to access the Redshift data. For more information, see [AWS: How do I access a private Amazon Redshift cluster from my local machine?](https://repost.aws/knowledge-center/private-redshift-cluster-local-machine) {% subtabs %} {% subtab United States (US) %} @@ -220,11 +220,11 @@ For instances `EU-01` and `EU-02`, these are the relevant IP addresses: Create a service account in GCP for Braze to use to connect and read data from your table(s). The service account should have the below permissions: -- **BigQuery Connection User:** This allows Braze to make connections. -- **BigQuery User:** This provides Braze access to run queries, read dataset metadata, and list tables. -- **BigQuery Data Viewer:** This provides Braze access to view datasets and their contents. -- **BigQuery Job User:** This provides Braze access to run jobs. -- **bigquery.tables.create** This provides Braze access to create temporary tables during segment refresh. +- **BigQuery Connection User:** Allows Braze to make connections. +- **BigQuery User:** Provides Braze access to run queries, read dataset metadata, and list tables. +- **BigQuery Data Viewer:** Provides Braze access to view datasets and their contents. +- **BigQuery Job User:** Provides Braze access to run jobs. +- **bigquery.tables.create** Provides Braze access to create temporary tables during segment refresh. Create a service account for your connected source to use. This user will be used to generate the list of tables available in your CDI segments, and to query source tables to create new segments. After the connected source is created, Braze will discover the names and description of all tables available to the user in the source schema. @@ -267,13 +267,13 @@ For instances `EU-01` and `EU-02`, these are the relevant IP addresses: {% endtab %} {% tab Databricks %} -#### Step 2.1: Create a Access Token +#### Step 2.1: Create an access token For Braze to access Databricks, a personal access token needs to be created. -1. In your Databricks workspace, select your Databricks username in the top bar, and then select **User Settings** from the drop-down. +1. In your Databricks workspace, select your Databricks username in the top bar, then select **User Settings** from the dropdown. 2. Make sure the service account has `CREATE TABLE` priviliges on the schema used for the connected souce. -3. On the Access tokens tab, select **Generate new token**. +3. On the **Access tokens** tab, select **Generate new token**. 4. Enter a comment that helps you to identify this token, such as "Braze CDI", and change the token’s lifetime to no lifetime by leaving the Lifetime (days) box empty (blank). 5. Select **Generate**. 6. Copy the displayed token, and then select **Done**. @@ -282,7 +282,7 @@ This token will be used to generate the list of tables available in your CDI seg You may choose to grant access to all tables in a schema, or grant privileges only to specific tables. Whichever tables the Braze role has access to will be available to query in the CDI segment. -The `create table` permission is required so Braze can create a table with your CDI Segment query results before updating the segment in Braze. Braze will create a temporary table per segment, and the table will only persist while Braze is updating the segment. +The `create table` permission is required so Braze can create a table with your CDI segment query results before updating the segment in Braze. Braze will create a temporary table per segment, which will only persist while Braze updates the segment. Keep the token in a safe place until you need to enter it on the Braze dashboard during the credential creation step. @@ -335,7 +335,7 @@ Input the information for your Snowflake data warehouse and source schema, then #### Step 3.2: Configure sync details -Choose a name for the connected source. This name will be used in the list of available sources when you create a new CDI Segment. +Choose a name for the connected source. This name will be used in the list of available sources when you create a new CDI segment. Configure a maximum runtime for this source. Braze will automatically abort any queries that exceed the maximum runtime when it's creating or refreshing a segment. The maximum runtime allowed is 60 minutes; a lower runtime will reduce costs incurred on your Snowflake account. @@ -366,7 +366,7 @@ If you want to rotate the keys at any point, Braze can generate a new key pair a ALTER USER BRAZE_INGESTION_USER SET rsa_public_key='{INSERT_YOUR_KEY}'; ``` -After you add the key to the user in Snowflake, select **Test Connection** in Braze, and then select **Done**. Your connected source is now created and ready to use in CDI Segments. +After you add the key to the user in Snowflake, select **Test Connection** in Braze, and then select **Done**. Your connected source is now created and ready to use in CDI segments. {% endtab %} {% tab Redshift %} @@ -396,7 +396,7 @@ If queries are consistently timing out and you have set a maximum runtime of 60 #### Step 4.3: Test Connection -Select **Test Connection** in Braze to verify that the list of tables visible to the user is what you expect, then select **Done**. Your connected source is now created and ready to use in CDI Segments. +Select **Test Connection** in Braze to verify that the list of tables visible to the user is what you expect, then select **Done**. Your connected source is now created and ready to use in CDI segments. ![]({% image_buster /assets/img/cloud_ingestion/connected_source_3.png %}) {% endtab %} @@ -436,7 +436,7 @@ Input the information for your Databricks data warehouse and source data, then p #### Step 4.2: Configure sync details -Choose a name for connected source. This name will be used in the list of available sources when you create a new CDI Segment. +Choose a name for connected source. This name will be used in the list of available sources when you create a new CDI segment. Configure a maximum runtime for this source. Braze will automatically abort any queries that exceed the maximum runtime when it's creating or refreshing a segment. The maximum runtime allowed is 60 minutes; a lower runtime will reduce costs incurred on your Snowflake account. @@ -455,7 +455,7 @@ Select **Test Connection** in Braze to verify that the list of tables visible t {% endtabs %} {% alert note %} -You must successfully test a source before it can move from the "Draft" to "Active" state. If you need to close out of the creation page, your integration will be saved, and you can revisit the details page to make changes and test. +You must successfully test a source before it can move from the "draft" to the "active" state. If you need to close out of the creation page, your integration will be saved, and you can revisit the details page to make changes and test. {% endalert %} ## Setting up additional integrations or users (optional) From c61aaac137e2461748da71fe08817763ae5ad731 Mon Sep 17 00:00:00 2001 From: Rachel Feinberg Date: Tue, 3 Sep 2024 15:02:26 -0700 Subject: [PATCH 3/7] Add screenshots --- .../cloud_ingestion/connected_sources.md | 90 +++++++++++++++++- .../cloud_ingestion/connected_source_bg_1.png | Bin 0 -> 113840 bytes .../cloud_ingestion/connected_source_bg_2.png | Bin 0 -> 98784 bytes .../connected_source_databricks_1.png | Bin 0 -> 112217 bytes .../cloud_ingestion/connected_source_db_2.png | Bin 0 -> 98489 bytes .../cloud_ingestion/connected_source_rd_1.png | Bin 0 -> 109262 bytes .../cloud_ingestion/connected_source_rd_2.png | Bin 0 -> 97916 bytes .../cloud_ingestion/connected_source_sf_1.png | Bin 118021 -> 130323 bytes 8 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 assets/img/cloud_ingestion/connected_source_bg_1.png create mode 100644 assets/img/cloud_ingestion/connected_source_bg_2.png create mode 100644 assets/img/cloud_ingestion/connected_source_databricks_1.png create mode 100644 assets/img/cloud_ingestion/connected_source_db_2.png create mode 100644 assets/img/cloud_ingestion/connected_source_rd_1.png create mode 100644 assets/img/cloud_ingestion/connected_source_rd_2.png diff --git a/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md b/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md index 3ea80c9c885..9a157cd3f59 100644 --- a/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md +++ b/_docs/_user_guide/data_and_analytics/cloud_ingestion/connected_sources.md @@ -325,9 +325,9 @@ For instances `EU-01` and `EU-02`, these are the relevant IP addresses: {% tab Snowflake %} #### Step 3.1: Add Snowflake connection information and source table -Create a connected source in the Braze dashboard. Go to **Data Settings** > **Cloud Data Ingestion** > **Connected Sources** and select **Create data connection**. +Create a connected source in the Braze dashboard. Go to **Data Settings** > **Cloud Data Ingestion** > **Connected Sources**, and then select **Create new data sync** > **Snowflake Import**. -![]({% image_buster /assets/img/cloud_ingestion/connected_source_tab.png %}) +![]({% image_buster /assets/img/cloud_ingestion/connected_source_tab.png %}){: style="max-width:80%;"} Input the information for your Snowflake data warehouse and source schema, then proceed to the next step. @@ -347,10 +347,94 @@ If queries are consistently timing out and you have set a maximum runtime of 60 #### Step 3.3: Note the public key -In the **Test connection** page, take note of the RSA public key. You'll need it complete the integration in Snowflake. +In the **Test connection** step, take note of the RSA public key. You'll need it to complete the integration in Snowflake. ![]({% image_buster /assets/img/cloud_ingestion/connected_source_sf_3.png %}) +{% endtab %} +{% tab Redshift %} +#### Step 3.1: Add Redshift connection information and source table + +Create a connected source in the Braze dashboard. Go to **Data Settings** > **Cloud Data Ingestion** > **Connected Sources**, and then select **Create data connection** > **Amazon Redshift Import**. + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_tab.png %}){: style="max-width:80%;"} + +Input the information for your Redshift data warehouse and source schema, then proceed to the next step. + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_sf_1.png %}) + +#### Step 3.2: Configure sync details + +Choose a name for the connected source. This name will be used in the list of available sources when you create a new CDI segment. + +Configure a maximum runtime for this source. Braze will automatically abort any queries that exceed the maximum runtime when it's creating or refreshing a segment. The maximum runtime allowed is 60 minutes; a lower runtime will reduce costs incurred on your Redshift account. + +{% alert note %} +If queries are consistently timing out and you have set a maximum runtime of 60 minutes, consider trying to optimize your query execution time or dedicating a larger warehouse to the Braze user. +{% endalert %} + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_sf_2.png %}) + +#### Step 3.3: Note the public key + +In the **Test connection** step, take note of the RSA public key. You'll need it to complete the integration in Redshift. + +{% endtab %} +{% tab BigQuery %} +#### Step 3.1: Add BigQuery connection information and source table + +Create a connected source in the Braze dashboard. Go to **Data Settings** > **Cloud Data Ingestion** > **Connected Sources**, and then select **Create new data sync** > **Google BigQuery Import**. + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_tab.png %}){: style="max-width:80%;"} + +Input the information for your BigQuery project and dataset, then proceed to the next step. + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_bg_1.png %}) + +#### Step 3.2: Configure sync details + +Choose a name for the connected source. This name will be used in the list of available sources when you create a new CDI segment. + +Configure a maximum runtime for this source. Braze will automatically abort any queries that exceed the maximum runtime when it's creating or refreshing a segment. The maximum runtime allowed is 60 minutes; a lower runtime will reduce costs incurred on your BigQuery account. + +{% alert note %} +If queries are consistently timing out and you have set a maximum runtime of 60 minutes, consider trying to optimize your query execution time or dedicating a larger warehouse to the Braze user. +{% endalert %} + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_bg_2.png %}) + +#### Step 3.3: Note the public key + +In the **Test connection** step, take note of the RSA public key. You'll need it to complete the integration in BigQuery. + +{% endtab %} +{% tab Databricks %} +#### Step 3.1: Add Databricks connection information and source table + +Create a connected source in the Braze dashboard. Go to **Data Settings** > **Cloud Data Ingestion** > **Connected Sources**, and then select **Create new data sync** > **Databricks Import**. + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_tab.png %}){: style="max-width:80%;"} + +Input the information for your Databricks credentials and, optional catalog and source schema, then proceed to the next step. + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_databricks_1.png %}) + +#### Step 3.2: Configure sync details + +Choose a name for the connected source. This name will be used in the list of available sources when you create a new CDI segment. + +Configure a maximum runtime for this source. Braze will automatically abort any queries that exceed the maximum runtime when it's creating or refreshing a segment. The maximum runtime allowed is 60 minutes; a lower runtime will reduce costs incurred on your Databricks account. + +{% alert note %} +If queries are consistently timing out and you have set a maximum runtime of 60 minutes, consider trying to optimize your query execution time or dedicating a larger warehouse to the Braze user. +{% endalert %} + +![]({% image_buster /assets/img/cloud_ingestion/connected_source_db_2.png %}) + +#### Step 3.3: Note the public key + +In the **Test connection** step, take note of the RSA public key. You'll need it to complete the integration in Databricks. + {% endtab %} {% endtabs %} diff --git a/assets/img/cloud_ingestion/connected_source_bg_1.png b/assets/img/cloud_ingestion/connected_source_bg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a0fc11039f4dfea388d9bcd2ac51a81c8ecf488c GIT binary patch literal 113840 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