SQLを使用した派生データセットの作成

SQL クエリを使用して、既存のデータセットからデータを操作および変換し、プロファイルに対して有効な派生データセットを作成する方法を説明します。 このワークフローは、リアルタイム顧客プロファイルのビジネスユースケース用に派生データセットを作成するための効率的で代替の方法を提供します。

このドキュメントでは、リアルタイム顧客プロファイルで使用するための派生データセットを生成する、様々な便利なSQL拡張機能の概要を説明します。 このワークフローにより、様々なAPI呼び出しやExperience Platform UIの操作を通じて実行する必要があるプロセスが簡素化されます。

通常、リアルタイム顧客プロファイル用の派生データセットを生成して公開するには、次の手順を実行します。

  • ID名前空間がまだ存在しない場合は、作成します。
  • 必要に応じて、派生データセットを格納するデータタイプを作成します。
  • 派生データセット情報を保存する、そのデータタイプを使用したフィールドグループを作成します。
  • 前に作成した名前空間を使用して、プライマリ ID列を作成または割り当てます。
  • 先ほど作成したフィールドグループとデータタイプを使用して、スキーマを作成します。
  • スキーマを使用して新しいデータセットを作成し、必要に応じてプロファイルに有効にします。
  • 必要に応じて、データセットをプロファイル対応としてマークします。

上記の手順を完了すると、データセットを入力する準備が整います。 プロファイルのデータセットを有効にしている場合は、新しいデータセットを参照するセグメントを作成し、インサイトの生成を開始することもできます。

クエリサービスを使用すると、SQL クエリを使用して、上記のすべてのアクションを実行できます。 これには、必要に応じてデータセットやフィールドグループを変更することも含まれます。

プロファイルで有効にするオプションを含むテーブルを作成します enable-dataset-for-profile

NOTE
以下に示すSQL クエリは、既存の名前空間を使用することを前提としています。

テーブルを選択として作成(CTAS)クエリを使用して、データセットの作成、データタイプの割り当て、プライマリ IDの設定、スキーマの作成、プロファイル対応としてマークします。 次のSQL ステートメントの例では、データセットを作成し、Real-Time Customer Data Platform(Real-Time CDP)で使用できるようにしています。 SQL クエリは、次の例に示す形式に従います。

CREATE TABLE <your_table_name> [IF NOT EXISTS] (fieldname <your_data_type> primary identity namespace <your_namespace>, [field_name2 <your_data_type>]) [WITH(LABEL='PROFILE')];

サポートされているデータ型は、ブール値、日付、日時、テキスト、浮動小数、bigint、整数、マップ、配列、構造体/行です。

以下のSQl コードブロックは、構造体/行、マップおよび配列のデータタイプを定義する例を提供します。 1行目は行の構文を示しています。 2行目はマップ構文、3行目は配列構文を示します。

ROW (Column_name <data_type> [, column name <data_type> ]*)
MAP <data_type, data_type>
ARRAY <data_type>

または、Experience Platform UIを使用して、プロファイルに対してデータセットを有効にすることもできます。 プロファイルでデータセットを有効としてマークする方法について詳しくは、「​ リアルタイム顧客プロファイルのデータセットを有効にする」ドキュメント ​を参照してください。

次のクエリの例では、decile_table データセットはidをプライマリ ID列として作成され、名前空間IDFAを持ちます。 また、マップデータタイプのdecile1Monthという名前のフィールドもあります。 作成されたテーブル (decile_table)は、プロファイルに対して有効になっています。

CREATE TABLE decile_table (id text PRIMARY KEY NAMESPACE 'IDFA',
            decile1Month map<text, integer>) WITH (label='PROFILE');

クエリが正常に実行されると、次の例に示すように、データセット IDがコンソールに返されます。

Created Table DataSet Id
>
637fd84969ba291e62dba79f
(1 row)

CREATE TABLE コマンドでlabel='PROFILE'を使用して、プロファイルが有効なデータセットを作成します。 upsert機能はデフォルトでオンになっています。 upsert機能は、次の例に示すように、ALTER コマンドを使用して上書きできます。

ALTER TABLE <your_table_name> DROP label upsert;

ALTER TABLE コマンドとlabelをCTAS クエリ ​の一部として使用する方法について詳しくは、SQl構文ドキュメントを参照してください。

SQLによる派生データセットの管理に役立つ構造

以下に説明する機能は、SQLを使用して派生データセットを管理する際に大きなメリットをもたらします。

既存のデータセットをプロファイルに対して有効にするように変更 enable-existing-dataset-for-profile

ALTER TABLE SQL構文を使用すると、既存のデータセットをプロファイルに対して有効にできます。 これには、プロファイル対応タグをスキーマと対応するデータセットの両方に追加する必要があります。

ALTER TABLE your_decile_table ADD label 'PROFILE';
NOTE
ALTER TABLE コマンドが正常に実行されると、コンソールはALTER SUCCESSを返します。

既存のデータセットにプライマリ IDを追加する add-primary-identity

データセット内の既存の列をプライマリ ID セットとしてマークします。そうしないと、エラーが発生します。 SQLを使用してプライマリ IDを設定するには、以下に表示されるクエリ形式を使用します。

ALTER TABLE <your_table_name> ADD CONSTRAINT primary identity NAMESPACE

次に例を示します。

ALTER TABLE test1_dataset ADD CONSTRAINT PRIMARY KEY(id2) NAMESPACE 'IDFA';

指定された例では、id2test1_datasetの既存の列です。

プロファイルのデータセットを無効にする disable-dataset-for-profile

プロファイルで使用するテーブルを無効にする場合は、DROP コマンドを使用する必要があります。 DROPを使用するSQL ステートメントの例を以下に示します。

ALTER TABLE table_name DROP LABEL 'PROFILE';

次に例を示します。

ALTER TABLE decile_table DROP label 'PROFILE';

このSQL文は、API呼び出しを使用するための効率的な代替方法を提供します。 詳しくは、データセット API🔗を使用してReal-Time CDPで使用するデータセットを無効にする方法に関するドキュメントを参照してください。

データセットの更新と挿入の機能を許可 enable-upsert-functionality-for-dataset

UPSERT コマンドを使用すると、新しいレコードを挿入したり、テーブル内の既存のデータを更新したりできます。 具体的には、指定した値が既にテーブルに存在する場合は既存の行を更新し、指定した値がまだ存在しない場合は新しい行を挿入できます。

正しい形式を使用するステートメントの例を以下に示します。

ALTER TABLE table_name ADD LABEL 'UPSERT';

次に例を示します。

ALTER TABLE table_with_a_decile ADD label 'UPSERT';

このSQL文は、API呼び出しを使用するための効率的な代替方法を提供します。 詳しくは、データセット API🔗を使用してReal-Time CDPおよびUPSERTで使用するデータセットを有効にする方法に関するドキュメントを参照してください。

データセットの更新と挿入機能を無効にする disable-upsert-functionality-for-dataset

このコマンドは、データセットに行を更新して挿入する機能を無効にします。

正しい形式を使用するステートメントの例を以下に示します。

ALTER TABLE table_name DROP LABEL 'UPSERT';

次に例を示します。

ALTER TABLE table_with_a_decile DROP label 'UPSERT';

各表に関連付けられている追加表情報を表示 show-labels-for-tables

追加のメタデータは、プロファイル対応データセット用に保持されます。 SHOW TABLES コマンドを使用して、テーブルに関連付けられているラベルに関する情報を提供する追加のlabels列を表示します。

このコマンドの出力例を以下に示します。

       name          |        dataSetId         |     dataSet    | description | labels
|---------------------+--------------------------+----------------+-------------+----------
 luma_midvalues      | 5bac030c29bb8d12fa992e58 | Luma midValues |             | false
 luma_postvalues     | 5c86b896b3c162151785b43c | Luma midValues |             | false
 table_with_a_decile | 5c86b896b3c162151785b43c | Luma midValues |             | 'UPSERT', 'PROFILE'
(3 rows)

例から、table_with_a_decileがプロファイルに対して有効になっており、前述のように’UPSERT’'PROFILE’などのラベルで適用されていることがわかります。

SQLを使用したフィールドグループの作成

フィールドグループは、SQLを使用して作成できるようになりました。 これにより、Experience Platform UI内でスキーマエディターを使用したり、スキーマレジストリにAPI呼び出しを行ったりする代わりの方法が提供されます。

フィールドグループを作成するステートメントの例を以下に示します。

CREATE FIELDGROUP <field_group_name> [IF NOT EXISTS]  (field_name <data_type> primary identity namespace <namespace>, [field_name_2 >data_type>]) [ WITH(LABEL='PROFILE') ];
IMPORTANT
ステートメントにlabel フラグが指定されていない場合、またはフィールドグループが既に存在する場合、SQLによるフィールドグループの作成は失敗します。
フィールドグループが既に存在するため、クエリにIF NOT EXISTS句が含まれていることを確認して、クエリの失敗を回避します。

実際の例は、下の例と似ています。

CREATE FIELDGROUP field_group_for_test123 (decile1Month map<text, integer>, decile3Month map<text, integer>, decile6Month map<text, integer>, decile9Month map<text, integer>, decile12Month map<text, integer>, decilelietime map<text, integer>) WITH (LABEL-'PROFILE');

このステートメントを正常に実行すると、作成されたフィールドグループ IDが返されます。 例:c731a1eafdfdecae1683c6dca197c66ed2c2b49ecd3a9525

代替方法について詳しくは、​ スキーマエディターで新しいフィールドグループを作成する方法または​ スキーマレジストリ APIを使用する方法に関するドキュメントを参照してください。

フィールドグループをドロップ

スキーマレジストリからフィールドグループを削除する必要がある場合があります。 これは、フィールドグループ IDを使用してDROP FIELDGROUP コマンドを実行することによって実行します。

DROP FIELDGROUP [IF EXISTS] <your_field_group_id>;

次に例を示します。

DROP FIELDGROUP field_group_for_test123;
IMPORTANT
フィールドグループが存在しない場合、SQLを使用してフィールドグループを削除すると失敗します。 クエリが失敗しないように、ステートメントにIF EXISTS句が含まれていることを確認します。

テーブルのすべてのフィールドグループ名とIDを表示する

SHOW FIELDGROUPS コマンドは、テーブルの名前、fieldgroupId、および所有者を含むテーブルを返します。

このコマンドの出力例を以下に示します。

       name                      |        fieldgroupId                             |     owner      |
|---------------------------------+-------------------------------------------------+-----------------
 AEP Mobile Lifecycle Details    | _experience.aep-mobile-lifecycle-details        | Luma midValues |
 AEP Web SDK ExperienceEvent     | _experience.aep-web-sdk-experienceevent         | Luma midValues |
 AJO Classification Fields       | _experience.journeyOrchestration.classification | Luma midValues |
 AJO Entity Fields               | _experience.customerJourneyManagement.entities  | Luma midValues |
(4 rows)

次の手順

このドキュメントでは、SQLを使用して派生データセットに基づいてプロファイルとアップサートが有効なデータセットを作成する方法について詳しく説明します。 これで、このデータセットとバッチ取り込みワークフローを使用して、プロファイルデータを更新する準備が整いました。 データを Adobe Experience Platform に取り込む方法の詳細については、まず データ取り込みの概要を参照してください。

recommendation-more-help
experience-platform-help-query-service