Licitadores: formato de archivo BSS Avro
Formato de archivo AVRO de BSS
En este documento se explica cómo preparar los archivos de audiencia mediante el formato de archivo AVRO e incorporar los datos a la plataforma. AVRO es necesario para cargar audiencias que contengan identificadores extendidos y identificadores proporcionados por el publicador, y el formato de archivo BSS heredado no admite los tipos de identificador de usuario más recientes.
- Los segmentos se pueden crear a través del servicio de segmento.
- Los archivos de audiencia se pueden cargar en segmentos a través del servicio de segmentos por lotes.
Procedimientos recomendados
- Tamaño de archivo recomendado: 100-300 mb por archivo
- Compresión de archivos recomendada: deflate
- Método de entrega recomendado: Carga pasiva de segmentos (póngase en contacto con el Administrador de cuentas para obtener acceso).
- Actualizar segmentos: en lugar de volver a enviar las pertenencias a la audiencia completa, solo puede cargar los cambios para los segmentos existentes. Esto reducirá el tamaño de los datos y la posibilidad de alcanzar los límites de carga diarios.
Información general sobre los pasos
- Descripción del registro de segmentos de usuario
- Instalación de la biblioteca de herramientas de AVRO
- Descarga del archivo de esquema Xandr AVRO
- Generación del archivo de audiencia de AVRO
Registro de segmentos de usuario
Un registro de usuario tiene dos elementos de nivel superior:
- Id. de usuario (uid)
- Matriz de segmentos
Tipos de identificador de usuario
Solo se puede cargar un tipo de identificador por registro uid (por ejemplo, id. de usuario de Xandr, IFA, id. de dispositivo, eid)
Tipo de identificador de usuario | Description |
---|---|
AppNexus/Xandr User ID (ANID) |
Id. de Xandr, también conocido como user_id_64. |
Device ID |
Utilidad similar a ifa (identificador de publicidad). Indica el tipo de dispositivo móvil que se va a incorporar. El registro device_id consta de dos campos: - dominio (enumeración): los valores posibles son idfa, sha1udid, md5udid, openudid, aaid, windowsadid, rida, tifa, vida y lgudid. - id (cadena) |
Identifier for Advertising (or IFA) |
Identificador de publicidad: indica el tipo de dispositivo que se va a incorporar. El registro ifa consta de dos campos: - tipo (cadena): tipo de identificador. - id (cadena): id. de IFA, que representa el IFA en formato UUID. Para ver los tipos de ifa admitidos, consulte objeto de extensión de dispositivo. |
External ID |
Identificador externo: indica el identificador definido por el miembro que se va a incorporar. El registro external_id consta de dos campos: - member_id (int): id. de miembro del miembro propietario del external_id. - id (cadena): valor correspondiente del member_id. |
Extended ID's(eid) or Publisher-provided ID's(PPID) |
Id. extendido: indica el tipo de identificador universal o identificador de publicador que se va a incorporar. El registro eid consta de dos campos: - source (cadena): origen del identificador. - id (cadena): id. del publicador o del sector. En la actualidad, estos son los dos únicos disponibles para la incorporación de público. |
Ejemplo de biblioteca de 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}]}
Ejemplo de biblioteca de Python
Ejemplo de biblioteca de Python: AppNexus/Xandr User ID (ANID)
{'uid': 64,
'segments':
[seg1]}
Ejemplo de biblioteca de Python: Device ID
{'uid': {'id':
'qweqeqweq',
'domain': 'idfa'},
'segments': [seg1]}
Ejemplo de biblioteca de Python: Identifier for Advertising (or IFA)
{'uid': {'id':
'qweqeqweq', 'type':
'atif'}, 'segments':
[seg1]}
Ejemplo de biblioteca de Python: External ID
{'uid': {'id':
'extid1',
'member_id': 914},
'segments': [seg1]}
Ejemplo de biblioteca de Python: Extended ID's(eid) or Publisher-provided ID's(PPID)
{'uid': {'id':
'qweqeqweq',
'source':
'liveramp.com'},
'segments': [seg1]}
Objeto Segments
Puede cargar en varios segmentos dentro del mismo registro uid creando una matriz de objetos de segmento.
Archivo | Tipo | Description |
---|---|---|
id |
Entero | Id. de segmento Xandr. |
code |
string | Código de segmento Xandr. |
member_id |
Entero | Id. de miembro del segmento. Se requiere cuando se especifica código. |
expiration |
Entero | Expiración del segmento en minutos. Establézcalo en: - 0 expiración máxima (180 días).- -1 para la eliminación de segmentos.- -2 para la expiración predeterminada del miembro. |
timestamp |
largo | Segmentar el tiempo de activación en segundos desde la época. Especifica cuándo se convierte el segmento en "dinámico". Establezca en 0 para activar el segmento inmediatamente. |
value |
Entero | Valor de segmento. |
Instalación de la biblioteca de herramientas de AVRO
Biblioteca de Java
Curl -o http://archive.apache.org/dist/avro/avro-1.10.1/java/avro-tools-1.10.1.jar
Biblioteca de Python
python3 -m pip install avro
Descarga del esquema de Xandr Avro
Puede descargar el esquema Xandr Avro desde aquí.
Generación del archivo de audiencia de AVRO
Para obtener ejemplos de uso de las bibliotecas de Java y Python, consulte a continuación.
Ejemplo de Java
Create un archivo de audiencia
{"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}]}
Conversión del archivo de audiencia en AVRO
Ejecute el siguiente comando:
java -jar avro-tools-1.10.1.jar fromjson --codec deflate --schema-file xandr_schema.avsc sample.json > sample.avro
Dónde:
- xandr_schema.avsc = el archivo de esquema Xandr Avro proporcionado;
- sample.json = el archivo de audiencia;
- and sample.avro = archivo AVRO de salida
Ejemplo de Python
Nota:
- Nuestros ejemplos son para la biblioteca avro de Python y no deben confundirse con la biblioteca de Fast Avro.
La biblioteca de Avro de Python no usa nombres de tipo de unión uid. En su lugar, determina el tipo uid por coincidencia completa de nombres de campo.
{'uid': {'id': 'qweqeqweq', 'domain': 'idfa'}, 'segments': \[…\]}
La biblioteca de Fast Avro usa sugerencias para especificar el tipo exacto de uid similar a la biblioteca de Java.
{'uid': ('external_id', {'id':'exitd1', 'member_id': 914}), 'segments': \[{'expiration': 259200, 'id': 25815407}\]}
DataFileWriter.append()
acepta un tipo de diccionario de Python (dict), no un JSON.
Creación de un archivo de audiencia de AVRO
Script de ejemplo mediante la biblioteca de 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()