Paginación de informes
Paginación de informes es una característica que permite a los usuarios de API recuperar informes de ejecución prolongada que, de lo contrario, agotarían el tiempo de espera antes de completar el procesamiento. Para obtener más información sobre los límites de uso de la API de informes, consulte la sección Limitación de informes de la página Report Service .
Crear un informe más granular con menos dimensiones y métricas o extraer un informe en un período de tiempo más corto suele ser la mejor opción para asegurarse de que un informe no agota el tiempo de espera. Para obtener sugerencias sobre cómo mantener los informes ajustados y centrados, consulte la página Procedimientos recomendados de API .
Sin embargo, en algunos casos no resulta práctico cambiar las dimensiones, las métricas o el período de tiempo. La paginación de informes puede ayudar a salvar la brecha y le permite recuperar un informe de ejecución prolongada en fragmentos más pequeños.
Campos obligatorios de paginación de informes
La característica requiere que incluya tres campos en el cuerpo de la solicitud JSON (para obtener más información, consulte los ejemplos):
Campo | Tipo | Description |
---|---|---|
"offset" |
Entero | Número de fila desde el que debe comenzar este informe. |
"num_elements" |
Entero | Número de filas que este informe debe devolver en total. |
"orders" |
matriz de cadenas | El orden de las dimensiones del informe. |
Implementación de la paginación de informes
Si ha usado el sistema de paginación de la API para recuperar los bjects de configuración de la API (como se describe en la sección Paginación de semántica de API), esta característica debería ser familiar.
El "num_elements"
campo se usa para especificar cuántas filas hay en cada "página" del informe y no tiene ningún valor máximo, pero debe ajustarse a un número que permita que el informe se procese sin agotar el tiempo de espera.
El "offset"
campo debe comenzar en 0 y debe incrementarse en múltiplos de "num_elements"
hasta que se hayan recuperado todas las filas del informe. Cuando se recupera el informe, si hay n-1
o menos filas en el informe (donde n
es igual al valor de "num_elements"
), ha solicitado todas las filas disponibles en el informe. Si hay n
filas, debe solicitar otro informe paginado.
Advertencia
El "orders"
campo debe incluir una ordenación para todas las dimensiones incluidas en el informe. Si envía una solicitud para un informe paginado sin el "orders"
campo o sin todas las dimensiones del informe, es posible que falten filas de datos o que se dupliquen filas de datos entre las solicitudes paginadas del informe.
¿Cuántas filas debe recuperar a la vez?
No hay ningún valor máximo en el "num_elements"
campo, por lo que querrá ajustar este número con respecto al tiempo que se tarda en ejecutar un informe en el asiento de miembro específico que está recuperando. La mayoría de los informes grandes se pueden recuperar de forma segura con el "num_elements"
campo establecido en un valor entre filas de 1 MM y filas de 2 MM, pero debe probar ese valor para su propio informe.
Ejemplos
Paso 1: Create json del informe paginado
Este informe concreto constará de dos solicitudes de informe: report_page_1.json
y report_page_2.json
.
Nota:
Las solicitudes son idénticas excepto para el "offset"
campo y que el "orders"
campo es necesario.
$ cat report_page_1.json
{
"report": {
"report_type":"network_site_domain_performance",
"start_date" : "2014-03-27",
"end_date" : "2014-03-28",
"groups":[
"advertiser_id"
],
"columns":[
"day",
"buyer_member_id",
"advertiser_id",
"line_item_id",
"campaign_id",
"top_level_category_name",
"top_level_category_id",
"second_level_category_name",
"second_level_category_id",
"deal_id",
"deal_name",
"deal_code",
"site_domain",
"imps",
"clicks",
"post_click_convs",
"post_view_convs",
"media_cost",
"booked_revenue"
],
"row_per":[
"day",
"buyer_member_id",
"advertiser_id",
"line_item_id",
"campaign_id",
"top_level_category_id",
"second_level_category_id",
"deal_id",
"site_domain"
],
"orders": [
"day",
"buyer_member_id",
"advertiser_id",
"line_item_id",
"campaign_id",
"top_level_category_id",
"second_level_category_id",
"deal_id",
"site_domain"
],
"offset": 0,
"num_elements": 2000000
}
}
$ cat report_page_2.json
{
"report":{
"report_type":"network_site_domain_performance",
"start_date" : "2014-03-27",
"end_date" : "2014-03-28",
"groups":[
"advertiser_id"
],
"columns":[
"day",
"buyer_member_id",
"advertiser_id",
"line_item_id",
"campaign_id",
"top_level_category_name",
"top_level_category_id",
"second_level_category_name",
"second_level_category_id",
"deal_id",
"deal_name",
"deal_code",
"site_domain",
"imps",
"clicks",
"post_click_convs",
"post_view_convs",
"media_cost",
"booked_revenue"
],
"row_per":[
"day",
"buyer_member_id",
"advertiser_id",
"line_item_id",
"campaign_id",
"top_level_category_id",
"second_level_category_id",
"deal_id",
"site_domain"
],
"orders": [
"day",
"buyer_member_id",
"advertiser_id",
"line_item_id",
"campaign_id",
"top_level_category_id",
"second_level_category_id",
"deal_id",
"site_domain"
],
"offset": 2000000,
"num_elements": 2000000
}
}
Paso 2: Enviar las solicitudes
$ curl -b cookie -c cookie -X POST -s -d @report_page_1.json "https://api.appnexus.com/report"
{
"response": {
"status": "OK",
"report_id": "6b7a44dc1b3f8bc47cd4d8sd32e4f841c",
"existing": true,
"dbg_info": {
...
}
}
}
$ curl -b cookie -c cookie -X POST -s -d @report_page_2.json "https://api.appnexus.com/report"
{
"response": {
"status": "OK",
"report_id": "700367274ae2c84b337436a4absdd835",
"existing": true,
"dbg_info": {
...
}
}
}
Paso 3: Comprobar que ambos informes se procesan
$ curl -b cookie -c cookie -s "https://api.appnexus.com/report?id=6b7a44dc1b3f8bc47cd4d8sd32e4f841c"
{
"response": {
"status": "OK",
"report": {
"name": null,
"created_on": "2014-04-10 23:01:36",
"cache_hit": false,
"fact_cache_hit": false,
"fact_cache_error": "did not find any cache table for 1,2,30,31,66,32,34,36,6,4,5,100,110",
"json_request": "{\"report\":{\"report_type\":\"network_site_domain_performance\",\"start_date\":\"2014-03-27\",\"end_date\":\"2014-03-28\",\"groups\":[\"advertiser_id\"],\"columns\":[\"day\",\"buyer_member_id\",\"advertiser_id\",\"line_item_id\",\"campaign_id\",\"top_level_category_name\",\"top_level_category_id\",\"second_level_category_name\",\"second_level_category_id\",\"deal_id\",\"deal_name\",\"deal_code\",\"site_domain\",\"imps\",\"clicks\",\"post_click_convs\",\"post_view_convs\",\"media_cost\",\"booked_revenue\"],\"row_per\":[\"day\",\"buyer_member_id\",\"advertiser_id\",\"line_item_id\",\"campaign_id\",\"top_level_category_id\",\"second_level_category_id\",\"deal_id\",\"site_domain\"],\"orders\":[\"day\",\"buyer_member_id\",\"advertiser_id\",\"line_item_id\",\"campaign_id\",\"top_level_category_id\",\"second_level_category_id\",\"deal_id\",\"site_domain\"],\"offset\":0,\"num_elements\":2000000,\"filters\":[{\"buyer_member_id\":958}]}}",
"header_info": "Report ID:,6b7a44dc1b3f8bc47cd4d8e32e4f841c\r\nRun at:,2014-04-10 23:01:36\r\nStart date:,2014-03-27 00:00:00\r\nEnd date:,2014-03-28 00:00:00\r\nTimezone:,\r\nUser:,Uri Bushey (123456)\r\n",
"row_count": "2000000",
"report_size": "248161427",
"url": "report-download?id=6b7a44dc1b3f8bc47cd4d8e32e4f841c"
},
"execution_status": "ready",
"dbg_info": {
...
}
}
}
$ curl -b cookie -c cookie -s "https://api.appnexus.com/report?id=700367274ae2c84b337436a4absdd835"
{
"response": {
"status": "OK",
"report": {
"name": null,
"created_on": "2014-04-10 23:01:41",
"cache_hit": false,
"fact_cache_hit": false,
"fact_cache_error": "did not find any cache table for 1,2,30,31,66,32,34,36,6,4,5,100,110",
"json_request": "{\"report\":{\"report_type\":\"network_site_domain_performance\",\"start_date\":\"2014-03-27\",\"end_date\":\"2014-03-28\",\"groups\":[\"advertiser_id\"],\"columns\":[\"day\",\"buyer_member_id\",\"advertiser_id\",\"line_item_id\",\"campaign_id\",\"top_level_category_name\",\"top_level_category_id\",\"second_level_category_name\",\"second_level_category_id\",\"deal_id\",\"deal_name\",\"deal_code\",\"site_domain\",\"imps\",\"clicks\",\"post_click_convs\",\"post_view_convs\",\"media_cost\",\"booked_revenue\"],\"row_per\":[\"day\",\"buyer_member_id\",\"advertiser_id\",\"line_item_id\",\"campaign_id\",\"top_level_category_id\",\"second_level_category_id\",\"deal_id\",\"site_domain\"],\"orders\":[\"day\",\"buyer_member_id\",\"advertiser_id\",\"line_item_id\",\"campaign_id\",\"top_level_category_id\",\"second_level_category_id\",\"deal_id\",\"site_domain\"],\"offset\":2000000,\"num_elements\":2000000,\"filters\":[{\"buyer_member_id\":958}]}}",
"header_info": "Report ID:,700367274ae2c84b337436a4ab80b835\r\nRun at:,2014-04-10 23:01:41\r\nStart date:,2014-03-27 00:00:00\r\nEnd date:,2014-03-28 00:00:00\r\nTimezone:,\r\nUser:,Uri Bushey (12345)\r\n",
"row_count": "1834708",
"report_size": "226384504",
"url": "report-download?id=700367274ae2c84b337436a4ab80b835"
},
"execution_status": "ready",
"dbg_info": {
...
}
}
}
Paso 4: Descargar los informes finalizados
curl -b cookie -c cookie -s "https://api.appnexus.com/report-download?id=6b7a44dc1b3f8bc47cd4d8sd32e4f841c' > report_page_1.csv
curl -b cookie -c cookie -s "https://api.appnexus.com/report-download?id=700367274ae2c84b337436a4absdd835' > report_page_2.csv
Paso 5: Comprobar que el recuento de filas coincide con el número total de filas
$ wc -l report_page_1.csv
2000000 report_page_1.csv
$ wc -l report_page_2.csv
1834708 report_page_2.csv