アトリビュートグルーピングは、Treasure Dataのペアレントセグメントオブジェクトに含まれるattributesオブジェクトのgroupingNameフィールドの値によって定義されます。デフォルトでは、groupingNameはNULLに設定されています。ただし、groupingNameが文字列値に設定されている場合、その名前でTreasure Dataコンソールにアトリビュートグルーピングが作成されます。groupingNameにその文字列が指定されているattributesオブジェクトは、すべてアトリビュートグルーピングに含まれます。
この記事の最後にある図1には、ペアレントセグメントオブジェクトの完全なリストがあります。オブジェクトのattributes(つまり、セグメントのテーブルカラム)は34行目から始まります。attributesオブジェクトで記述されている両方のオブジェクトのgroupingNameがnullに設定されていることに注意してください(47行目と61行目)。
34: "attributes":[
35: {
36: "audienceId":"12345",
37: "id":"56662",
38: "name":"c1-test",
39: "type":"string",
40: "parentDatabaseName":"_mobile_sdk",
41: "parentTableName":"android",
42: "parentColumn":"c1",
43: "parentKey":"c0",
44: "foreignKey":"c_comment",
45: "matrixColumnName":"c1",
46: "usedBySegmentInsight":false,
47: "groupingName": null
48: },
49: {
50: "audienceId":"12345",
51: "id":"56663",
52: "name":"c2-test",
53: "type":"string",
54: "parentDatabaseName":"_mobile_sdk",
55: "parentTableName":"android",
56: "parentColumn":"activity_date",
57: "parentKey":"c0",
58: "foreignKey":"c_comment",
59: "matrixColumnName":"activity_date",
60: "usedBySegmentInsight":false,
61: "groupingName": null
62: }ただし、groupingNameが例えばwtt_testに変更された場合(47行目に示されているように)、wtt_testという名前のアトリビュートグルーピングが作成されます。
35: {
36: "audienceId":"12345",
37: "id":"56662",
38: "name":"c1-test",
39: "type":"string",
40: "parentDatabaseName":"_mobile_sdk",
41: "parentTableName":"android",
42: "parentColumn":"c1",
43: "parentKey":"c0",
44: "foreignKey":"c_comment",
45: "matrixColumnName":"c1",
46: "usedBySegmentInsight":false,
47: "groupingName": 'wtt_test'
48: },
アトリビュートグルーピングを作成するには、3つのステップがあります:
- ペアレントセグメントIDの取得
- ペアレントセグメントオブジェクトの取得
groupingNameを使用したペアレントセグメントオブジェクトのパッチ
作業対象のペアレントセグメントのIDを取得する方法は2つあります。Treasure Dataコンソールを使用する方法と、Audience APIコールを行う方法です。
Treasure Dataコンソールで、Audience Studioに移動し、作業対象のペアレントセグメントを選択します。セグメントIDは、URLの/app/ps/というテキストの後に記載されています。

または、すべてのペアレントセグメントを表示するためのAudience APIコールを行うと、すべてのペアレントセグメントのidとnameがレスポンスの一部として返されます。例えば、以下に示すようなコールを実行できます。レスポンスはフォーマットされていないJSONで返されます。ただし、この例では、レスポンスが編集され、読みやすくフォーマットされています。
$ curl -H 'AUTHORIZATION: TD1 1/1234567891234567891234567891234567891234' 'https://api-cdp.treasuredata.com/audiences/'{
"id":"12345",
"name":"Attribute Grouping",
"description":"Contains grouping names set through Audience API.",
"scheduleType":"none",
"scheduleOption":null,
.
.
.
}レスポンスに多数のペアレントセグメントがある場合、出力を簡素化する1つの戦略は、フォーマットしてからidとnameでフィルタリングすることです。これを実現する方法の例を以下に示します。
curl -H 'AUTHORIZATION: TD1 1/1234567891234567891234567891234567891234' 'https://api-cdp.treasuredata.com/audiences/' | python -m json.tool | grep '^\s\s\s\s\s\s\s\s\"id\|^\s\s\s\s\s\s\s\s\"name'% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 1188k 0 1188k 0 0 81378 0 --:--:-- 0:00:14 --:--:-- 323k
"id": "12345",
"name": "Attribute Grouping",
"id": "23456",
"name": "PS1",
"id": "34567",
"name": "PS2",
"id": "45678",
"name": "Test Segment",
.
.
.ペアレントセグメントIDを取得したら、ペアレントセグメントオブジェクトを取得できます。以下の例では、ペアレントセグメントオブジェクトIDは12345です。
curl -H 'AUTHORIZATION: TD1 1/1234567891234567891234567891234567891234' https://api-cdp.treasuredata.com/audiences/12345レスポンスはフォーマットされていないJSONとして返されます。JSONフォーマットツールを使用してレスポンスを読みやすくすることが役立ちます。例えば、Pythonのjson.toolを使用してレスポンスをフォーマットする例を以下に示します。
$ curl -H 'AUTHORIZATION: TD1 1/1234567891234567891234567891234567891234' 'https://api-cdp.treasuredata.com/audiences/12345' | python -m json.toolgroupingNameを使用したペアレントセグメントオブジェクトのパッチ
ペアレントセグメントオブジェクトを取得したら、レスポンスを編集し、グルーピングに含めたい1つ以上のアトリビュートのgroupingNameのnull設定を変更できます。groupingNameに指定する文字列値が、アトリビュートグルーピングの名前になります。
ペアレントセグメントオブジェクトの編集が完了したら、この編集されたオブジェクトをPATCHリクエストのリクエストペイロードとして使用します。
複数の埋め込みオブジェクトを含む大きなフォーマットされていないJSONオブジェクトは、扱いにくい場合があります。そのため、リクエストペイロードとして使用されるペアレントセグメントオブジェクトはフォーマットされ、attrGroupingRequest.jsonという名前のファイルに保存されています(以下の図1を参照)。ファイルを必要に応じて編集した後、次のようなPATCHリクエストにファイルを含めることができます:
$ curl --location --request PATCH -H 'AUTHORIZATION: TD1 1/1234567891234567891234567891234567891234' -H 'Content-Type: application/json' -d @attrGroupingRequest.json https://api-cdp.treasuredata.com/audiences/12345アトリビュートグルーピングの変更は、ペアレントセグメントオブジェクトを編集し、必要に応じてgroupingNameの値を変更することで構成されます。すべてのアトリビュートグルーピングからカラムを削除するにはnullに変更するか、名前を別のアトリビュートグルーピングに変更して、事実上カラムを新しいアトリビュートグルーピングに移動できます。ペアレントセグメントオブジェクトを変更した後、変更されたオブジェクトを使用してPATCHリクエストを送信します。
アトリビュートグルーピングを削除するには、ペアレントセグメントオブジェクトを編集し、削除したいアトリビュートグルーピングの名前を削除します。groupingNameのすべてのインスタンスから名前を削除します。ほとんどの場合、値を単にnullに変更します。ペアレントセグメントオブジェクトを変更した後、新しいオブジェクトを使用してPATCHリクエストを送信します。
図1: ペアレントセグメントオブジェクトを含むattrGroupingRequest.jsonのファイルリスト
{
"id": "12345",
"name": "Attribute Grouping",
"description": "Contains grouping names set through Audience API.",
"scheduleType": "none",
"scheduleOption": null,
"timezone": "UTC",
"createdAt": "2022-02-10T19:17:45.107Z",
"updatedAt": "2022-02-10T19:17:45.107Z",
"createdBy": {
"id": "111",
"td_user_id": "4567",
"name": "firstName lastName"
},
"updatedBy": {
"id": "3210",
"td_user_id": "45678",
"name": "Me"
},
"matrixUpdatedAt": "2022-02-10T19:25:09.676Z",
"workflowHiveOnly": false,
"hiveEngineVersion": "cdpaudience",
"hivePoolName": null,
"prestoPoolName": null,
"population": 150000,
"enrichmentWordTaggingEnabled": true,
"enrichmentIpEnabled": true,
"enrichmentTdJsSdkEnabled": true,
"rootFolderId": "987654",
"master": {
"parentDatabaseName": "test_db_1",
"parentTableName": "sample"
},
"attributes": [
{
"audienceId": "12345",
"id": "56662",
"name": "c1-test",
"type": "string",
"parentDatabaseName": "_mobile_sdk",
"parentTableName": "android",
"parentColumn": "c1",
"parentKey": "c0",
"foreignKey": "c_comment",
"matrixColumnName": "c1",
"usedBySegmentInsight": false,
"groupingName": null
},
{
"audienceId": "12345",
"id": "56663",
"name": "c2-test",
"type": "string",
"parentDatabaseName": "_mobile_sdk",
"parentTableName": "android",
"parentColumn": "activity_date",
"parentKey": "c0",
"foreignKey": "c_comment",
"matrixColumnName": "activity_date",
"usedBySegmentInsight": false,
"groupingName": null
}
],
"behaviors": [
{
"audienceId": "12345",
"id": "23456",
"name": "Orders",
"parentDatabaseName": "test_db_1",
"parentTableName": "orders",
"parentKey": "o_custkey",
"foreignKey": "c_custkey",
"matrixDatabaseName": "audience_76543",
"matrixTableName": "behavior_orders",
"allColumns": false,
"scheduleType": "none",
"scheduleOption": null,
"defaultTimeFilterEnabled": true,
"filterRule": {},
"schema": [
{
"name": "o_clerk",
"type": "string",
"parentColumn": "o_clerk",
"matrixColumnName": "o_clerk"
}
]
}
]
}