Empiece a realizar un seguimiento de su progreso
Inicio de Trailhead
Inicio de Trailhead

Consultar Big Objects

Objetivos de aprendizaje

Después de completar esta unidad, podrá:
  • Utilizar SOQL estándar para consultar big objects.
  • Utilizar SOQL asíncrono para consultar big objects.
  • Enumerar los pros y los contras del uso de SOQL asíncrono sobre SOQL estándar.

SOQL y SOQL asíncrono

Los big objects pueden consultarse empleando SOQL o SOQL asíncrono. SOQL asíncrono utiliza un subconjunto de comandos SOQL. Y fue diseñado desde sus comienzos para tratar el volumen de datos masivo que puede albergarse en un big object. Debido a que las consultas con SOQL asíncrono se ejecutan asincrónicamente, no tiene que preocuparse por que las consultas agoten el tiempo de espera. Las consultas con SOQL asíncrono se ejecutan en segundo plano, y pueden ejecutarse sobre datos de entidades de Salesforce, objetos estándar, objetos personalizados y big objects. SOQL asíncrono está implementado a través de la API de REST de Chatter.

Normalmente, es mejor utilizar SOQL asíncrono que SOQL estándar cuando está tratando grandes cantidades de datos. Si solo necesita un pequeño conjunto de datos procedente de un big object o si necesita los resultados inmediatamente, utilice SOQL estándar. SOQL asíncrono también funciona en objetos estándar y objetos que no son big objects, pero la admisión de estos objetos está en fase piloto.

Recuerde que aunque los big objects personalizados se incluyen con cada licencia, SOQL asíncrono solo se incluye con la licencia de capacidad adicional de big objects.

Utilice SOQL estándar cuando:
  • Desee mostrar los resultados en la interfaz de usuario sin que el usuario tenga que esperar los resultados.
  • Desee que los resultados se devuelvan de forma inmediata para su manipulación dentro de un bloque de código de Apex.
  • Usted sabe que la consulta devolverá una pequeña cantidad de datos.
Utilice SOQL asíncrono cuando:
  • Esté realizando una consulta sobre millones de registros.
  • Desea asegurarse de que su consulta se completa.
  • No necesita realizar consultas agregadas o filtrar fuera del índice.

Caso de uso de SOQL asíncrono.

En resumen, SOQL asíncrono le permite tomar los millones de registros de un big object y extraer los datos pertinentes en un conjunto de datos funcional y gestionable.

Cómo utilizar SOQL para consultar Big Objects

Si ya está familiarizado con el uso de SOQL, aquí se sentirá como en casa. Hay algunas cosas que tener en mente cuando se utiliza SOQL estándar con big objects que son diferentes cuando se utiliza SOQL con objetos que no son big objects. Para consultas SOQL con big objects, tiene que construir su consulta empezando desde el primer campo definido en el índice, sin omitir ningún campo entre el primer y el último campo de la consulta. Así que, por ejemplo, si su índice define tres campos, no puede crear una consulta empleando solo el primer y el último campo.

Puede utilizar estos operadores de comparación =, <, >, <=, >= o IN en el último campo de su consulta. Cualquier campo anterior en su consulta solo puede utilizar el operador =. Los operadores !=, LIKE, NOT IN, EXCLUDES e INCLUDES no son válidos en cualquier consulta que involucre big objects.

Las siguientes consultas asumen que tiene un big object en el que el índice está definido por Account__c, Game_Platform__c y Play_Date__c.

Esta consulta especifica los tres campos del índice. En este caso, el filtro en Play_Date__c puede ser un intervalo.
SELECT Account__c, Game_Platform__c, Play_Date__c
FROM Customer_Interaction__b
WHERE Account__c='001R000000302D3' AND Game_Platform__c='PC' AND Play_Date__c=2017-09-06T00:00:00Z
Esta consulta no funciona por un espacio en la consulta donde Game_Platform__c debería estar.
SELECT Account__c, Game_Platform__c, Play_Date__c
FROM Customer_Interaction__b
WHERE Account__c='001R000000302D3' AND Play_Date__c=2017-09-06T00:00:00Z

Cómo utilizar SOQL asíncrono para consultar Big Objects

Existen dos maneras de utilizar SOQL asíncrono para obtener un conjunto de datos manejable de un big object. Lo primero es utilizar el filtrado. Puede utilizar el filtrado para extraer un pequeño subconjunto de sus datos de big object en un objeto personalizados. Luego podrá utilizarlo en sus reportes, tableros u otra elegante herramienta de análisis.

La otra manera para crear un conjunto de datos manejable es a través de agregaciones en bruto. Estas son las funciones agregadas admitidas por SOQL asíncrono: AVG(campo), COUNT(campo), COUNT_DISTINCT(campo), SUM(campo), MIN(campo), MAX(campo). Estas funciones agregadas le dan un control mucho más fino sobre los datos que se extraen del big object.

Formación de su consulta

Empleando SOQL asíncrono, consultamos nuestro big object personalizado Customer_Interaction__b, y dirigimos los resultados a nuestro objeto de destino Customer_Interaction_Analysis__c. Extraemos la información de cuenta y de compra dentro del juego desde una fecha específica desde nuestro big object personalizado en nuestro objeto de destino, que podemos luego utilizar para reportes y analíticos.

Campos obligatorios
Nombre Tipo Descripción
query Cadena Especifica los parámetros de la consulta SOQL que desea ejecutar.
targetObject Cadena Un objeto estándar, objeto personalizado, objeto externo o big object en el que insertar los resultados de la consulta.
targetFieldMap Map<Cadena, Cadena>

Define cómo asignar los campos del resultado de la consulta con los campos del objeto de destino.

Cuando se define el parámetro targetFieldMap, asegúrese de que las asignaciones de tipos de campo son coherentes. Si los campos de origen y de destino no coinciden, se aplican estas consideraciones.
  • Cualquier campo de origen puede asignarse a un campo de texto de destino.
  • Si ambos campos de origen y destino son numéricos, el campo de destino debe tener el mismo número de decimales o más que el campo de origen. En caso contrario, la solicitud falla. Este comportamiento está pensado para garantizar que no se pierden datos en la conversión.
  • Si un campo del resultado de la consulta queda asignado más de una vez, incluso si se asigna a campos diferentes en el objeto de destino, solo se utiliza la última asignación.
URI de ejemplo
https://yourInstance.salesforce.com/services/data/v41.0/async-queries/

Cuerpo de solicitud POST

{ 
   "query": "SELECT Account__c, In_Game_Purchase__c FROM Customer_Interaction__b WHERE Play_Date__c=2017-09-06T00:00:00Z",
   
   "operation": "insert",
   
   "targetObject": "Customer_Interaction_Analysis__c", 
        
   "targetFieldMap": {"Account__c":"Account__c",
                      "In_Game_Purchase__c":"Purchase__c"
                      },
   "targetValueMap": {"$JOB_ID":"BackgroundOperationLookup__c",
                      "Copy fields from source to target":"BackgroundOperationDescription__c"
                     }
}
En esta consulta, estamos tomando la información de cuenta y compra dentro del juego de nuestro big object de interacción de clientes desde una fecha específica, 2017-09-06, y enviamos esos datos a un objeto personalizado que creamos, Customer_Interaction_Analysis__c. Como estamos utilizando SOQL asíncrono y no SOQL estándar, podemos filtrar sin preocuparnos de incluir los otros campos indexados. Este nuevo objeto personalizado está rellenado con toda la información de cuenta y compra dentro del juego desde esa fecha. Y desde allí podemos empezar a realizar algunos analíticos para intentar concretar por qué nuestro juego tiene un éxito tan abrumador.

Cuerpo de respuesta POST

El cuerpo de la respuesta incluye el jobId de la consulta, el estado de su consulta y cualquier mensaje pertinente.
{ 
   "jobId": "08PD000000003kiT", 
   
   "message": "",
    
   "query": "SELECT Account__c, In_Game_Purchase__c FROM Customer_Interaction__b WHERE Play_Date__c=2017-09-06T00:00:00Z",  
    
   "status": "New",
     
   "targetObject": "Customer_Interaction_Analysis__c", 
     
   "targetFieldMap": {"Account__c":"Account__c", 
                      "In_Game_Purchase__c":"Purchase__c"
                     },
   "targetValueMap": {"$JOB_ID":"BackgroundOperationLookup__c",
                      "Copy fields from source to target":"BackgroundOperationDescription__c"
                     } 
}

Seguimiento del estado de su consulta

Para realizar un seguimiento del estado de una consulta, especifique su jobID con una solicitud GET HTTP. El estado de la consulta se devuelve en el campo status. Si no especifica un jobID, devolvemos el estado de todas sus consultas. El status puede ser:
  • Canceled: El trabajo fue cancelado antes de poder ejecutarse.
  • Success: El trabajo se completó correctamente.
  • Failed: El trabajo falló después de que el sistema lo enviara o porque la solicitud superó los límites de SOQL asíncrono. El campo message proporciona detalles sobre el motivo del fallo.
  • Running: El trabajo se está ejecutando correctamente, y la organización no está superando ningún límite.
  • Scheduled: El nuevo trabajo ha sido creado y programado, pero no está ejecutándose aún.

También puede cancelar una consulta empleando una solicitud DELETE HTTP especificando su jobId. La cancelación de una consulta completada no tiene efecto.

Recuerde, SOQL asíncrono se realiza asincrónicamente. Eso significa que su consulta puede tardar un tiempo en completarse. Como mencionamos antes, si el tiempo es importante y si su conjunto de datos es lo suficientemente pequeño, utilice SOQL estándar. También podemos inventarnos un juego de ficción menos popular en estos ejemplo pero, ¿qué hay de divertido en ello?

URI de ejemplo
https://yourInstance.salesforce.com/services/data/v41.0/async-queries/08PD000000003kiT
Respuesta GET de ejemplo
{
"jobId": "08PD000000003kiT",
"message": "",
"query": "SELECT Account__c, In_Game_Purchase__c FROM Customer_Interaction__b WHERE Play_Date__c=2017-09-06T00:00:00Z",  
"status": "Success",
"targetObject": "Customer_Interaction_Analysis__c",
"targetFieldMap": {"Account__c":"Account__c",
"In_Game_Purchase__c":"Purchase__c" } 
}
Esta respuesta muestra que nuestra consulta se completó correctamente. ¡Uaaau! ¡Es el momento de dejar listos sus reportes y tableros!

Control de errores

Pueden producirse dos tipos de errores diferentes durante la ejecución de una consulta SOQL asíncrona.
  • Un error en la ejecución de la consulta
  • Uno o más errores al escribir los resultados en el big object de destino

El envío de una consulta no válida y superar uno de los límites de SOQL asíncrono son ejemplos de problemas de ejecución. Otro ejemplo es cuando una consulta provoca un problema con la infraestructura subyacente. Para estos errores, el cuerpo de la respuesta incluye un estado Failed. El parámetro de message proporciona más información sobre el motivo del fallo.

Otras veces, la consulta se ejecuta correctamente pero encuentra un error al intentar escribir los resultados en el objeto de destino. Debido al volumen de los datos involucrados, la captura de todos los errores es ineficaz. En su lugar, se capturan subconjuntos de los errores generados en el objeto BackgroundOperationResult y se retienen siete días. Puede consultar este objeto con la consulta jobId de SOQL asíncrono para filtrar los errores de la consulta con SOQL asíncrono. La información de los trabajos con SOQL asíncrono se retiene un año.

Finalización

Ahora sabe todo lo que es necesario para utilizar big objects personalizados en su propia organización. Tiene miles de millones de registros bajo su mando.

Solo arañamos la superficie de SOQL asíncrono. Asegúrese de consultar la sección de recursos para ver todos los comandos SOQL estándar admitidos por SOQL asíncrono y más ejemplos de casos de uso. También encontrará información sobre los campos opcionales que puede utilizar en sus solicitudes POST. Consulte también nuestro módulo Fundamentos de integración de datos de Analytics para obtener ideas sobre cómo configurar analíticos para los datos que extrae de sus big objects. ¡Piense en todos los elegantes gráficos y tableros que puede hacer con todos esos datos!