From 00f29f7cfb63030da53c8c0f40df4750498af0fb Mon Sep 17 00:00:00 2001 From: genwhittTTD Date: Mon, 7 Apr 2025 17:36:53 -0400 Subject: [PATCH 1/7] initial data from KMcC --- docs/guides/integration-snowflake.md | 37 ++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/docs/guides/integration-snowflake.md b/docs/guides/integration-snowflake.md index 877bdb6c7..e676d413f 100644 --- a/docs/guides/integration-snowflake.md +++ b/docs/guides/integration-snowflake.md @@ -14,9 +14,11 @@ import Link from '@docusaurus/Link'; [Snowflake](https://www.snowflake.com/) is a cloud data warehousing solution, where you as a partner can store your data and integrate with the UID2 framework. Using Snowflake, UID2 enables you to securely share consumer identifier data without exposing sensitive directly identifying information (DII). Even though you have the option to query the Operator Web Services directly for the consumer identifier data, the Snowflake UID2 integration offers a more seamless experience. :::important -This document is for those using the combined advertiser and data provider Snowflake marketplace listing published in February 2025. If you're using one of the earlier listings, which were separate for advertiser and data provider (that is, you subscribed prior to February 2025), see [Snowflake Integration Guide (Version Prior to February 2025)](integration-snowflake-previous.md). If you're using the earlier implementation, we recommend that you migrate to the newer version to take advantage of the updates and enhancements: for details, see [Changes from Previous Version](#changes-from-previous-version). For migration information, see [Migration Guide](#migration-guide). +This document is for anyone using the combined advertiser and data provider Snowflake marketplace listing published in February 2025. If you're using one of the earlier listings, which were separate for advertiser and data provider (that is, you subscribed prior to February 2025), see [Snowflake Integration Guide (Version Prior to February 2025)](integration-snowflake-previous.md). If you're using the earlier implementation, we recommend that you migrate to the newer version to take advantage of the updates and enhancements: for details, see [Changes from Previous Version](#changes-from-previous-version). For migration information, see [Migration Guide](#migration-guide). ::: +## Snowflake Marketplace Listing + The following listing for UID2 is available on the Snowflake marketplace: - [Unified ID 2.0: Advertiser and Data Provider Identity Solution](https://app.snowflake.com/marketplace/listing/GZT0ZRYXTN8/unified-id-2-0-unified-id-2-0-advertiser-and-data-provider-identity-solution) @@ -60,6 +62,38 @@ The following table shows details of the changes to the Snowflake views, from th | :-- | :-- | :-- | | `UID2_SALT_BUCKETS` | `SALT_BUCKETS` | For details, see [Monitor for Salt Bucket Rotation and Regenerate Raw UID2s](#monitor-for-salt-bucket-rotation-and-regenerate-raw-uid2s). | +## Summary of Integration Steps + +The following list summarizes the integration steps for UID2 mapping in Snowflake: + +1. Make sure that the UID2 POC paperwork is signed with your UID2 contact. + +1. Request access to the UID2 share through the [Snowflake Marketplace Listing](#snowflake-marketplace-listing). In your request, include the following information: + + - Your Snowflake account number + - The region + +1. Your UID2 contact will arrange for your Snowflake account to be provisioned with access to the UID2 mapping share. + + You can also download suggested workflow scripts to get started with basic mapping and salt bucket rotation concepts. [**GWH_TODO get scripts, figure if we can offer them as a downloadable asset.**] + +:::note +If you did any initial testing (see [Testing in the Integration Environment](#testing-in-the-integration-environment)), be sure to update the functions to reflect the production UID2 share, along with your own relevant table names. +::: + +**Click here to download suggested workflow scripts to get started with basic mapping and salt bucket rotation concepts.** + +## Testing in the Integration Environment + +If you'd like to test the mapping shares before signing a UID2 POC, you can ask your UID2 contact for access to the Snowflake share in the integ (integration) environment. This environment is for testing only, and has no production data. Be sure to include your account number and region in the request. + +In this scenario, the following steps occur: + +1. Your UID2 contact provisions the share listing in the Snowflake Private Marketplace. [**GWH_KM__01 is there some other step, such as, the contact lets the advertiser know? Otherwise how will they know?**] +2. You can then request access to the Private Marketplace listing. + +3. Your UID2 contact provisions the integ shares to your account. [**GWH_KM__02 Is it share rather than shares now that we have a combined listing? Or, is it still shares? Not sure.**] + ## Workflow Diagram The following diagram and table illustrate the different parts of the UID2 integration process in Snowflake, and the workflow. @@ -77,7 +111,6 @@ Access to the UID2 Share is available through the following listing on the [Snow - [Unified ID 2.0: Advertiser and Data Provider Identity Solution](https://app.snowflake.com/marketplace/listing/GZT0ZRYXTN8/unified-id-2-0-unified-id-2-0-advertiser-and-data-provider-identity-solution) - :::important To be able to request data, you must use the `ACCOUNTADMIN` role or another role with the `CREATE DATABASE` and `IMPORT SHARE` privileges in your Snowflake account. ::: From c0d750133b6c6dad640264de17c63a9e6be9d2c2 Mon Sep 17 00:00:00 2001 From: genwhittTTD Date: Tue, 8 Apr 2025 13:51:36 -0400 Subject: [PATCH 2/7] minor edits --- docs/guides/integration-snowflake.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/guides/integration-snowflake.md b/docs/guides/integration-snowflake.md index e676d413f..71010d7c8 100644 --- a/docs/guides/integration-snowflake.md +++ b/docs/guides/integration-snowflake.md @@ -75,7 +75,7 @@ The following list summarizes the integration steps for UID2 mapping in Snowflak 1. Your UID2 contact will arrange for your Snowflake account to be provisioned with access to the UID2 mapping share. - You can also download suggested workflow scripts to get started with basic mapping and salt bucket rotation concepts. [**GWH_TODO get scripts, figure if we can offer them as a downloadable asset.**] + You can also download suggested workflow scripts to get started with basic mapping and salt bucket rotation concepts. [**GWH_KM__01 Do you know where I can get these scripts from? Not sure yet if we can offer them as a downloadable asset, but, first step is to get them.**] :::note If you did any initial testing (see [Testing in the Integration Environment](#testing-in-the-integration-environment)), be sure to update the functions to reflect the production UID2 share, along with your own relevant table names. @@ -89,10 +89,10 @@ If you'd like to test the mapping shares before signing a UID2 POC, you can ask In this scenario, the following steps occur: -1. Your UID2 contact provisions the share listing in the Snowflake Private Marketplace. [**GWH_KM__01 is there some other step, such as, the contact lets the advertiser know? Otherwise how will they know?**] +1. Your UID2 contact provisions the share listing in the Snowflake Private Marketplace. [**GWH_KM__02 is there some other step, such as, the contact lets the advertiser know? Otherwise how will they know?**] 2. You can then request access to the Private Marketplace listing. -3. Your UID2 contact provisions the integ shares to your account. [**GWH_KM__02 Is it share rather than shares now that we have a combined listing? Or, is it still shares? Not sure.**] +3. Your UID2 contact provisions the integ shares to your account. [**GWH_KM__03 Is it share rather than shares now that we have a combined listing? Or, is it still shares? Not sure.**] ## Workflow Diagram From 711acbd71d8ed1f5919a7d83f57bf913567cf416 Mon Sep 17 00:00:00 2001 From: genwhittTTD Date: Tue, 19 Aug 2025 09:31:33 -0400 Subject: [PATCH 3/7] updates --- docs/guides/images/UID2_INTEG_UID_SH.md | 112 +++++++++++++++++++++++ docs/guides/images/UID2_INTEG_UID_SH.zip | Bin 0 -> 2025 bytes docs/guides/integration-snowflake.md | 10 +- 3 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 docs/guides/images/UID2_INTEG_UID_SH.md create mode 100644 docs/guides/images/UID2_INTEG_UID_SH.zip diff --git a/docs/guides/images/UID2_INTEG_UID_SH.md b/docs/guides/images/UID2_INTEG_UID_SH.md new file mode 100644 index 000000000..7ae44e922 --- /dev/null +++ b/docs/guides/images/UID2_INTEG_UID_SH.md @@ -0,0 +1,112 @@ +## Disclaimer 1 +THE FUNCTIONS BELOW ARE PROVIDED BY THE TRADE DESK, INC. ("TTD") "AS IS" AND "WITH ALL FAULTS." TTD SHALL HAVE NO OBLIGATION TO UPDATE THE SNOWFLAKE FUNCTIONS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS, TTD, OR TTD'S AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION SUSTAINED BY YOU OR ANY THIRD PARTY) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THESE FUNCTIONS, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +## Disclaimer 2 +- Instructions and functions provided are *examples only*, and not a complete implementation. +- Remember to consider the privacy aspects of what is being implemented, including checking Legal/Compliance requirements about user consent and use of DII. + + + +## Begin Workflow +--When testing this workflow for the first time, use Drop Table queries. Otherwise, ignore. + +```sql + + +--When testing this workflow for the first time, use Drop Table queries. Otherwise, ignore. + +Drop Table UID_Test_Audience_March2025 + + + + + +--Create a new table to store Email addresses +Create Table UID_Test_Audience_March2025 ( ID INTEGER, EMAIL varchar(128)) + +-- Retrieve emails (or hashed emails) from your CDP or CRM platform +INSERT INTO UID_Test_Audience_March2025 +VALUES +(1,'dummy1@demo.com'), +(2,'dummy2@demo.com'), +(3,'dummy3@demo.com'), +(4,'dummy4@demo.com'), +(5,'dummy5@demo.com'), +(6,'dummy6@demo.com'), +(7,'dummy7@demo.com'), +(8,'dummy8@demo.com'), +(9,'dummy9@demo.com'), +(10,'dummy10@demo.com') + +--Query Table to confirm the emails are in your table +select * from UID_Test_Audience_March2025 + +-- new share name: UID2_INTEG_UID_SH + + +--Ignore for demo purposes. +Drop Table UID_Test_Audience_March2025_withUID + + + + +--Create new empty table with emails, and 2 more columns to collect UID and Bucket ID. This step is in here to illustrate the progression of adding in UIDs and BucketIds +Create Table UID_Test_Audience_March2025_withUID ( ID INTEGER, EMAIL varchar(128), UID2 text, Bucket_ID text) + + +--Retrieve UID and bucket ID and insert into a new table, leveraging the functions from the integration guide to map your emails to UID2s +Insert into UID_Test_Audience_March2025_withUID +select a.ID, a.EMAIL, m.UID, m.BUCKET_ID from UID_Test_Audience_March2025 a LEFT JOIN( + select ID, t.* from UID_Test_Audience_March2025, lateral UID2_INTEG_UID_SH.UID.FN_T_IDENTITY_MAP(EMAIL, 'email') t) m + on a.ID=m.ID; + + + + +--Confirm the values that now exist in your new table -- now you have mapped emails and can use your UID2s! +select * from UID_Test_Audience_March2025_withUID + + + +--ignore for demo +Drop Table UID_Test_Audience_March2025_withUID_withRetrieved + + +--testing-- + +Create Table UID_Test_Audience_March2025_withUID_withRetrieved ( ID INTEGER, EMAIL varchar(128), UID2 text, Bucket_ID text, Last_Retrieved_date TIMESTAMP_NTZ) + + +--Create a new table with Last updated timestamp: this inserts the Current Timestamp - This has 5 columns +Insert into UID_Test_Audience_March2025_withUID_withRetrieved +select a.ID, a.EMAIL, m.UID, m.BUCKET_ID, CURRENT_TIMESTAMP from UID_Test_Audience_March2025 a LEFT JOIN( + select ID, t.* from UID_Test_Audience_March2025, lateral UID2_INTEG_UID_SH.UID.FN_T_IDENTITY_MAP(EMAIL, 'email') t) m + on a.ID=m.ID; + + +--Confirm the values in your new table +select * from UID_Test_Audience_March2025_withUID_withRetrieved + + +--Check last salt bucket rotataion for your UID2 +select a.*, b.LAST_SALT_UPDATE_UTC + from UID_Test_Audience_March2025_withUID a LEFT OUTER JOIN UID2_INTEG_UID_SH.UID.SALT_BUCKETS b + on a.BUCKET_ID=b.BUCKET_ID + + + + +--This last query compares last retrieved date to last salt bucket Id rotation to show you the UID2 that need to be regenerated +--A good way to remember this is: Whenever UID2 retrieved date is OLDER than last bucket Id rotation, then UID2 needs to be regenerated +select a.*, b.LAST_SALT_UPDATE_UTC + from UID_Test_Audience_March2025_withUID_withRetrieved a LEFT OUTER JOIN UID2_INTEG_UID_SH.UID.SALT_BUCKETS b + on a.BUCKET_ID=b.BUCKET_ID + where a.Last_Retrieved_date < b.LAST_SALT_UPDATE_UTC or a.UID2 IS NULL; + + + + +---to see results of the query when the uid2 does not need to be generated, change where clause to: where a.Last_Retrieved_date < b.LAST_SALT_UPDATE_UTC or a.UID2 IS NOT NULL; -- this just shows you full results to populate the columns +--where you should see that last_retrieved is NEWER than last_salt_update + + \ No newline at end of file diff --git a/docs/guides/images/UID2_INTEG_UID_SH.zip b/docs/guides/images/UID2_INTEG_UID_SH.zip new file mode 100644 index 0000000000000000000000000000000000000000..c91bfb2dd22f8e9309abe8d2d76916562343ecbe GIT binary patch literal 2025 zcmVym&!&TrQF*PE|pt9XWDn7)~rHyh%U<$Mt4p`VLKf z??Tv)O@m8f9qF64L$(uqFi1?SKAjv%X&-gz$P7pXM`TWHI+_VNBGYwgXoju~`bPvM z3Pvm%nHLUCJn{yvI5*iJNsq#*ZAwSG2qxZa=$aq)0_wx;B{{!OeJ2RW^GS@Su0T{X z)A!AZ6i%SSaYI{7&J7xb5-udUVk{)oq-SW;kGGLGq_N{$BfOde;R<=FQy2<4VP8Wy zGihr2QdpsD`ZNvwsTVkgM#mO`<(gvb*nPO?tegvHBHK*aqZ!JP=Oa1*U~uI4Jr2km z4&e(KGu8;x9Jo&73wheYcPz;X-9K3<0wQz`3Z{-F_`&(zK{}>?sqI>T$@wjW5*Eoe z$L2YVpF9By%4>zbGv=UyL=X-FDP)LBoO_ z+nEWUp@xMEiKyDgV2_xFE;xxHnf8U?z*}{2BoHm1G_cmFElR)Bd2!HuXPq92tgMQ9 zQN?*yQj{&}y3X3SO_ATkOSPn^Q1nuLiPBA?O3Jh3?xmr1v%I2+7CA3eiemmvRaQl8 zpbzUlUehbMs&c4hCCuS@tzbL8i57Phl^eCFVDy@9*HJ}rNmnY)R`<5l(x5n7B=wTT zi?v#O;s;l)qU4_zyN;u5p{P)w>$uQckjPbDS5%kq#%>|g@j}3!Y$1S!Mq{8>aYnPe z_;j7*x1C;ZwpJNcs;t;awMIO*?IK<0P3+fkQC3s|LPJ}$i+n>ex=Iv%u2m7MvQHiq zi`%$_O1#SQLc!t3j~~m=3H<)0UiS1tVb3L;%uRr&0MdLM6^r%RtFt#9{nzVRg^EzQ zh%$9cmEMI?l@)A}lSXku(Q;X+vQ%ZK)qT=7osh6~Bc3}xcse$POEZ@b+N z;Sb)yj|!RGC{paJq!T2+j>koLd_W zpz+n^@02P*N7Bm%_&=l&3dpo6*K8$=QuU7Y&*r-HbKV+^G|Pl0r=~UsNSnIY0@hpc7iD&16fEpu6^O{|$uXOyzvMV{0t2AYN-(dogK))>@_PpSf6`y{yy z%Svr{2muqcmPRd3k{UCT9X69IUvWcV!tpFYd+2eMvB`4JrdU3|W47r%**S&=7?a~m zWwd_g*un4IRE*88rM4+vZBx{5F{WXGIh!G~y{3=%mr6VNXjah&aTuBla9UC-p7yqQ1a=CF<+s4NChVzo-2{Xnk-bXZsW}k(cWX zCH>nIlM_8^TGMQ(>OakFfPu0VQSzA198G^XnR6g~5s&Vvrlb)y~#@ zsRO}n8rQ|~bUu;)>3-{U)H8;+Q@!DBOMOI_6)s2bnv=Zguu_-Rs*8dzA9AZhy=Knf zkfS%-!Subo@(|ePc8)=~a{Hj|e3$E!jQBe@(^p&QQO|ro`yb%jFxTRnCvrjM%P6U~ zW3|X}+l_c6a+~a$?!G3tDqrDHoD{GV)wAS9_V_4Mr4vO#x;9g;Oa2ohfi?Wq!gTx0XA4ygI z?$3zYlTGA&7;2XMw`N9ycBSUsb)6);3=r5R-_*(W`nDapy Date: Thu, 21 Aug 2025 14:47:36 -0400 Subject: [PATCH 4/7] Revert "updates" (removing the script) This reverts commit 711acbd71d8ed1f5919a7d83f57bf913567cf416. --- docs/guides/images/UID2_INTEG_UID_SH.md | 112 ----------------------- docs/guides/images/UID2_INTEG_UID_SH.zip | Bin 2025 -> 0 bytes docs/guides/integration-snowflake.md | 10 +- 3 files changed, 5 insertions(+), 117 deletions(-) delete mode 100644 docs/guides/images/UID2_INTEG_UID_SH.md delete mode 100644 docs/guides/images/UID2_INTEG_UID_SH.zip diff --git a/docs/guides/images/UID2_INTEG_UID_SH.md b/docs/guides/images/UID2_INTEG_UID_SH.md deleted file mode 100644 index 7ae44e922..000000000 --- a/docs/guides/images/UID2_INTEG_UID_SH.md +++ /dev/null @@ -1,112 +0,0 @@ -## Disclaimer 1 -THE FUNCTIONS BELOW ARE PROVIDED BY THE TRADE DESK, INC. ("TTD") "AS IS" AND "WITH ALL FAULTS." TTD SHALL HAVE NO OBLIGATION TO UPDATE THE SNOWFLAKE FUNCTIONS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS, TTD, OR TTD'S AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION SUSTAINED BY YOU OR ANY THIRD PARTY) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THESE FUNCTIONS, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -## Disclaimer 2 -- Instructions and functions provided are *examples only*, and not a complete implementation. -- Remember to consider the privacy aspects of what is being implemented, including checking Legal/Compliance requirements about user consent and use of DII. - - - -## Begin Workflow ---When testing this workflow for the first time, use Drop Table queries. Otherwise, ignore. - -```sql - - ---When testing this workflow for the first time, use Drop Table queries. Otherwise, ignore. - -Drop Table UID_Test_Audience_March2025 - - - - - ---Create a new table to store Email addresses -Create Table UID_Test_Audience_March2025 ( ID INTEGER, EMAIL varchar(128)) - --- Retrieve emails (or hashed emails) from your CDP or CRM platform -INSERT INTO UID_Test_Audience_March2025 -VALUES -(1,'dummy1@demo.com'), -(2,'dummy2@demo.com'), -(3,'dummy3@demo.com'), -(4,'dummy4@demo.com'), -(5,'dummy5@demo.com'), -(6,'dummy6@demo.com'), -(7,'dummy7@demo.com'), -(8,'dummy8@demo.com'), -(9,'dummy9@demo.com'), -(10,'dummy10@demo.com') - ---Query Table to confirm the emails are in your table -select * from UID_Test_Audience_March2025 - --- new share name: UID2_INTEG_UID_SH - - ---Ignore for demo purposes. -Drop Table UID_Test_Audience_March2025_withUID - - - - ---Create new empty table with emails, and 2 more columns to collect UID and Bucket ID. This step is in here to illustrate the progression of adding in UIDs and BucketIds -Create Table UID_Test_Audience_March2025_withUID ( ID INTEGER, EMAIL varchar(128), UID2 text, Bucket_ID text) - - ---Retrieve UID and bucket ID and insert into a new table, leveraging the functions from the integration guide to map your emails to UID2s -Insert into UID_Test_Audience_March2025_withUID -select a.ID, a.EMAIL, m.UID, m.BUCKET_ID from UID_Test_Audience_March2025 a LEFT JOIN( - select ID, t.* from UID_Test_Audience_March2025, lateral UID2_INTEG_UID_SH.UID.FN_T_IDENTITY_MAP(EMAIL, 'email') t) m - on a.ID=m.ID; - - - - ---Confirm the values that now exist in your new table -- now you have mapped emails and can use your UID2s! -select * from UID_Test_Audience_March2025_withUID - - - ---ignore for demo -Drop Table UID_Test_Audience_March2025_withUID_withRetrieved - - ---testing-- - -Create Table UID_Test_Audience_March2025_withUID_withRetrieved ( ID INTEGER, EMAIL varchar(128), UID2 text, Bucket_ID text, Last_Retrieved_date TIMESTAMP_NTZ) - - ---Create a new table with Last updated timestamp: this inserts the Current Timestamp - This has 5 columns -Insert into UID_Test_Audience_March2025_withUID_withRetrieved -select a.ID, a.EMAIL, m.UID, m.BUCKET_ID, CURRENT_TIMESTAMP from UID_Test_Audience_March2025 a LEFT JOIN( - select ID, t.* from UID_Test_Audience_March2025, lateral UID2_INTEG_UID_SH.UID.FN_T_IDENTITY_MAP(EMAIL, 'email') t) m - on a.ID=m.ID; - - ---Confirm the values in your new table -select * from UID_Test_Audience_March2025_withUID_withRetrieved - - ---Check last salt bucket rotataion for your UID2 -select a.*, b.LAST_SALT_UPDATE_UTC - from UID_Test_Audience_March2025_withUID a LEFT OUTER JOIN UID2_INTEG_UID_SH.UID.SALT_BUCKETS b - on a.BUCKET_ID=b.BUCKET_ID - - - - ---This last query compares last retrieved date to last salt bucket Id rotation to show you the UID2 that need to be regenerated ---A good way to remember this is: Whenever UID2 retrieved date is OLDER than last bucket Id rotation, then UID2 needs to be regenerated -select a.*, b.LAST_SALT_UPDATE_UTC - from UID_Test_Audience_March2025_withUID_withRetrieved a LEFT OUTER JOIN UID2_INTEG_UID_SH.UID.SALT_BUCKETS b - on a.BUCKET_ID=b.BUCKET_ID - where a.Last_Retrieved_date < b.LAST_SALT_UPDATE_UTC or a.UID2 IS NULL; - - - - ----to see results of the query when the uid2 does not need to be generated, change where clause to: where a.Last_Retrieved_date < b.LAST_SALT_UPDATE_UTC or a.UID2 IS NOT NULL; -- this just shows you full results to populate the columns ---where you should see that last_retrieved is NEWER than last_salt_update - - \ No newline at end of file diff --git a/docs/guides/images/UID2_INTEG_UID_SH.zip b/docs/guides/images/UID2_INTEG_UID_SH.zip deleted file mode 100644 index c91bfb2dd22f8e9309abe8d2d76916562343ecbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2025 zcmVym&!&TrQF*PE|pt9XWDn7)~rHyh%U<$Mt4p`VLKf z??Tv)O@m8f9qF64L$(uqFi1?SKAjv%X&-gz$P7pXM`TWHI+_VNBGYwgXoju~`bPvM z3Pvm%nHLUCJn{yvI5*iJNsq#*ZAwSG2qxZa=$aq)0_wx;B{{!OeJ2RW^GS@Su0T{X z)A!AZ6i%SSaYI{7&J7xb5-udUVk{)oq-SW;kGGLGq_N{$BfOde;R<=FQy2<4VP8Wy zGihr2QdpsD`ZNvwsTVkgM#mO`<(gvb*nPO?tegvHBHK*aqZ!JP=Oa1*U~uI4Jr2km z4&e(KGu8;x9Jo&73wheYcPz;X-9K3<0wQz`3Z{-F_`&(zK{}>?sqI>T$@wjW5*Eoe z$L2YVpF9By%4>zbGv=UyL=X-FDP)LBoO_ z+nEWUp@xMEiKyDgV2_xFE;xxHnf8U?z*}{2BoHm1G_cmFElR)Bd2!HuXPq92tgMQ9 zQN?*yQj{&}y3X3SO_ATkOSPn^Q1nuLiPBA?O3Jh3?xmr1v%I2+7CA3eiemmvRaQl8 zpbzUlUehbMs&c4hCCuS@tzbL8i57Phl^eCFVDy@9*HJ}rNmnY)R`<5l(x5n7B=wTT zi?v#O;s;l)qU4_zyN;u5p{P)w>$uQckjPbDS5%kq#%>|g@j}3!Y$1S!Mq{8>aYnPe z_;j7*x1C;ZwpJNcs;t;awMIO*?IK<0P3+fkQC3s|LPJ}$i+n>ex=Iv%u2m7MvQHiq zi`%$_O1#SQLc!t3j~~m=3H<)0UiS1tVb3L;%uRr&0MdLM6^r%RtFt#9{nzVRg^EzQ zh%$9cmEMI?l@)A}lSXku(Q;X+vQ%ZK)qT=7osh6~Bc3}xcse$POEZ@b+N z;Sb)yj|!RGC{paJq!T2+j>koLd_W zpz+n^@02P*N7Bm%_&=l&3dpo6*K8$=QuU7Y&*r-HbKV+^G|Pl0r=~UsNSnIY0@hpc7iD&16fEpu6^O{|$uXOyzvMV{0t2AYN-(dogK))>@_PpSf6`y{yy z%Svr{2muqcmPRd3k{UCT9X69IUvWcV!tpFYd+2eMvB`4JrdU3|W47r%**S&=7?a~m zWwd_g*un4IRE*88rM4+vZBx{5F{WXGIh!G~y{3=%mr6VNXjah&aTuBla9UC-p7yqQ1a=CF<+s4NChVzo-2{Xnk-bXZsW}k(cWX zCH>nIlM_8^TGMQ(>OakFfPu0VQSzA198G^XnR6g~5s&Vvrlb)y~#@ zsRO}n8rQ|~bUu;)>3-{U)H8;+Q@!DBOMOI_6)s2bnv=Zguu_-Rs*8dzA9AZhy=Knf zkfS%-!Subo@(|ePc8)=~a{Hj|e3$E!jQBe@(^p&QQO|ro`yb%jFxTRnCvrjM%P6U~ zW3|X}+l_c6a+~a$?!G3tDqrDHoD{GV)wAS9_V_4Mr4vO#x;9g;Oa2ohfi?Wq!gTx0XA4ygI z?$3zYlTGA&7;2XMw`N9ycBSUsb)6);3=r5R-_*(W`nDapy Date: Thu, 21 Aug 2025 16:36:35 -0400 Subject: [PATCH 5/7] edits from rev of mtg with KM --- docs/guides/integration-snowflake.md | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/docs/guides/integration-snowflake.md b/docs/guides/integration-snowflake.md index ebb589e61..6309e3e44 100644 --- a/docs/guides/integration-snowflake.md +++ b/docs/guides/integration-snowflake.md @@ -65,18 +65,21 @@ This update provides two major benefits: ## Summary of Integration Steps -The following list summarizes the integration steps for UID2 mapping in Snowflake: +The following list summarizes the integration steps for UID2 mapping in Snowflake in the production environment: + +:::note +If you want to try out an integration before using the production environment, see [Testing in the Integration Environment](#testing-in-the-integration-environment). +::: 1. Make sure that the UID2 POC paperwork is signed with your UID2 contact. -1. Request access to the UID2 share through the [Snowflake Marketplace Listing](#snowflake-marketplace-listing). In your request, include the following information: +1. Request access to the UID2 share: - - Your Snowflake account number - - The region + - Request access through the [Snowflake Marketplace Listing](#snowflake-marketplace-listing). In your request, include your Snowflake account number and the region -1. Your UID2 contact will arrange for your Snowflake account to be provisioned with access to the UID2 mapping share. + - In addition, let your UID2 contact know that you've requested access. - You can also download suggested workflow scripts to get started with basic mapping and salt bucket rotation concepts. [**GWH_KM__01 Do you know where I can get these scripts from? Not sure yet if we can offer them as a downloadable asset, but, first step is to get them.**] +1. Your UID2 contact arranges for your Snowflake account to be provisioned with access to the UID2 mapping share. :::note If you did any initial testing (see [Testing in the Integration Environment](#testing-in-the-integration-environment)), be sure to update the functions to reflect the production UID2 share, along with your own relevant table names. @@ -84,14 +87,15 @@ If you did any initial testing (see [Testing in the Integration Environment](#te ## Testing in the Integration Environment -If you'd like to test the mapping shares before signing a UID2 POC, you can ask your UID2 contact for access to the Snowflake share in the integ (integration) environment. This environment is for testing only, and has no production data. Be sure to include your account number and region in the request. +If you'd like to test the mapping share before signing a UID2 POC, you can ask your UID2 contact for access to the Snowflake share in the integ (integration) environment. This environment is for testing only, and has no production data. In the request, be sure to include your account number and region (see [Summary of Integration Steps](#summary-of-integration-steps) Step 2). In this scenario, the following steps occur: -1. Your UID2 contact provisions the share listing in the Snowflake Private Marketplace. [**GWH_KM__02 is there some other step, such as, the contact lets the advertiser know? Otherwise how will they know?**] -2. You can then request access to the Private Marketplace listing. +1. Your UID2 contact provisions the share listing in the Snowflake Private Marketplace, and lets you know when this step is complete. + +2. You can then view the Private Marketplace listing and request access to the integ share. -3. Your UID2 contact provisions the integ shares to your account. [**GWH_KM__03 Is it share rather than shares now that we have a combined listing? Or, is it still shares? Not sure.**] +3. When you've requested access, your UID2 contact provisions the integ share to your account. ## Workflow Diagram From ae8147f179cd98e8730be64c94d0710d9ac94881 Mon Sep 17 00:00:00 2001 From: genwhittTTD Date: Thu, 21 Aug 2025 17:07:10 -0400 Subject: [PATCH 6/7] combine two getting started procedures into one --- docs/guides/integration-snowflake.md | 59 ++++++++++------------------ 1 file changed, 21 insertions(+), 38 deletions(-) diff --git a/docs/guides/integration-snowflake.md b/docs/guides/integration-snowflake.md index 6309e3e44..7c67cfef9 100644 --- a/docs/guides/integration-snowflake.md +++ b/docs/guides/integration-snowflake.md @@ -63,31 +63,46 @@ This update provides two major benefits: - **Simplified Refresh Management**: You can monitor for UID2s reaching `REFRESH_FROM` timestamps instead of polling salt buckets for rotation. - **Previous UID2 Access**: You have access to previous raw UID2s for 90 days after rotation for campaign measurement. +## Workflow Diagram + +The following diagram and table illustrate the different parts of the UID2 integration process in Snowflake, and the workflow. + +![Snowflake Integration Architecture](images/uid2-snowflake-integration-architecture-drawio.png) + +|Partner Snowflake Account|UID2 Snowflake Account|UID2 Core Opt-Out Cloud Setup| +| :--- | :--- | :--- | +|As a partner, you set up a Snowflake account to host your data and engage in UID2 integration by consuming functions and views through the UID2 Share. | UID2 integration, hosted in a Snowflake account, grants you access to authorized functions and views that draw data from private tables. You can't access the private tables. The UID2 Share reveals only essential data needed for you to perform UID2-related tasks.
**NOTE**: We store salts and encryption keys in the private tables. No DII is stored at any point. |ETL (Extract Transform Load) jobs constantly update the UID2 Core/Optout Snowflake storage with internal data that powers the UID2 Operator Web Services. The data used by the Operator Web Services is also available through the UID2 Share. | +|When you use shared functions and views, you pay Snowflake for transactional computation costs. |These private tables, secured in the UID2 Snowflake account, automatically synchronize with the UID2 Core/Optout Snowflake storage that holds internal data used to complete UID2-related tasks. | | + ## Summary of Integration Steps +:::important +To be able to request data, you must use the `ACCOUNTADMIN` role or another role with the `CREATE DATABASE` and `IMPORT SHARE` privileges in your Snowflake account. +::: + The following list summarizes the integration steps for UID2 mapping in Snowflake in the production environment: :::note -If you want to try out an integration before using the production environment, see [Testing in the Integration Environment](#testing-in-the-integration-environment). +If you want to try out an integration before using the production environment, see [Testing in the Integ Environment](#testing-in-the-integ-environment). ::: 1. Make sure that the UID2 POC paperwork is signed with your UID2 contact. 1. Request access to the UID2 share: - - Request access through the [Snowflake Marketplace Listing](#snowflake-marketplace-listing). In your request, include your Snowflake account number and the region + - Request access through the [Snowflake Marketplace Listing](#snowflake-marketplace-listing). In your request, include your Snowflake account number and the region. - - In addition, let your UID2 contact know that you've requested access. + - Let your UID2 contact know that you've requested access. 1. Your UID2 contact arranges for your Snowflake account to be provisioned with access to the UID2 mapping share. :::note -If you did any initial testing (see [Testing in the Integration Environment](#testing-in-the-integration-environment)), be sure to update the functions to reflect the production UID2 share, along with your own relevant table names. +If you did any initial testing (see [Testing in the Integ Environment](#testing-in-the-integ-environment)), be sure to update the functions to reflect the production UID2 share, along with your own relevant table names. ::: -## Testing in the Integration Environment +## Testing in the Integ Environment -If you'd like to test the mapping share before signing a UID2 POC, you can ask your UID2 contact for access to the Snowflake share in the integ (integration) environment. This environment is for testing only, and has no production data. In the request, be sure to include your account number and region (see [Summary of Integration Steps](#summary-of-integration-steps) Step 2). +If you'd like to test the mapping share before signing a UID2 POC, you can ask your UID2 contact for access to the Snowflake share in the integ (integration) environment. This environment is for testing only, and has no production data. In the request, be sure to include your account number and region. In this scenario, the following steps occur: @@ -97,38 +112,6 @@ In this scenario, the following steps occur: 3. When you've requested access, your UID2 contact provisions the integ share to your account. -## Workflow Diagram - -The following diagram and table illustrate the different parts of the UID2 integration process in Snowflake, and the workflow. - -![Snowflake Integration Architecture](images/uid2-snowflake-integration-architecture-drawio.png) - -|Partner Snowflake Account|UID2 Snowflake Account|UID2 Core Opt-Out Cloud Setup| -| :--- | :--- | :--- | -|As a partner, you set up a Snowflake account to host your data and engage in UID2 integration by consuming functions and views through the UID2 Share. | UID2 integration, hosted in a Snowflake account, grants you access to authorized functions and views that draw data from private tables. You can't access the private tables. The UID2 Share reveals only essential data needed for you to perform UID2-related tasks.
**NOTE**: We store salts and encryption keys in the private tables. No DII is stored at any point. |ETL (Extract Transform Load) jobs constantly update the UID2 Core/Optout Snowflake storage with internal data that powers the UID2 Operator Web Services. The data used by the Operator Web Services is also available through the UID2 Share. | -|When you use shared functions and views, you pay Snowflake for transactional computation costs. |These private tables, secured in the UID2 Snowflake account, automatically synchronize with the UID2 Core/Optout Snowflake storage that holds internal data used to complete UID2-related tasks. | | - -## Access the UID2 Share - -Access to the UID2 Share is available through the following listing on the [Snowflake Data Marketplace](https://www.snowflake.com/data-marketplace/): - -- [Unified ID 2.0: Advertiser and Data Provider Identity Solution](https://app.snowflake.com/marketplace/listing/GZT0ZRYXTN8/unified-id-2-0-unified-id-2-0-advertiser-and-data-provider-identity-solution) - -:::important -To be able to request data, you must use the `ACCOUNTADMIN` role or another role with the `CREATE DATABASE` and `IMPORT SHARE` privileges in your Snowflake account. -::: - -To request access to the UID2 Share, complete the following steps: - -1. Log in to the Snowflake Data Marketplace and select the UID2 listing: - - [Unified ID 2.0: Advertiser and Data Provider Identity Solution](https://app.snowflake.com/marketplace/listing/GZT0ZRYXTN8/unified-id-2-0-unified-id-2-0-advertiser-and-data-provider-identity-solution) -2. In the **Personalized Data** section, click **Request Data**. -3. Follow the onscreen instructions to verify and provide your contact details and other required information. -4. If you are an existing client of The Trade Desk, include your partner and advertiser IDs issued by The Trade Desk in the **Message** field of the data request form. -5. Submit the form. - -After your request is received, a UID2 administrator will contact you with the appropriate access instructions. For details about managing data requests in Snowflake, see the [Snowflake documentation](https://docs.snowflake.com/en/user-guide/data-marketplace-consumer.html). - ## Shared Objects You can map DII to UID2s by using the following function: From e6a3c215084f19e2351741d276f9d1877974550b Mon Sep 17 00:00:00 2001 From: genwhittTTD Date: Fri, 22 Aug 2025 15:21:05 -0400 Subject: [PATCH 7/7] edit from HK, insignificant mod on another doc --- docs/guides/integration-snowflake.md | 2 +- docs/guides/operator-private-gcp-confidential-space.md | 1 + .../current/guides/operator-private-gcp-confidential-space.md | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/guides/integration-snowflake.md b/docs/guides/integration-snowflake.md index 7c67cfef9..e0a308f5c 100644 --- a/docs/guides/integration-snowflake.md +++ b/docs/guides/integration-snowflake.md @@ -86,7 +86,7 @@ The following list summarizes the integration steps for UID2 mapping in Snowflak If you want to try out an integration before using the production environment, see [Testing in the Integ Environment](#testing-in-the-integ-environment). ::: -1. Make sure that the UID2 POC paperwork is signed with your UID2 contact. +1. Make sure that the UID2 POC paperwork is signed with your UID2 contact. If you're not sure who to ask, see [Contact Info](../getting-started/gs-account-setup.md#contact-info). 1. Request access to the UID2 share: diff --git a/docs/guides/operator-private-gcp-confidential-space.md b/docs/guides/operator-private-gcp-confidential-space.md index 42b8ab78a..bd5bb78fe 100644 --- a/docs/guides/operator-private-gcp-confidential-space.md +++ b/docs/guides/operator-private-gcp-confidential-space.md @@ -87,6 +87,7 @@ Before choosing your deployment option, complete these Google Cloud setup steps: 1. Enable egress rule. If your VPC infrastructure only allows egress to known endpoints, you will need to enable an egress rule to allow the operator to retrieve the certificates required for attestation. To enable this, follow the details in this document from Google: [VPC Service Controls](https://cloud.google.com/vpc-service-controls/docs/supported-products#table_confidential_space). ### UID2 Operator Account Setup + Ask your UID2 contact to register your organization as a UID2 Operator. If you're not sure who to ask, see [Contact Info](../getting-started/gs-account-setup.md#contact-info). :::tip diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/guides/operator-private-gcp-confidential-space.md b/i18n/ja/docusaurus-plugin-content-docs/current/guides/operator-private-gcp-confidential-space.md index 4763b8dae..a5f3d21b4 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/guides/operator-private-gcp-confidential-space.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/guides/operator-private-gcp-confidential-space.md @@ -87,6 +87,7 @@ UID2 Operator Service は、任意の GCP アカウントとプロジェクト 1. エグレスルールを有効にします。VPC インフラストラクチャが既知のエンドポイントへのイグレスのみを許可する場合、オペレーターが認証に必要な証明書を取得できるようにエグレスルールを有効にする必要があります。これを有効にするには、Google のこのドキュメントに従ってください: [VPC Service Controls](https://cloud.google.com/vpc-service-controls/docs/supported-products#table_confidential_space)。 ### UID2 Operator Account Setup + UID2 の連絡先に、あなたの組織を UID2 Operator として登録するよう依頼してください。誰に依頼すればよいかわからない場合は、[Contact Info](../getting-started/gs-account-setup.md#contact-info) を参照してください。 :::tip