Suivez votre progression
Accueil Trailhead
Accueil Trailhead

Interrogation des Big Objects

Objectifs de formation

Une fois cette unité terminée, vous pourrez :
  • Utiliser SOQL standard pour interroger des Big Objects
  • Utiliser Async SOQL pour interroger des Big Objects
  • Citer les avantages et les inconvénients d’Async SOQL par rapport à SOQL standard.

SOQL et Async SOQL

Les Big Objects peuvent être interrogés avec SOQL ou Async SOQL. Async SOQL emploie un sous-ensemble des commandes SOQL. Et il a été conçu dès l’origine pour fonctionner avec les énormes volumes de données qui peuvent être conservés dans un Big Object. Comme les requête Async SOQL sont exécutées de manière asynchrone, pas d’inquiétude sur leur expiration. Les requêtes SOQL sont exécutées en arrière-plan, et peuvent être exécutées sur des données d’entités Salesforce, des objets standard, des objets personnalisés et des Big Objects. Async SOQL est implémenté par l’API REST Chatter.

D’une manière générale, mieux vaut utiliser Async SOQL plutôt que SOQL standard si vous avez de grandes quantités de données. Si vous avez seulement besoin de récupérer un jeu de données modeste dans un Big Object, ou si vous avez besoin des résultats immédiatement, utilisez SOQL standard. Async SOQL fonctionne également sur les objets personnalisés et standard de taille normale, mais la prise en charge de ces objets est en phase pilote.

Attention : les Big Objects personnalisés sont disponibles avec toutes les licences, mais Async SOQL n’est inclus qu’avec les licences offrant des capacités Big Object supérieures.

Utilisez SOQL standard si :
  • Vous voulez afficher les résultats dans l’interface utilisateur sans que l’utilisateur n’attende les résultats.
  • Vous voulez que les résultats soient renvoyés immédiatement pour être manipulés dans un bloc de code Apex.
  • Vous savez que la requête va renvoyer un faible volume de données.
Utilisez Async SOQL si :
  • Vous exécutez une requête sur des millions d’enregistrements.
  • Vous voulez être sûr que votre requête aboutisse.
  • Vous n’avez pas besoin de requêtes agrégées ou de filtrage en dehors de l’index.

Cas d'utilisation d’Async SOQL

En résumé, Async SOQL vous permet de prendre les millions d’enregistrements d’un Big Object et d’en extraire les données pertinentes pour en faire un jeu de données fonctionnel et gérable.

Comment utiliser SOQL pour interroger des Big Objects

Si vous êtes déjà habitué à utiliser SOQL, vous ne serez pas dépaysé. Il y a un certain nombre de choses à prendre en compte lorsque vous utiliserez SOQL standard avec des Big Objects, par rapport à son utilisation avec d’autres objets. Pour les requête SOQL sur des Big Objects, vous devez bâtir votre requête à partir du premier champ défini dans l’index, sans sauter de champ entre le premier et le dernier champ de la requête. Donc si par exemple votre index définit trois champs, vous ne pourrez pas créer une requête utilisant uniquement le premier et le troisième champ.

Vous pouvez utiliser les opérateurs de comparaison =, <, >, <=, >=, ou IN sur le dernier champ de votre requête. Pour les champs précédents, vous pouvez uniquement utiliser l’opérateur =. Les opérateurs !=, LIKE, NOT IN, EXCLUDES, et INCLUDES ne sont pas valides pour des requêtes impliquant des Big Objects.

La requête suivante présume que vous avez un Big Object dont l’index est défini par Account__c, Game_Platform__c, et Play_Date__c.

Cette requête spécifie les trois champs de l’index. Dans ce cas, le filtre sur Play_Date__c peut être un intervalle.
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
Cette requête ne fonctionne pas en raison d’un vide là où devrait se trouver Game_Platform__c.
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

Comment utiliser Async SOQL pour interroger des Big Objects

Il y a deux manières principales d’utiliser Async SOQL pour tirer un jeu de données manipulable d’un Big Object. La première est le filtrage. Vous pouvez utiliser le filtrage pour extraire un sous-ensemble de votre Big Object dans un objet personnalisé. Vous pourrez ensuite l’utiliser dans vos rapports, tableaux de bord et autres outils analytiques.

L’agrégation constitue l’autre manière de créer un jeu de données manipulable. Voici les fonctions d'agrégation prises en charge par Async SOQL : AVG(field), COUNT(field), COUNT_DISTINCT(field), SUM(field), MIN(field), MAX(field). Ces fonctions d'agrégation vous donnent un contrôle nettement plus fin sur les données extraites de votre Big Object.

Composer votre requête

Avec Async SOQL, nous interrogeons notre Big Object personnalisé Customer_Interaction__b, et nous dirigeons les résultats vers l’objet cible Customer_Interaction_Analysis__c. Nous extrayons de notre Big Object les informations sur le compte et les achats dans le jeu à une date spécifique pour les envoyer vers notre objet cible, que nous pourrons ensuite utiliser pour des rapports et des analyses.

Champs obligatoires
Nom Type Description
query Chaîne Spécifie les paramètres de la requête SOQL que vous voulez exécuter.
targetObject Chaîne Un objets standard, un objet personnalisé, un objet externe ou un Big Object dans lequel insérer le résultat de la requête.
targetFieldMap Map<String, String>

Définit le mappage entre les champs des résultats de la requête et les champs de l’objet cible.

Lorsque vous définissez le paramètre targetFieldMap, assurez-vous que le mappage des types des champs est cohérent. Si le champ source et le champ cible ne correspondent pas, les règles suivantes s’appliquent.
  • Tout champ source peut être mappé sur un champ cible texte.
  • Si le champ source et le champ cible sont tous les deux numériques, le champ cible doit disposer d’au moins autant de décimales que le champ source. Si ce n’est pas le cas, la requête échoue. Cela permet d’éviter les pertes de données au cours de la conversion.
  • Si un champ du résultat de requête est mappé plus d'une fois, même s'il est mappé vers différents champs de l’objet cible, seul le dernier mappage sera utilisé.
Exemple d’URI
https://yourInstance.salesforce.com/services/data/v41.0/async-queries/

Corps de la requête 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"
                     }
}
Dans cette requête, nous prenons les informations sur les comptes et les achats dans le jeu à une date précise, le 06/09/2017, dans notre Big Object sur les interactions client, et nous envoyons ces données vers un objet personnalisé que nous avons créé, Customer_Interaction_Analysis__c. Comme nous utilisons Async SOQL et non SOQL standard, nous pouvons filtrer sans nous préoccuper d’inclure les autres champs indexés. Ce nouvel objet personnalisé est rempli avec toutes les informations sur les comptes et les achats dans le jeu à cette date. De là, nous pouvons commencer des analyses pour essayer de comprendre précisément pourquoi notre jeu a autant de succès.

Corps de la réponse POST

Le corps de la réponse inclut le jobId de la requête, le statut de la requête, et tous les messages pertinents.
{ 
   "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"
                     } 
}

Suivi du statut de votre requête

Pour suivre le statut d’une requête, indiquez son jobID avec une requête HTTP GET. Le statut de la requête est renvoyé dans le champ status. Si vous ne précisez pas de jobID, nous renvoyons le statut de toutes vos requêtes. Les différents status possibles sont :
  • Canceled : la tâche a été annulée avant qu’elle ne puisse être exécutée.
  • Success : la tâche a été exécutée avec succès.
  • Failed : la tâche a échoué après avoir été soumise par le système ou parce qu’elle excédait les limites d’Async SOQL. Le champ message contient des détails sur les raisons de cet échec.
  • Running : la tâche est en cours d’exécution et l’organisation n’a dépassé aucune limite.
  • Scheduled : la nouvelle tâche a été créée et programmée, mais elle n’est pas encore exécutée.

Vous pouvez également annuler une tâche avec une requête HTTP DELETE en spécifiant son jobId. Annuler une requête terminée est sans effet.

N’oubliez pas qu’Async SOQL fonctionne de manière asynchrone. Cela signifie que l’exécution de votre requête peut prendre beaucoup de temps. Comme on l’a dit plus tôt, si votre temps est compté et que votre jeu de données est suffisamment petit, utilisez SOQL standard. Nous pourrions aussi prendre l’exemple d’un jeu fictif qui ne serait pas incroyablement populaire, mais ce ne serait aussi drôle.

Exemple d’URI
https://yourInstance.salesforce.com/services/data/v41.0/async-queries/08PD000000003kiT
Exemple de réponse GET
{
"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" } 
}
Cette réponse montre que notre requête a abouti avec succès. Génial ! Vite, filez préparer vos rapports et tableaux de bord !

Gestion des erreurs

Deux types d’erreurs peuvent se produire au cours de l’exécution d’une requête Async SOQL.
  • Erreur dans l’exécution de la requête
  • Une ou plusieurs erreurs lors de l'écriture des résultats dans le Big Object cible.

À titre d’exemple de problème d’exécution, citons la soumission d’une requête invalide ou le dépassement des limites d’Async SOQL. Il arrive aussi qu’une requête cause un problème avec l’infrastructure sous-jacente. Pour ces erreurs, le corps de la réponse contient un statut Failed. Les paramètres du message offrent plus d'informations sur la cause de l’échec.

D’autres fois, la requête est exécutée avec succès, mais rencontre une erreur lors de la tentative d’écriture des résultats dans l’objet cible. En raison du volume de données impliqué, il serait peu efficace de capturer toutes les erreurs. À la place, des sous-ensembles des erreurs générées sont capturés dans l’objet BackgroundOperationResult et conservés pendant sept jours. Vous pouvez interroger cet objet avec la requête Async SOQL jobId pour filtrer les erreurs relatives à une requête Async SOQL précise. Les informations sur les tâches Async SOQL sont conservées pendant un an.

Conclusion

Vous savez désormais toute ce qui est nécessaire pour utiliser des Big Objects personnalisés dans votre organisation. Vous êtes désormais le maître absolu de milliards d’enregistrements, muhahahaha !

Nous avons à peine effleuré les possibilités d’Async SOQL. N’oubliez pas de consulter la section Ressources pour découvrir toutes les commandes SOQL standard prises en charge par Async SOQL, ainsi que d’autres cas d'utilisation. Vous trouverez également des informations sur les champs optionnels que vous pouvez utiliser dans vos requêtes POST. Consultez également notre module Concepts de base de l’intégration des données analytiques pour y trouver des idées de configuration de l’analytique pour les données que vous extrairez de vos Big Objects. Imaginez tous les super graphiques et tableaux de bord que vous allez pouvoir créer avec toutes ces super données !