Bidders - BSS Avro ファイル形式
BSS AVROファイルの形式
このドキュメントでは、AVRO ファイル形式を使用して対象ユーザー ファイルを準備し、データをプラットフォームにオンボードする方法について説明します。 拡張 ID と発行元が指定した ID を含む対象ユーザーをアップロードするには AVRO が必要であり、従来の BSS ファイル形式では、新しいユーザー ID の種類はサポートされていません。
- セグメントは、 セグメント サービスを介して作成できます。
- 対象ユーザー ファイルは、 バッチ セグメント サービスを通じてセグメントにアップロードできます。
ベスト プラクティス
- 推奨されるファイル サイズ: 1 ファイルあたり 100 から 300 mb
- 推奨されるファイル圧縮: deflate
- 推奨される配信方法: パッシブ セグメントのアップロード (アクセスのためにアカウント マネージャーに問い合わせてください)。
- セグメントの更新: 完全な対象ユーザー メンバーシップを再度送信する代わりに、既存のセグメントの変更のみをアップロードできます。 これにより、データ サイズが縮小され、1 日のアップロード制限に達する可能性が高くなります。
手順の概要
ユーザー セグメント レコード
ユーザー レコードには、最上位の 2 つの要素があります。
- ユーザー ID (uid)
- セグメントの配列
ユーザー ID の種類
uid レコードごとにアップロードできる ID の種類は 1 つだけです (Xandr ユーザー ID、IFA、デバイス ID、eid など)
ユーザー ID の種類 | 説明 |
---|---|
AppNexus/Xandr User ID (ANID) |
Xandr ID (user_id_64 とも呼ばれます)。 |
Device ID |
ifa (広告用識別子) と同様のユーティリティ。 オンボードされているモバイル デバイスの種類を示します。 device_id レコードは、次の 2 つのフィールドで構成されます。 - domain (enum): 考えられる値は idfa、sha1udid、md5udid、openudid、aaid、windowsadid、rida、tifa、vida、lgudid です。 - id (string) |
Identifier for Advertising (or IFA) |
アドバタイズの識別子 - オンボードされているデバイスの種類を示します。 ifa レコードは、次の 2 つのフィールドで構成されます。 - type (string): ID の型。 - id (string): IFA ID。UUID 形式の IFA を表します。 サポートされている ifa 型については、「 デバイス拡張オブジェクト」を参照してください。 |
External ID |
外部 ID - オンボードされているメンバー定義識別子を示します。 external_id レコードは、次の 2 つのフィールドで構成されます。 - member_id (int): external_idを所有するメンバーのメンバー ID。 - id (string): member_idの対応する値。 |
Extended ID's(eid) or Publisher-provided ID's(PPID) |
拡張 ID - オンボードされているユニバーサル ID またはパブリッシャー ID の種類を示します。 eid レコードは、次の 2 つのフィールドで構成されます。 - source (string): ID のソース。 - id (string) - パブリッシャーまたは業界 ID。 現在、これらは、対象ユーザーのオンボードに使用できる唯一の 2 つです。 |
Java ライブラリの例
AppNexus/Xandr User ID (ANID)
{"uid":
{"long":12345},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}
Device ID
{"uid":
{"device_id":
{"id":"958cba26-f338-43f3-8bb0-ed821582daae",
"domain":"idfa"}},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}
Identifier for Advertising (or IFA)
{"uid":
{"ifa":
{"id":"99136473264876328",
"type":"atif"}},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}
External ID
{"uid":
{"external_id":
{"id":"clientid1",
"member_id":958}},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}
Extended ID's(eid) or Publisher-provided ID's(PPID)
{"uid":
{"eid":
{"source":"liveramp.com",
"id":"123123123"}},
"segments":
[{"id":123,
"code":"",
"member_id":0,
"expiration":0,
"timestamp":0,
"value":0}]}
Python ライブラリの例
Python ライブラリの例: AppNexus/Xandr User ID (ANID)
{'uid': 64,
'segments':
[seg1]}
Python ライブラリの例: Device ID
{'uid': {'id':
'qweqeqweq',
'domain': 'idfa'},
'segments': [seg1]}
Python ライブラリの例: Identifier for Advertising (or IFA)
{'uid': {'id':
'qweqeqweq', 'type':
'atif'}, 'segments':
[seg1]}
Python ライブラリの例: External ID
{'uid': {'id':
'extid1',
'member_id': 914},
'segments': [seg1]}
Python ライブラリの例: Extended ID's(eid) or Publisher-provided ID's(PPID)
{'uid': {'id':
'qweqeqweq',
'source':
'liveramp.com'},
'segments': [seg1]}
Segments オブジェクト
セグメント オブジェクトの配列を作成することで、同じ uid レコード内の複数のセグメントにアップロードできます。
File | 型 | 説明 |
---|---|---|
id |
int | Xandr セグメント ID。 |
code |
string | Xandr セグメント コード。 |
member_id |
int | セグメントのメンバー ID。 コードが指定されている場合は必須です。 |
expiration |
int | セグメントの有効期限 (分単位)。 に設定します。 - 0 最大有効期限 (180 日)。- -1 セグメントの削除。- -2 既定のメンバーの有効期限。 |
timestamp |
long | セグメントのアクティブ化時間 (エポックからの秒数)。 セグメントが "ライブ" になるタイミングを指定します。 セグメントをすぐにアクティブにするには、0 に設定します。 |
value |
int | セグメント値。 |
AVRO ツール ライブラリのインストール
Java ライブラリ
Curl -o http://archive.apache.org/dist/avro/avro-1.10.1/java/avro-tools-1.10.1.jar
Python ライブラリ
python3 -m pip install avro
Xandr Avro スキーマをダウンロードする
Xandr Avro スキーマは 、ここからダウンロードできます。
AVRO 対象ユーザー ファイルを生成する
Java ライブラリと Python ライブラリの使用例については、以下を参照してください。
Java の例
対象ユーザー ファイルを作成する
{"uid":{"long":12345},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}
{"uid":{"external_id":{"id":"clientid1","member_id":958}},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}
{"uid":{"ifa":{"id":"99136473264876328","type":"atif"}},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}
{"uid":{"device_id":{"id":"958cba26-f338-43f3-8bb0-ed821582daae","domain":"idfa"}},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}
{"uid":{"eid":{"source":"liveramp.com","id":"123123123"}},"segments":[{"id":123,"code":"","member_id":0,"expiration":0,"timestamp":0,"value":0}]}
対象ユーザー ファイルを AVRO に変換する
次のコマンドを実行します。
java -jar avro-tools-1.10.1.jar fromjson --codec deflate --schema-file xandr_schema.avsc sample.json > sample.avro
各部分の意味は次のとおりです。
- xandr_schema.avsc = 指定された Xandr Avro スキーマ ファイル。
- sample.json = 対象ユーザー ファイル。
- and sample.avro = 出力 AVRO ファイル
Python の例
注:
- この例は Python Avro ライブラリ用であり、 Fast Avro ライブラリと混同しないでください。
Python Avro ライブラリでは、uid 共用体の型名は使用されません。 代わりに、フィールド名の完全一致によって uid 型が決定されます。
{'uid': {'id': 'qweqeqweq', 'domain': 'idfa'}, 'segments': \[…\]}
Fast Avro ライブラリでは、ヒントを使用して、Java ライブラリと同様の uid の正確な種類を指定します。
{'uid': ('external_id', {'id':'exitd1', 'member_id': 914}), 'segments': \[{'expiration': 259200, 'id': 25815407}\]}
DataFileWriter.append()
は、JSON ではなく Python ディクショナリ (dict) 型を受け入れます。
AVRO 対象ユーザー ファイルの作成
Python Avro ライブラリを使用したサンプル スクリプト
import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter
# the supplied xandr schema
schema = avro.schema.parse(open("xandr_schema.avsc", "rb").read())
# output avro file
writer = DataFileWriter(open("sample.avro", "wb"), DatumWriter(), schema, codec=’deflate’)
# segments
seg1 = {'id': 1000, 'code': '', 'member_id': 0, 'expiration': 0, 'timestamp': 0, 'value': 0}
# anid
writer.append({'uid': 64, 'segments': [seg1]})
# external id
writer.append({'uid': {'id': 'exitd1', 'member_id': 914}, 'segments': [seg1]})
# idfa
writer.append({'uid': {'id': 'qweqeqweq', 'domain': 'idfa'}, 'segments': [seg1]})
# eid (or ppid)
writer.append({'uid': {'id': 'qweqeqweq', 'source': 'liveramp.com'}, 'segments': [seg1]})
writer.append({'uid': {'id': 'qweqeqweq', 'source': 'netid.de'}, 'segments': [seg1]})
writer.close()