Skip to content
Merged
102 changes: 102 additions & 0 deletions src/unified-profiles/create-sql-traits.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
title: RETL Scripts For Importing Salesforce Objects Into Unified Profiles
hidden: true
---
Unified Profiles users can convert Salesforce objects with US phone number patterns (typically (555) 231-7654) into Segment Unify profiles with E.164 phone number formats (+15552317654) to support Unified Profiles lookup.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Unified Profiles users can convert Salesforce objects with US phone number patterns (typically (555) 231-7654) into Segment Unify profiles with E.164 phone number formats (+15552317654) to support Unified Profiles lookup.
You can use the following queries to convert Salesforce objects with US phone number patterns (typically (555) 231-7654) into Segment Unify profiles with E.164 phone number formats (+15552317654). When you update the number patterns, you support Unified Profiles lookup.


Segment created three sample queries for Unified Profiles users to import common Salesforce objects:
- [Accounts](#accounts)
- [Contacts](#contacts)
- [Leads](#leads)

To selectively import columns, replace the `a*`, `c*`, or `l*` with a list of fields to selectively import. For example, if you wanted to only import the ID, NAME, and ADDRESS fields for your Accounts, you'd replace `a*` with `a.ID, a.NAME, a.ADDRESS`.

> success ""
> Segment creates a default database table (`segment_flex_unify`) during the [Segment for Flex](/docs/unified-profiles/segment-for-flex/){:target="_blank”} setup process.

## Accounts

To import Salesforce Accounts into Unified Profiles as Segment Unify profiles, create a RETL mapping with the following format.

Replace `<database_name.account_table>` with your database name and account table, `PHONE` with the name of the column in your warehouse that contains phone numbers, and `BILLING_COUNTRY` with the name of the column in your warehouse that contains the account's country.

``` sql
SELECT
a.*,
CASE
WHEN a.PHONE REGEXP '^(\\([0-9]{3}\\) [0-9]{3}-[0-9]{4})$' AND a.BILLING_COUNTRY = 'US'
THEN CONCAT('+1', REGEXP_REPLACE(a.PHONE, '[^0-9]',''))
WHEN a.BILLING_COUNTRY != 'US'
THEN REGEXP_REPLACE(a.PHONE, '[^0-9]','')
ELSE a.PHONE
END as phone,
FROM
<database_name.account_table> a
WHERE
a.PHONE IS NOT NULL
AND a.BILLING_COUNTRY IS NOT NULL;
```

Salesforce objects have several phone number-related fields. In this example query, the “PHONE” column is the primary contact phone number and what you import as the Profile’s 'phone' trait. The other phone fields for Salesforce Accounts are PersonHomePhone, PersonMobilePhone, & PersonOtherPhone, and could be substituted for "PHONE" in this query.

After running this query, ‘phone’ can be used as an identifier used for lookups in Unified Profiles.


## Contacts

To import Salesforce Contacts into Unified Profiles as Segment Unify profiles, create a RETL mapping with the following format.

Replace `<database_name.contact_table>` with your database name and account table, `PHONE` with the name of the column in your warehouse that contains phone numbers, and `BILLING_COUNTRY` with the name of the column in your warehouse that contains the contact's country.

``` sql
SELECT
c.*,
CASE
WHEN c.PHONE REGEXP '^(\\([0-9]{3}\\) [0-9]{3}-[0-9]{4})$' AND c.BILLING_COUNTRY = 'US'
THEN CONCAT('+1', REGEXP_REPLACE(c.PHONE, '[^0-9]',''))
WHEN c.BILLING_COUNTRY != 'US'
THEN REGEXP_REPLACE(c.PHONE, '[^0-9]','')
ELSE c.PHONE
END as phone,
FROM
<database_name.contact_table> c
WHERE
c.PHONE IS NOT NULL
AND c.BILLING_COUNTRY IS NOT NULL;
```

Salesforce objects have several phone number-related fields. In this example query, the “PHONE” column is the primary contact phone number and what you import as the Profile’s 'phone' trait. The other phone fields for Salesforce Contacts are HomePhone, MobilePhone, & OtherPhone, and could be substituted for "PHONE" in this query.

After running this query, ‘phone’ can be used as an identifier used for lookups in Unified Profiles.

## Leads

To import Salesforce Leads into Unified Profiles as Segment Unify profiles, create a RETL mapping with the following format.

Replace `<database_name.lead_table>` with your database name and lead table, `PHONE` with the name of the column in your warehouse that contains phone numbers, and `BILLING_COUNTRY` with the name of the column in your warehouse that contains the lead's country.

``` sql
SELECT
l.*,
CASE
WHEN l.PHONE REGEXP '^(\\([0-9]{3}\\) [0-9]{3}-[0-9]{4})$' AND l.BILLING_COUNTRY = 'US'
THEN CONCAT('+1', REGEXP_REPLACE(l.PHONE, '[^0-9]',''))
WHEN l.BILLING_COUNTRY != 'US'
THEN REGEXP_REPLACE(l.PHONE, '[^0-9]','')
ELSE l.PHONE
END as phone,
FROM
<database_name.lead_table> l
WHERE
l.PHONE IS NOT NULL
AND l.BILLING_COUNTRY IS NOT NULL;
```

Salesforce objects have several phone number-related fields. In this example query, the “PHONE” column is the primary contact phone number and what you import as the Profile’s 'phone' trait. The other phone fields for Salesforce Leads are HomePhone, MobilePhone, & OtherPhone, and could be substituted for "PHONE" in this query.

After running this query, ‘phone’ can be used as an identifier used for lookups in Unified Profiles.

## Troubleshooting
If these queries don't return phone numbers in E.164 format, examine your existing data and change the REGEX patterns as appropriate.

Because the format in which an international phone number is saved in Salesforce largely depends on how users input them into the system, Salesforce administrators can add form validation methods, like input field validation rules with REGEX functions, to guide users to input phone numbers in specific formats. These form validation methods may impact the format of the phone numbers in your database, and might require you to change the REGEX patterns in the provided queries.
16 changes: 3 additions & 13 deletions src/unified-profiles/segment-for-flex.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,7 @@ You can add additional data sources after completing the setup process. <br>
5. Give your destination a name and enter the account credentials for a user that has read and write permissions. Click **Save**.
6. After you've given your destination a name and entered your credentials, click **Next**.
7. On the Getting started with Segment page, click **Define Model**.
8. Create a SQL query that defines your model. After you've created a model, Segment uses your model to map data to your Reverse ETL destinations. <br> Segment recommends a model with the following format:

``` sql
SELECT * FROM salesforce_flex_unify.accounts
```

8. [Create a SQL query that defines your model](/docs/unified-profiles/create-sql-traits){:target="_blank"}. After you've created a model, Segment uses your model to map data to your Reverse ETL destinations.
<ol style="counter-reset: none;">
<li value="9" markdown=1>
Click **Preview** to return 10 records from your warehouse. When you've verified that your records return as expected, click **Next**.
Expand All @@ -64,12 +59,7 @@ SELECT * FROM salesforce_flex_unify.accounts
3. Give your destination a name and enter the account credentials for a user that has read and write permissions. Click **Save**.
4. After you've given your destination a name and entered your credentials, click **Next**.
5. On the *Getting started with Segment* page, click **Define Model**.
6. Create a SQL query that defines your model. After you've created a model, Segment uses your model to map data to your Reverse ETL destinations. <br> Segment recommends a model with the following format:

``` sql
SELECT * FROM flex_unify.accounts
```

6. [Create a SQL query that defines your model](/docs/unified-profiles/create-sql-traits){:target="_blank"} After you've created a model, Segment uses your model to map data to your Reverse ETL destinations.
<ol style="counter-reset: none;">
<li value="7" markdown=1>
Click **Preview** to return 10 records from your warehouse. When you've verified that your records return as expected, click **Next**.
Expand Down Expand Up @@ -186,6 +176,6 @@ Your Segment for Flex workspace has the following entitlements:
href="/docs/unified-profiles/connect-a-workspace"
icon="api.svg"
title="Connect an Existing Workspace to Flex"
description="Flex customers without an existing Segment workspace that includes a Unify space can obtain a Segment for Flex workspace and configure a Unify space. A Segment for Flex workspace provides limited access to Segment."
description="Flex customers with an existing Segment workspace that has a Unify space can connect their Unify space to Flex."
%}
</div>