メインコンテンツまでスキップ

Snowflake Integration Guide

Snowflakeは、パートナーとしてデータを保存し、UID2 フレームワークとインテグレーションできるクラウドデータウェアハウジングソリューションです。Snowflake を使用することで、UID2 では機密性の高い直接識別情報(DII)を公開せずに、消費者識別子データを安全に共有できます。消費者識別子データについて Operator Web Serbvice に直接クエリを実行するオプションもありますが、Snowflake の UID2 インテグレーションはより円滑な体験を提供します。

important

このドキュメントは、2025年2月に公開された広告主とデータプロバイダーをインテグレーションした Snowflake マーケットプレイスリスティングを使用する方を対象としています。以前のリスティング(広告主とデータプロバイダー向けに分かれていたもの、つまり2025年2月以前に登録された方)を使用している場合は、Snowflake Integration Guide (Version Prior to February 2025)を参照してください。以前の実装を使用している場合は、更新と機能強化を活用するために新しいバージョンへの移行を勧めます。詳細については、Changes from Previous Versionを参照してください。移行情報については、Migration Guideを参照してください。

UID2の以下のリスティングはSnowflakeマーケットプレイスで利用可能です:

ヒント

広告主とデータプロバイダー向けのインテグレーションオプションとステップの概要については、Advertiser/Data Provider Integration Overviewを参照してください。

Functionality

以下の表は、UID2 Snowflake インテグレーションで利用可能な機能をまとめたものです。

Encrypt Raw UID2 to UID2 Token for SharingDecrypt UID2 Token to Raw UID2Generate UID2 Token from DIIRefresh UID2 TokenMap DII to Raw UID2s
—*

*DII から 直接 UID2 Token を生成するために Snowflake を使用することはできません。ただし、DII を Raw UID2 に変換し、その Raw UID2 を UID2 Token に暗号化することは可能です。

注記

ビッドストリームで UID2 Token を共有するパブリッシャーの場合は、Tokenized Sharing in the Bidstreamを参照してください。

Changes from Previous Version

2025年2月の UID2 Snowflake マーケットプレイスインテグレーションの更新には、いくつかの更新と機能強化が含まれています。主な変更点の一つは、以前の 2 つのデータ共有(広告主向けとデータプロバイダー向け)の機能を組み合わせた単一のリスティングとデータ共有が含まれることです。これにより、すべての参加者のインテグレーションが簡素化されます。

注記

これらの変更は、2025年2月以前に公開されたSnowflake関数のバージョンを使用しているコードインテグレーションを想定しています(nowflake Integration Guide (Version Prior to February 2025)を参照)。FN_T_UID2_IDENTITY_MAP_EMAILFN_T_UID2_IDENTITY_MAP_EMAIL_HASH 関数を使用するさらに古いバージョンを使用している場合は、Migration Guide section in the earlier guideの指示に従い、その後再度現在のバージョンにアップグレードすることもできます。ただし、このシナリオでは、このガイドの指示に従い、一度に更新することを勧めます。詳細については、Migration Guideを参照してください。

以下の表は、以前のバージョンからのSnowflake関数の変更詳細を示しています。

Old functionNew functionFields in old functionFields in new functionComments
FN_T_UID2_IDENTITY_MAPFN_T_IDENTITY_MAPUID2UID詳細はMap DIIを参照してください。
FN_T_UID2_ENCRYPTFN_T_ENCRYPTUID2_TOKENUID_TOKEN詳細はEncrypt Tokensを参照してください。
FN_T_UID2_DECRYPTFN_T_DECRYPTUID2_TOKENUID_TOKEN詳細はDecrypt Tokensを参照してください。

以下の表は、以前のバージョンからのSnowflakeビューの変更詳細を示しています。

Old viewNew viewComments
UID2_SALT_BUCKETSSALT_BUCKETS詳細はMonitor for Salt Bucket Rotation and Regenerate Raw UID2sを参照してください。

Workflow Diagram

以下の図と表は、Snowflake における UID2 インテグレーションプロセスの各部分とワークフローを示しています。

Snowflake Integration Architecture

Partner Snowflake AccountUID2 Snowflake AccountUID2 Core Opt-Out Cloud Setup
パートナーとして、Snowflake アカウントを設定してデータをホストし、UID2 Share を通じて関数とビューを利用することで UID2 のインテグレーションを行います。UID2 インテグレーションは、Snowflake アカウントでホストされており、プライベートテーブルからデータを取得する認証済み関数とビューへのアクセス権を付与します。プライベートテーブルには直接アクセスできません。UID2 Share は、UID2 関連タスクを実行するために必要な重要なデータのみを公開します。
Note:プライベートテーブルにはソルトと暗号化キーを保存しています。いかなる時点でもDIIは保存されません。
ETL(Extract Transform Load)ジョブが常に UID2 Core/Optout の Snowflake ストレージを、UID2 Operator Web Service を動かす内部データで更新しています。Operator Web Service で使用されるデータは UID2 Share を通じても利用可能です。
共有関数とビューを使用する場合、トランザクション計算コストは Snowflake に支払います。UID2 Snowflake アカウントで保護されているこれらのプライベートテーブルは、UID2 関連タスクを完了するために使用される内部データを保持する UID2 Core/Optout の Snowflake ストレージと自動的に同期します。

Access the UID2 Share

UID2 Share へのアクセスは、Snowflake Data Marketplaceの以下のリスティングから利用できます:

important

データをリクエストするには、Snowflakeアカウントで ACCOUNTADMIN ロールまたは CREATE DATABASE および IMPORT SHARE 権限を持つ別のロールを使用する必要があります。

UID2 Share へのアクセスをリクエストするには、以下の手順を完了してください:

  1. Snowflake Data Marketplace にログインし、UID2 listing を選択します:
  2. Personalized Dataセクションで、Request Dataをクリックします。
  3. 画面の指示に従って、連絡先の詳細やその他の必要な情報を確認して提供します。
  4. The Trade Desk の既存クライアントである場合は、データリクエストフォームのMessage 欄にThe Trade Desk から発行されたパートナー ID と広告主 ID を記入します。
  5. フォームを送信します。

リクエストが受信された後、UID2 Administrator が適切なアクセス手順について連絡します。Snowflake でのデータリクエストの管理の詳細については、Snowflake documentationを参照してください。

Shared Objects

次の関数を使用して、DII を UID2 にマッピングできます:

  • FN_T_IDENTITY_MAP(詳細はMap DIIを参照)

以下の関数は FN_T_IDENTITY_MAP に代わって非推奨となっています。以前の Snowflake バージョンを使用している場合は引き続き使用できますが(Snowflake Integration Guide (Version Prior to February 2025)を参照)、できるだけ早くアップグレードすることを勧めます:

  • FN_T_UID2_IDENTITY_MAP(非推奨)
注記

非推奨の関数を使用していて、新しい関数への移行に助けが必要な場合は、Migration Guideを参照してください。

再生成が必要なUID2を識別するには、UID2 Share の SALT_BUCKETS ビューを使用します。詳細は、Monitor for Salt Bucket Rotation and Regenerate Raw UID2sを参照してください。

UID2共有参加者向けに、以下の関数も利用可能です:

詳細については、Usage for UID2 Sharersを参照してください。

Database and Schema Names

以下のセクションには各ソリューションのクエリ例が含まれており、データベースとスキーマ名の変数を除いて同一です:

{DATABASE_NAME}.{SCHEMA_NAME}

例:

select UID, BUCKET_ID, UNMAPPED from table({DATABASE_NAME}.{SCHEMA_NAME}.FN_T_IDENTITY_MAP('validate@example.com', 'email'));

すべてのクエリ例では、各名前変数に以下のデフォルト値が使用されています:

VariableDefault ValueComments
{DATABASE_NAME}UID2_PROD_UID_SH必要に応じて、選択した UID2 Share へのアクセス権が付与された後に新しいデータベースを作成する際にデフォルトのデータベース名を変更できます。
{SCHEMA_NAME}UIDこれは不変の名前です。

Map DII

すべてのタイプのDIIをマッピングするには、FN_T_IDENTITY_MAP 関数を使用します。

DII がメールアドレスの場合、サービスは UID2 のEmail Address Normalizationルールを使用してデータを正規化します。

DII が電話番号の場合、UID2 のPhone Number Normalizationルールを使用してサービスに送信する前に正規化する必要があります。

ArgumentData TypeDescription
INPUTvarchar(256)UID2 とソルトバケット ID にマッピングする DII。
INPUT_TYPEvarchar(256)マッピングする DII のタイプ。許可される値:emailemail_hashphonephone_hash

成功したクエリは、指定されたDIIに対して以下の情報を返します。

Column NameData TypeDescription
UIDTEXT値は以下のいずれかです:
  • DII が正常にマッピングされた場合: DII に関連付けられた UID2。
  • DII が正常にマッピングされなかった場合:NULL
BUCKET_IDTEXT値は以下のいずれかです:
  • DII が正常にマッピングされた場合:UID2 を生成するために使用されたソルトバケットの ID。この ID は SALT_BUCKETS ビューのバケット ID にマッピングされます。
  • DII が正常にマッピングされなかった場合:NULL
UNMAPPEDTEXT値は以下のいずれかです:
  • DII が正常にマッピングされた場合:NULL
  • DII が正常にマッピングされなかった場合:識別子がマッピングされなかった理由:OPTOUTINVALID IDENTIFIER、またはINVALID INPUT TYPE
    詳細については、Values for the UNMAPPED Columnを参照してください。

Values for the UNMAPPED Column

以下の表は、UNMAPPED カラムの可能な値を示しています。

ValueMeaning
NULLDIIが正常にマッピングされました。
OPTOUTユーザーがオプトアウトしています。
INVALID IDENTIFIERメールアドレスまたは電話番号が無効です。
INVALID INPUT TYPEINPUT_TYPE の値が無効です。INPUT_TYPEの有効な値は:emailemail_hashphonephone_hash です。

Examples

このセクションのマッピングリクエスト例:

注記

これらの例の入力および出力データは架空のものであり、説明のためだけのものです。提供されている値は実際の値ではありません。

Mapping Request Example - Single Unhashed Email

以下のクエリは、Default database and schema namesを使用して、単一のメールアドレスをマッピングする方法を示しています。

select UID, BUCKET_ID, UNMAPPED from table(UID2_PROD_UID_SH.UID.FN_T_IDENTITY_MAP('validate@example.com', 'email'));

単一のメールに対するクエリ結果:

+----------------------------------------------+------------+----------+
| UID | BUCKET_ID | UNMAPPED |
+----------------------------------------------+------------+----------+
| 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | NULL |
+----------------------------------------------+------------+----------+

Mapping Request Example - Multiple Unhashed Emails

以下のクエリは、Default database and schema namesを使用して、複数のメールアドレスをマッピングする方法を示しています。

select a.ID, a.EMAIL, m.UID, m.BUCKET_ID, m.UNMAPPED from AUDIENCE a LEFT JOIN(
select ID, t.* from AUDIENCE, lateral UID2_PROD_UID_SH.UID.FN_T_IDENTITY_MAP(EMAIL, 'email') t) m
on a.ID=m.ID;

複数のメールに対するクエリ結果:

以下の表は、NULL または不適切にフォーマットされたメールの NULL 値を含む、応答の各項目を識別しています。

+----+----------------------+----------------------------------------------+------------+--------------------+
| ID | EMAIL | UID | BUCKET_ID | UNMAPPED |
+----+----------------------+----------------------------------------------+------------+--------------------+
| 1 | validate@example.com | 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | NULL |
| 2 | test@uidapi.com | IbW4n6LIvtDj/8fCESlU0QG9K/fH63UdcTkJpAG8fIQ= | a30od4mNRd | NULL |
| 3 | invalid-email | NULL | NULL | INVALID IDENTIFIER |
| 4 | NULL | NULL | NULL | INVALID IDENTIFIER |
+----+----------------------+----------------------------------------------+------------+--------------------+

Mapping Request Example - Single Unhashed Phone Number

以下のクエリは、Default database and schema namesを使用して、電話番号をマッピングする方法を示しています。

UID2のPhone Number Normalizationルールを使用して電話番号を正規化する必要があります。

select UID, BUCKET_ID, UNMAPPED from table(UID2_PROD_UID_SH.UID.FN_T_IDENTITY_MAP('+12345678901', 'phone'));

単一の電話番号に対するクエリ結果:

+----------------------------------------------+------------+----------+
| UID | BUCKET_ID | UNMAPPED |
+----------------------------------------------+------------+----------+
| 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | NULL |
+----------------------------------------------+------------+----------+

Mapping Request Example - Multiple Unhashed Phone Numbers

以下のクエリは、Default database and schema namesを使用して、複数の電話番号をマッピングする方法を示しています。

UID2のPhone Number Normalizationルールを使用して電話番号を正規化する必要があります。

select a.ID, a.PHONE, m.UID, m.BUCKET_ID, m.UNMAPPED from AUDIENCE a LEFT JOIN(
select ID, t.* from AUDIENCE, lateral UID2_PROD_UID_SH.UID.FN_T_IDENTITY_MAP(PHONE, 'phone') t) m
on a.ID=m.ID;

複数の電話番号に対するクエリ結果:

以下の表は、NULL または無効な電話番号の NULL 値を含む、応答の各項目を識別しています。

+----+--------------+----------------------------------------------+------------+--------------------+
| ID | PHONE | UID | BUCKET_ID | UNMAPPED |
+----+--------------+----------------------------------------------+------------+--------------------+
| 1 | +12345678901 | 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | NULL |
| 2 | +61491570006 | IbW4n6LIvtDj/8fCESlU0QG9K/fH63UdcTkJpAG8fIQ= | a30od4mNRd | NULL |
| 3 | 1234 | NULL | NULL | INVALID IDENTIFIER |
| 4 | NULL | NULL | NULL | INVALID IDENTIFIER |
+----+--------------+----------------------------------------------+------------+--------------------+

Mapping Request Example - Single Hashed Email

以下のクエリは、Default database and schema namesを使用して、単一のメールアドレスハッシュをマッピングする方法を示しています。

select UID, BUCKET_ID, UNMAPPED from table(UID2_PROD_UID_SH.UID.FN_T_IDENTITY_MAP(BASE64_ENCODE(SHA2_BINARY('validate@example.com', 256)), 'email_hash'));

単一のハッシュ化メールに対するクエリ結果:

+----------------------------------------------+------------+----------+
| UID | BUCKET_ID | UNMAPPED |
+----------------------------------------------+------------+----------+
| 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | NULL |
+----------------------------------------------+------------+----------+

Mapping Request Example - Multiple Hashed Emails

以下のクエリは、Default database and schema namesを使用して、複数のメールアドレスハッシュをマッピングする方法を示しています。

select a.ID, a.EMAIL_HASH, m.UID, m.BUCKET_ID, m.UNMAPPED from AUDIENCE a LEFT JOIN(
select ID, t.* from AUDIENCE, lateral UID2_PROD_UID_SH.UID.FN_T_IDENTITY_MAP(EMAIL_HASH, 'email_hash') t) m
on a.ID=m.ID;

複数のハッシュ化メールに対するクエリ結果:

以下の表は、NULL ハッシュの NULL 値を含む、応答の各項目を識別しています。

+----+----------------------------------------------+----------------------------------------------+------------+--------------------+
| ID | EMAIL_HASH | UID | BUCKET_ID | UNMAPPED |
+----+----------------------------------------------+----------------------------------------------+------------+--------------------+
| 1 | LdhtUlMQ58ZZy5YUqGPRQw5xUMS5dXG5ocJHYJHbAKI= | 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | NULL |
| 2 | NULL | NULL | NULL | INVALID IDENTIFIER |
| 3 | /XJSTajB68SCUyuc3ePyxSLNhxrMKvJcjndq8TuwW5g= | IbW4n6LIvtDj/8fCESlU0QG9K/fH63UdcTkJpAG8fIQ= | a30od4mNRd | NULL |
+----+----------------------------------------------+----------------------------------------------+------------+--------------------+

Mapping Request Example - Single Hashed Phone Number

以下のクエリは、Default database and schema namesを使用して、単一の電話番号ハッシュをマッピングする方法を示しています。

select UID, BUCKET_ID, UNMAPPED from table(UID2_PROD_UID_SH.UID.FN_T_IDENTITY_MAP(BASE64_ENCODE(SHA2_BINARY('+12345678901', 256)), 'phone_hash'));

単一のハッシュ化電話番号に対するクエリ結果:

+----------------------------------------------+------------+----------+
| UID | BUCKET_ID | UNMAPPED |
+----------------------------------------------+------------+----------+
| 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | NULL |
+----------------------------------------------+------------+----------+

Mapping Request Example - Multiple Hashed Phone Numbers

以下のクエリは、Default database and schema namesを使用して、複数の電話番号ハッシュをマッピングする方法を示しています。

select a.ID, a.PHONE_HASH, m.UID, m.BUCKET_ID, m.UNMAPPED from AUDIENCE a LEFT JOIN(
select ID, t.* from AUDIENCE, lateral UID2_PROD_UID_SH.UID.FN_T_IDENTITY_MAP(PHONE_HASH, 'phone_hash') t) m
on a.ID=m.ID;

複数のハッシュ化電話番号に対するクエリ結果:

以下の表は、NULL ハッシュの NULL 値を含む、応答の各項目を識別しています。

+----+----------------------------------------------+----------------------------------------------+------------+--------------------+
| ID | PHONE_HASH | UID | BUCKET_ID | UNMAPPED |
+----+----------------------------------------------+----------------------------------------------+------------+--------------------+
| 1 | LdhtUlMQ58ZZy5YUqGPRQw5xUMS5dXG5ocJHYJHbAKI= | 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | NULL |
| 2 | NULL | NULL | NULL | INVALID IDENTIFIER |
| 3 | /XJSTajB68SCUyuc3ePyxSLNhxrMKvJcjndq8TuwW5g= | IbW4n6LIvtDj/8fCESlU0QG9K/fH63UdcTkJpAG8fIQ= | a30od4mNRd | NULL |
+----+----------------------------------------------+----------------------------------------------+------------+--------------------+

Monitor for Salt Bucket Rotation and Regenerate Raw UID2s

SALT_BUCKETS ビュークエリは、Raw UID2 のソルトバケットが最後に更新された日時を返します。ソルト値は UID2 を生成する際に使用されます。バケット内のソルトが更新されると、以前に生成された UID2 は古くなり、同じユーザーに対して他の当事者が生成した UID2 と一致しなくなります。

どの UID2 が再生成を必要とするかを判断するには、それらが生成された時のタイムスタンプをソルトバケット更新の最新のタイムスタンプと比較します。

Column NameData TypeDescription
BUCKET_IDTEXTソルトバケットの ID。この ID は ID マップ関数によって返される BUCKET_ID と並行しています。BUCKET_ID をキーとして使用して、関数呼び出し結果とこのビュー呼び出しの結果の間で結合クエリを行います。
LAST_SALT_UPDATE_UTCTIMESTAMP_NTZバケット内のソルトが最後に更新された時間。この値はUTCで表現されます。

以下の例は、ソルトバケットが更新されたため再生成が必要なテーブル内のUID2を見つけるために使用される入力テーブルとクエリを示しています。

Targeted Input Table

この例のシナリオでは、広告主/データプロバイダーは AUDIENCE_WITH_UID2 という名前のテーブルに UID2 を保存しています。最後のカラム LAST_UID2_UPDATE_UTC は、UID2 が生成された時間を記録するために使用されます。UID2 が生成されていない場合、値は3番目の例に示すように NULL です。広告主/データプロバイダーはこのタイムスタンプ値を使用して、どの UID2 を再生成する必要があるかを判断できます。

select * from AUDIENCE_WITH_UID2;
+----+----------------------+----------------------------------------------+------------+-------------------------+
| ID | EMAIL | UID2 | BUCKET_ID | LAST_UID2_UPDATE_UTC |
+----+----------------------+----------------------------------------------+------------+-------------------------+
| 1 | validate@example.com | 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | 2025-02-01 00:00:00.000 |
| 2 | test1@uidapi.com | Q4A5ZBuBCYfuV3Wd8Fdsx2+i33v7jyFcQbcMG/LH4eM= | ad1ANEmVZ | 2025-02-03 00:00:00.000 |
| 3 | test2@uidapi.com | NULL | NULL | NULL |
+----+----------------------+----------------------------------------------+------------+-------------------------+

欠落または古くなったUID2を見つけるには、Default database and schema namesを使用した以下のクエリ例を使用します。

select a.*, b.LAST_SALT_UPDATE_UTC
from AUDIENCE_WITH_UID2 a LEFT OUTER JOIN UID2_PROD_UID_SH.UID.SALT_BUCKETS b
on a.BUCKET_ID=b.BUCKET_ID
where a.LAST_UID2_UPDATE_UTC < b.LAST_SALT_UPDATE_UTC or a.UID2 IS NULL;

クエリ結果:

以下の表は、応答の各項目を識別しています。結果には、テーブルのID 1の例に示すように、メール、UID2BUCKET_IDLAST_UID2_UPDATE_UTCLAST_SALT_UPDATE_UTC が含まれます。ID 2 については、対応する UID2 が最後のバケット更新後に生成されたため、情報は返されません。ID 3 については、UID2 が欠落しているため、NULL 値が返されます。

+----+----------------------+----------------------------------------------+------------+-------------------------+-------------------------+
| ID | EMAIL | UID2 | BUCKET_ID | LAST_UID2_UPDATE_UTC | LAST_SALT_UPDATE_UTC |
+----+----------------------+----------------------------------------------+------------+-------------------------+-------------------------+
| 1 | validate@example.com | 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | ad1ANEmVZ | 2025-02-01 00:00:00.000 | 2025-02-02 00:00:00.000 |
| 3 | test2@uidapi.com | NULL | NULL | NULL | NULL |
+----+----------------------+----------------------------------------------+------------+-------------------------+-------------------------+

Usage for UID2 Sharers

UID2 の共有参加者は、送信者または受信者として共有に参加し、別の参加者と UID2 を共有する企業です。

広告主とデータプロバイダーは、Snowflake を通じて他の認証された UID2 共有参加者と UID2 を共有できます(Tokenized sharing)。Raw UID2UID2 Tokenに暗号化し、ピクセルでの共有のために別の参加者に送信することができます(Tokenized Sharing in Pixelsを参照)。Snowflake 内のピクセルでデータを送信していない場合でも、Security Requirements for UID2 Sharingに記載されている要件に従えば、UID2 共有に参加することができます。

注意

このプロセスで生成される UID2 Token は共有専用であり、ビッドストリームでは使用できません。ビッドストリーム用のトークンを生成するための別のワークフローがあります:Tokenized Sharing in the Bidstreamを参照してください。

Snowflake内のピクセルやビッドストリームでデータを送信していない場合でも、Security Requirements for UID2 Sharingに記載されている要件に従えば、Raw UID2共有にも参加できます。

以下のアクティビティはトークン化共有をサポートしています:

Encrypt Tokens

Raw UID2 を UID2 Token に暗号化するには、FN_T_ENCRYPT 関数を使用します。

ArgumentData TypeDescription
RAW_UID2varchar(128)UID2 Tokenに暗号化するRaw UID2。

成功したクエリは、指定されたRaw UID2に対して以下の情報を返します。

Column NameData TypeDescription
UID_TOKENTEXT値は以下のいずれかです:
  • 暗号化成功:Raw UID2を含むUID2 Token。
  • 暗号化失敗:NULL
ENCRYPTION_STATUSTEXT値は以下のいずれかです:
  • 暗号化成功:NULL
  • 暗号化失敗:Raw UID2が暗号化されなかった理由。例:INVALID_RAW_UID2INVALID NOT_AUTHORIZED_FOR_MASTER_KEY
    詳細については、Values for the ENCRYPTION_STATUS Columnを参照してください。

Values for the ENCRYPTION_STATUS Column

以下の表は、ENCRYPTION_STATUS カラムの可能な値を示しています。

ValueMeaning
NULLRaw UID2 は正常に暗号化されました。
MISSING_OR_INVALID_RAW_UID2Raw UID2 が NULL です。
INVALID_RAW_UID2Raw UID2 が無効です。
MISMATCHING_IDENTITY_SCOPERaw UID2 が不正なアイデンティティスコープに属しています。例えば、UID2 が期待される場所で EUID が渡された場合。
NOT_AUTHORIZED_FOR_MASTER_KEY呼び出し元が必要な暗号化キーにアクセスできません。UID2 Administrator に連絡してください。
NOT_AUTHORIZED_FOR_SITE_KEY呼び出し元が必要な暗号化キーにアクセスできません。UID2 Administrator に連絡してください。

Encrypt Token Request Example - Single Raw UID2

以下のクエリは、Default database and schema namesを使用して、単一の Raw UID2 を UID2 Token に暗号化する方法を示しています。

select UID_TOKEN, ENCRYPTION_STATUS from table(UID2_PROD_UID_SH.UID.FN_T_ENCRYPT('2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU='));

単一のRaw UID2に対するクエリ結果:

+------------------------+-------------------+
| UID_TOKEN | ENCRYPTION_STATUS |
+--------------------------------------------+
| A41234<rest of token> | NULL |
+--------------------------------------------+

Encrypt Token Request Example - Multiple Raw UID2s

以下のクエリは、Default database and schema namesを使用して、複数の Raw UID2 を暗号化する方法を示しています。

select a.RAW_UID2, t.UID_TOKEN, t.ENCRYPTION_STATUS from AUDIENCE_WITH_UID2 a, lateral UID2_PROD_UID_SH.UID.FN_T_ENCRYPT(a.RAW_UID2) t;

複数のRaw UID2に対するクエリ結果:

以下の表は、NULL Raw UID2 の NULL 値を含む、応答の各項目を識別しています。

+----+----------------------------------------------+-----------------------+-----------------------------+
| ID | RAW_UID2 | UID_TOKEN | ENCRYPTION_STATUS |
+----+----------------------------------------------+-----------------------+-----------------------------+
| 1 | 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | A41234<rest of token> | NULL |
| 2 | NULL | NULL | MISSING_OR_INVALID_RAW_UID2 |
| 3 | BXJSTajB68SCUyuc3ePyxSLNhxrMKvJcjndq8TuwW5g5 | B45678<rest of token> | NULL |
+----+----------------------------------------------+-----------------------+-----------------------------+

Decrypt Tokens

UID2 Token を Raw UID2 に復号化するには、FN_T_DECRYPT 関数を使用します。

ArgumentData TypeDescription
UID_TOKENvarchar(512)Raw UID2に復号化するUID2 Token。

成功したクエリは、指定された UID2 Token に対して以下の情報を返します。

Column NameData TypeDescription
UIDTEXT値は以下のいずれかです:
  • 復号化成功:UID2 Token に対応する Raw UID2。
  • 復号化失敗:NULL
SITE_IDINT値は以下のいずれかです:
  • 復号化成功:トークンを暗号化した UID2 参加者の識別子。
  • 復号化失敗:NULL
DECRYPTION_STATUSTEXT値は以下のいずれかです:
  • 復号化成功:NULL
  • 復号化失敗:UID2 Token が復号化されなかった理由。例:EXPIRED_TOKEN
    詳細については、Values for the DECRYPTION_STATUS Columnを参照してください。
注記

UID2 Tokenが正常に復号化できない状況のほとんどの場合、関数は行を一切返しません。

Values for the DECRYPTION_STATUS Column

DECRYPTION_STATUSの可能な値は次のとおりです:

ValueMeaning
NULLUID2 Token は正常に復号化されました。
EXPIRED_TOKENUID2 Token が指定された寿命を超えています—トークンが期限切れです。

Decrypt Token Request Example—Single UID2 Token

以下のクエリは、Default database and schema namesを使用して、単一の UID2 Token を Raw UID2 に復号化する方法を示しています。

select UID, SITE_ID, DECRYPTION_STATUS from table(UID2_PROD_UID_SH.UID.FN_T_DECRYPT('A41234<rest of token>'));

単一のUID2 Tokenに対するクエリ結果:

+----------------------------------------------+-------------------+
| UID | DECRYPTION_STATUS |
+----------------------------------------------+-------------------+
| 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | NULL |
+----------------------------------------------+-------------------+

Decrypt Token Request Example—Multiple UID2 Tokens

以下のクエリは、Default database and schema namesを使用して、複数の UID2 Token を復号化する方法を示しています。

select a.ID, b.UID, b.SITE_ID, CASE WHEN b.UID IS NULL THEN 'DECRYPT_FAILED' ELSE b.DECRYPTION_STATUS END as DECRYPTION_STATUS
from TEST_IMPRESSION_DATA a LEFT OUTER JOIN (
select ID, t.* from TEST_IMPRESSION_DATA, lateral UID2_PROD_UID_SH.UID.FN_T_DECRYPT(UID_TOKEN) t) b
on a.ID=b.ID;

複数のUID2 Tokenに対するクエリ結果:

以下の表は、NULL および期限切れの UID2 Token の NULL 値を含む、応答の各項目を識別しています。

+----+----------------------------------------------+----------+-------------------+
| ID | UID | SITE_ID | DECRYPTION_STATUS |
+----+----------------------------------------------+----------+-------------------+
| 1 | 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | 12345 | NULL |
| 2 | NULL | NULL | DECRYPT_FAILED |
| 3 | BXJSTajB68SCUyuc3ePyxSLNhxrMKvJcjndq8TuwW5g5 | 23456 | NULL |
| 4 | NULL | NULL | EXPIRED_TOKEN |
| 5 | 2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU= | 12345 | NULL |
+----+----------------------------------------------+----------+-------------------+

UID2 Sharing Example

以下の指示は、Snowflakeを使用する送信者と受信者の両方について、共有がどのように機能するかの例を提供します。この例のシナリオでは、広告主(送信者)は Raw UID2 を持つオーディエンステーブル(AUDIENCE_WITH_UID2S)を持っており、Snowflake Secure Data Sharing機能を使用してデータプロバイダー(受信者)にテーブル内のデータを利用可能にしたいと考えています。

Sender Instructions

  1. AUDIENCE_WITH_UID2_TOKENS という名前の新しいテーブルを作成します。
  2. AUDIENCE_WITH_UID2Sテーブル内の Raw UID2 を暗号化し、結果を AUDIENCE_WITH_UID2_TOKENS テーブルに保存します。例えば、以下のクエリでこのタスクを達成することができます:
    insert into AUDIENCE_WITH_UID2_TOKENS select a.ID, t.UID_TOKEN from AUDIENCE_WITH_UID2S a, lateral UID2_PROD_UID_SH.UID.FN_T_ENCRYPT(a.RAW_UID2) t;
  3. セキュア共有を作成し、AUDIENCE_WITH_UID2_TOKENS テーブルへのアクセス権を付与します。
  4. 受信者にセキュア共有へのアクセス権を付与します。
警告

共有中に UID2 Token が期限切れになるのを防ぐため、新しく暗号化された UID2 Token をできるだけ早く受信者に送信してください。

Receiver Instructions

  1. 送信者がアクセス権を提供したセキュア共有からデータベースを作成します。
  2. RECEIVED_AUDIENCE_WITH_UID2 という名前の新しいテーブルを作成します。
  3. 共有された AUDIENCE_WITH_UID2_TOKENS テーブルからトークンを復号化し、結果を RECEIVED_AUDIENCE_WITH_UID2 テーブルに保存します。例えば、以下のクエリでこれを達成することができます:
    insert into RECEIVED_AUDIENCE_WITH_UID2
    select a.ID, b.UID, CASE WHEN b.UID IS NULL THEN 'DECRYPT_FAILED' ELSE b.DECRYPTION_STATUS END as DECRYPTION_STATUS
    from AUDIENCE_WITH_UID2_TOKENS a LEFT OUTER JOIN (
    select ID, t.* from AUDIENCE_WITH_UID2_TOKENS, lateral UID2_PROD_UID_SH.UID.FN_T_DECRYPT(UID_TOKEN) t) b
    on a.ID=b.ID;
警告

UID2 Token が期限切れになるのを防ぐため、送信者から利用可能になり次第、UID2 Token をできるだけ早く復号化してください。

Migration Guide

このセクションには、新しいUID2 Snowflakeマーケットプレイス機能にアップグレードするのに役立つ以下の情報が含まれています:

Accessing the New Data Share

新しいデータシェアにアクセスするには、Access the UID2 Shareの指示に従ってください。

Changing Existing Code

変更の概要については、Changes from Previous Versionを参照してください。このセクションのコードスニペットは、以前の関数がどのように実装されていたか、および新しい関数を使用するように更新する方法についての例です。

Example for Mapping Unhashed Emails

変更前:

select UID2, BUCKET_ID, UNMAPPED from table({DATABASE_NAME}.{SCHEMA_NAME}.FN_T_UID2_IDENTITY_MAP(EMAIL, 'email'));

変更後:

select UID, BUCKET_ID, UNMAPPED from table({DATABASE_NAME}.{SCHEMA_NAME}.FN_T_IDENTITY_MAP(EMAIL, 'email'));

Example for Mapping Unhashed Phone Numbers

変更前:

select UID2, BUCKET_ID, UNMAPPED from table({DATABASE_NAME}.{SCHEMA_NAME}.FN_T_UID2_IDENTITY_MAP(PHONE_NUMBER, 'phone'));

変更後:

select UID, BUCKET_ID, UNMAPPED from table({DATABASE_NAME}.{SCHEMA_NAME}.FN_T_IDENTITY_MAP(PHONE_NUMBER, 'phone'));

Example for Monitoring Salt Bucket Rotation and Regenerating Raw UID2s

以下のクエリは、Targeted Input Tableで使用したのと同じ例のテーブル AUDIENCE_WITH_UID2 を使用しています。

変更前:

select a.*, b.LAST_SALT_UPDATE_UTC
from AUDIENCE_WITH_UID2 a LEFT OUTER JOIN {DATABASE_NAME}.{SCHEMA_NAME}.UID2_SALT_BUCKETS b
on a.BUCKET_ID=b.BUCKET_ID
where a.LAST_UID2_UPDATE_UTC < b.LAST_SALT_UPDATE_UTC or a.UID2 IS NULL;

変更後:

select a.*, b.LAST_SALT_UPDATE_UTC
from AUDIENCE_WITH_UID2 a LEFT OUTER JOIN {DATABASE_NAME}.{SCHEMA_NAME}.SALT_BUCKETS b
on a.BUCKET_ID=b.BUCKET_ID
where a.LAST_UID2_UPDATE_UTC < b.LAST_SALT_UPDATE_UTC or a.UID2 IS NULL;

Example for Token Encryption

変更前:

select UID2_TOKEN, ENCRYPTION_STATUS from table({DATABASE_NAME}.{SCHEMA_NAME}.FN_T_UID2_ENCRYPT('2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU='));

変更後:

select UID_TOKEN, ENCRYPTION_STATUS from table({DATABASE_NAME}.{SCHEMA_NAME}.FN_T_ENCRYPT('2ODl112/VS3x2vL+kG1439nPb7XNngLvOWiZGaMhdcU='));

Example for Token Decryption

変更前:

select UID2, SITE_ID, DECRYPTION_STATUS from table({DATABASE_NAME}.{SCHEMA_NAME}.FN_T_UID2_DECRYPT('A41234<rest of token>'));

変更後:

select UID, SITE_ID, DECRYPTION_STATUS from table({DATABASE_NAME}.{SCHEMA_NAME}.FN_T_DECRYPT('A41234<rest of token>'));