Ce document fournit des réponses aux questions fréquentes sur Query Service et fournit une liste des codes d’erreur courants lors de l’utilisation de Query Service. Pour toute question ou dépannage concernant les autres services d’Adobe Experience Platform, consultez le guide de dépannage d’Experience Platform.
La liste suivante de réponses aux questions fréquentes est divisée en plusieurs catégories :
Cette section contient des informations sur les performances, les limites et les processus.
+++Réponse Non. La désactivation de la fonction de saisie semi-automatique n’est actuellement pas prise en charge par l’éditeur.
+++
+++Réponse La fonction de saisie automatique est une cause potentielle. La fonction traite certaines commandes de métadonnées qui peuvent parfois ralentir l’éditeur lors de la modification des requêtes.
+++
+++Répondez Oui, vous pouvez visualiser et interagir avec tous les services d’API Adobe à l’aide de Postman (une application tierce gratuite). Regardez la Guide de configuration de Postman pour obtenir des instructions détaillées sur la configuration d’un projet dans la console Adobe Developer et l’acquisition de toutes les informations d’identification nécessaires à l’utilisation avec Postman. Consultez la documentation officielle pour conseils sur le démarrage, l’exécution et le partage de collections Postman.
+++
+++Réponse Oui, Query Service applique en interne une limite de 50 000 lignes, sauf si une limite explicite est spécifiée en externe. Reportez-vous aux conseils relatifs à exécution de requête interactive pour plus d’informations.
+++
+++Réponse Non. La taille des données n’est pas limitée, mais le délai d’expiration de la requête est limité à 10 minutes à partir d’une session interactive. Si la requête est exécutée en tant que CTAS par lot, un délai d’expiration de 10 minutes n’est pas applicable. Reportez-vous aux conseils relatifs à exécution de requête interactive pour plus d’informations.
+++
SELECT * FROM customers LIMIT 0;
+++Réponse Non. Query Service dispose d’une fonctionnalité de mise à l’échelle automatique qui garantit que les requêtes simultanées n’ont aucun impact perceptible sur les performances du service.
+++
Consultez la documentation pour obtenir des conseils complets sur Comment travailler avec des structures de données imbriquées à l’aide de Query Editor ou d’un client tiers.
+++Réponse Pour améliorer les performances des requêtes sur les jeux de données contenant des tableaux, vous devez faire exploser le tableau as a Requête CTAS au moment de l’exécution, puis explorez-le pour en savoir plus sur les opportunités d’amélioration de son temps de traitement.
+++
Il peut y avoir plusieurs raisons pour qu’une requête soit bloquée pendant le traitement. Pour déterminer la cause exacte, une analyse approfondie au cas par cas est nécessaire. Contacter l’assistance clientèle d’Adobe à ce processus.
Liste complète des numéros de téléphone de l’assistance clientèle d’Adobe est disponible sur la page d’aide d’Adobe. Vous pouvez également trouver de l’aide en ligne en procédant comme suit :
Une bannière déroulante s’affiche avec une Aide et support . Sélectionner Contactez-nous pour ouvrir l’assistant virtuel de l’assistance clientèle Adobe ou sélectionnez Support aux entreprises pour obtenir une aide dédiée aux grandes entreprises.
Voir documentation bloquée anonyme pour plus d’informations.
+++Répondez Oui, vous pouvez modéliser des requêtes à l’aide d’instructions préparées. Les instructions préparées peuvent optimiser les performances et éviter de réanalyser rapidement une requête. Voir documentation sur les instructions préparées pour plus d’informations.
+++
Utilisez la commande GET pour récupérer plusieurs requêtes. Vous trouverez des informations sur la manière d’effectuer un appel à l’API dans la section exemple de documentation sur les appels API.
À partir de la réponse, identifiez la requête sur laquelle vous souhaitez enquêter et effectuez une autre requête de GET à l’aide de id
. Vous trouverez des instructions complètes dans la section récupération d’une requête par documentation d’identification.
Une réponse réussie renvoie un état HTTP 200 et contient le paramètre errors
tableau. La réponse a été raccourcie pour plus de concision.
{
"isInsertInto": false,
"request": {
"dbName": "prod:all",
"sql": "SELECT *\nFROM\n accounts\nLIMIT 10\n"
},
"clientId": "8c2455819a624534bb665c43c3759877",
"state": "SUCCESS",
"rowCount": 0,
"errors": [{
'code': '58000',
'message': 'Batch query execution gets : [failed reason ErrorCode: 58000 Batch query execution gets : [Analysis error encountered. Reason: [sessionId: f055dc73-1fbd-4c9c-8645-efa609da0a7b Function [varchar] not defined.]]]',
'errorType': 'USER_ERROR'
}],
"isCTAS": false,
"version": 1,
"id": "343388b0-e0dd-4227-a75b-7fc945ef408a",
}
Le Documentation de référence de l’API Query Service fournit plus d’informations sur tous les points de terminaison disponibles.
L’exemple suivant illustre l’utilisation d’une syntaxe CTAS et d’un type de données struct :
CREATE TABLE table_name WITH (SCHEMA='schema_name')
AS SELECT '1' as _id,
STRUCT
('2021-02-17T15:39:29.0Z' AS taskActualCompletionDate,
'2020-09-09T21:21:16.0Z' AS taskActualStartDate,
'Consulting' AS taskdescription,
'5f6527c10011e09b89666c52d9a8c564' AS taskguide,
'Stakeholder Consulting Engagement' AS taskname,
'2020-09-09T15:00:00.0Z' AS taskPlannedStartDate,
'2021-02-15T11:00:00.0Z' AS taskPlannedCompletionDate
) AS _workfront ;
+++Répondez Au SNAPSHOT
peut être utilisée pour lire de manière incrémentielle les données d’une table en fonction d’un ID d’instantané. Idéal pour l’utilisation avec la variable charge incrémentale modèle qui traite uniquement les informations du jeu de données qui a été créé ou modifié depuis la dernière exécution du chargement. Par conséquent, il augmente l’efficacité du traitement et peut être utilisé avec le traitement par flux et par lot des données.
+++
La requête inclut des données historiques, tandis que l’interface utilisateur affiche uniquement les données de profil actuelles.
WHERE
jusqu’à ce que vous commenciez à voir certaines données.Vous pouvez également confirmer que votre jeu de données contient des données à l’aide d’une petite requête telle que :
SELECT count(1) FROM myTableName
+++Réponse Cette fonctionnalité est actuellement en cours de réalisation. Des informations détaillées seront disponibles dans notes de mise à jour et par le biais des boîtes de dialogue de l’interface utilisateur de Platform une fois que la fonctionnalité est prête à être publiée.
+++
+++Réponse Query Service fournit plusieurs fonctions d’assistance SQL intégrées pour étendre les fonctionnalités SQL. Consultez le document pour obtenir la liste complète des Fonctions SQL prises en charge par Query Service.
+++
Vous devez également consulter la documentation pour obtenir des conseils sur la manière d’effectuer requêtes planifiées dans l’interface utilisateur et l’API.
Voici une liste des considérations à prendre en compte pour les requêtes planifiées lors de l’utilisation de la variable Query Editor. Elles ne s’appliquent pas au Query Service API :
Vous pouvez uniquement ajouter un planning à une requête qui a déjà été créée, enregistrée et exécutée.
You cannot ajoutez un planning à une requête paramétrée.
Requêtes planifiées cannot contiennent un bloc anonyme.
Vous pouvez uniquement planifier one modèle de requête à l’aide de l’interface utilisateur. Si vous souhaitez ajouter des plannings supplémentaires à un modèle de requête, vous devez utiliser l’API . Si une planification a déjà été ajoutée à l’aide de l’API, vous ne pourrez pas ajouter d’autres planifications à l’aide de l’interface utilisateur.
+++La réponse "Limite de session atteinte" signifie que le nombre maximal de sessions Query Service autorisées pour votre organisation a été atteint. Connectez-vous à l’administrateur Adobe Experience Platform de votre entreprise.
+++
+++Réponse Query Service ne supprime jamais l’historique des requêtes. Cela signifie que toute requête référençant un jeu de données supprimé renvoie "Aucun jeu de données valide".
+++
SELECT * FROM <table> WHERE 1=0
Vous pouvez par exemple créer un tableau temporaire :
CREATE temp TABLE temp_dataset AS
SELECT *
FROM actual_dataset
WHERE 1 = 0;
Vous pouvez ensuite utiliser le tableau temporaire comme suit :
INSERT INTO temp_dataset
SELECT a._company AS _company,
a._id AS _id,
a.timestamp AS timestamp
FROM actual_dataset a
WHERE timestamp >= TO_TIMESTAMP('2021-01-21 12:00:00')
AND timestamp < TO_TIMESTAMP('2021-01-21 13:00:00')
LIMIT 100;
2021-12-22T19:52:05Z
Query Service prend en charge les fonctions SQL intégrées pour convertir un horodatage donné au format UTC et à partir de ce format. Les deux to_utc_timestamp()
et le from_utc_timestamp()
Les méthodes prennent deux paramètres : horodatage et fuseau horaire.
Paramètre | Description |
---|---|
Horodatage | L’horodatage peut être écrit au format UTC ou simple. {year-month-day} format. Si aucune heure n’est fournie, la valeur par défaut est minuit le matin du jour donné. |
Fuseau horaire | Le fuseau horaire est écrit dans une {continent/city}) format. Il doit s’agir de l’un des codes de fuseau horaire reconnus, comme indiqué dans la variable base de données TZ du domaine public. |
Le to_utc_timestamp()
interprète les paramètres donnés et les convertit à l’horodatage de votre fuseau horaire local. au format UTC. Par exemple, le fuseau horaire à Séoul, en Corée du Sud, est UTC/GMT +9 heures. En fournissant un horodatage date seule, la méthode utilise une valeur par défaut de minuit le matin. L’horodatage et le fuseau horaire sont convertis au format UTC de l’heure de cette région en horodatage UTC de votre région locale.
SELECT to_utc_timestamp('2021-08-31', 'Asia/Seoul');
La requête renvoie un horodatage à l’heure locale de l’utilisateur. Dans ce cas, la veille à 15h00 comme à Séoul, il y a neuf heures d'avance.
2021-08-30 15:00:00
Autre exemple : si l’horodatage donné a été 2021-07-14 12:40:00.0
pour le Asia/Seoul
fuseau horaire, l’horodatage UTC renvoyé serait 2021-07-14 03:40:00.0
La sortie de console fournie dans l’interface utilisateur de Query Service est plus lisible :
8/30/2021, 3:00 PM
Le from_utc_timestamp()
interprète les paramètres donnés. à partir de l’horodatage de votre fuseau horaire local et fournit l’horodatage équivalent de la région souhaitée au format UTC. Dans l’exemple ci-dessous, l’heure est 14 h 40 dans le fuseau horaire local de l’utilisateur. Le fuseau horaire de Séoul passé en tant que variable est neuf heures avant le fuseau horaire local.
SELECT from_utc_timestamp('2021-08-31 14:40:00.0', 'Asia/Seoul');
La requête renvoie un horodatage au format UTC pour le fuseau horaire transmis en tant que paramètre. Le résultat est neuf heures avant le fuseau horaire qui a exécuté la requête.
8/31/2021, 11:40 PM
Chaîne de date must être au format yyyy-mm-ddTHH24:MM:SS
.
Vous trouverez ci-dessous un exemple d’utilisation du filtre d’horodatage :
SELECT a._company AS _company,
a._id AS _id,
a.timestamp AS timestamp
FROM dataset a
WHERE timestamp >= To_timestamp('2021-01-21 12:00:00')
AND timestamp < To_timestamp('2021-01-21 13:00:00')
CAST
pour convertir mes horodatages dans les requêtes SQL ?CAST
pour convertir un horodatage, vous devez inclure la date et temps.Par exemple, l’absence du composant temporel, comme illustré ci-dessous, entraînera une erreur :
SELECT * FROM ABC
WHERE timestamp = CAST('07-29-2021' AS timestamp)
L’utilisation correcte de la variable CAST
est illustré ci-dessous :
SELECT * FROM ABC
WHERE timestamp = CAST('07-29-2021 00:00:00' AS timestamp)
+++Réponse Vous ne pouvez pas utiliser de caractères génériques pour obtenir toutes les données de vos lignes, car Query Service doit être traité comme un columnar-store plutôt qu’un système de magasin traditionnel basé sur les lignes.
+++
NOT IN
dans ma requête SQL ?NOT IN
est souvent utilisé pour récupérer les lignes qui ne figurent pas dans une autre table ou instruction SQL. Cet opérateur peut ralentir les performances et renvoyer des résultats inattendus si les colonnes comparées acceptent NOT NULL
, ou vous avez un grand nombre d’enregistrements.Au lieu d’utiliser NOT IN
, vous pouvez utiliser NOT EXISTS
ou LEFT OUTER JOIN
.
Par exemple, si les tables suivantes sont créées :
CREATE TABLE T1 (ID INT)
CREATE TABLE T2 (ID INT)
INSERT INTO T1 VALUES (1)
INSERT INTO T1 VALUES (2)
INSERT INTO T1 VALUES (3)
INSERT INTO T2 VALUES (1)
INSERT INTO T2 VALUES (2)
Si vous utilisez la variable NOT EXISTS
, vous pouvez répliquer à l’aide de l’opérateur NOT IN
en utilisant la requête suivante :
SELECT ID FROM T1
WHERE NOT EXISTS
(SELECT ID FROM T2 WHERE T1.ID = T2.ID)
Si vous utilisez la méthode LEFT OUTER JOIN
, vous pouvez répliquer à l’aide de l’opérateur NOT IN
en utilisant la requête suivante :
SELECT T1.ID FROM T1
LEFT OUTER JOIN T2 ON T1.ID = T2.ID
WHERE T2.ID IS NULL
Cette section fournit des informations sur l'export des données et des limites.
Il existe deux manières d’enregistrer les résultats d’une requête lors de l’utilisation d’un client PSQL. Vous pouvez utiliser la variable COPY TO
ou créez une instruction au format suivant :
SELECT column1, column2
FROM <table_name>
\g <table_name>.out
Conseils sur l’utilisation de la variable COPY TO
command se trouve dans la documentation de référence sur la syntaxe SQL.
+++Réponse Non. Actuellement, aucune fonctionnalité n’est disponible pour l’extraction des données ingérées.
+++
Cette section contient des informations sur l’utilisation d’outils tiers tels que PSQL et Power BI.
+++Réponse Oui, vous pouvez connecter plusieurs clients de bureau tiers à Query Service. Consultez la documentation pour détails complets sur les clients disponibles et comment les connecter à Query Service.
+++
+++Réponse Oui, les clients de bureau tiers peuvent être connectés à Query Service par le biais d’une configuration unique d’informations d’identification qui n’expirent pas. Les informations d’identification non arrivant à expiration peuvent être générées par un utilisateur autorisé et les recevront dans un fichier JSON téléchargé sur son ordinateur local. Complet conseils sur la création et le téléchargement d’informations d’identification non expirantes se trouve dans la documentation .
+++
+++Répondre Tout éditeur SQL tiers qui est PSQL ou Postgres Il est possible de se connecter à l’éditeur de Query Service en conformité avec le client. Consultez la documentation pour connexion des clients à Query Service pour obtenir une liste des instructions disponibles.
+++
+++Répondez Oui, vous pouvez vous connecter à Query Service. Consultez la documentation pour instructions sur la connexion de l’appli de bureau Power BI à Query Service.
+++
Si vous souhaitez améliorer les temps de réponse de vos tableaux de bord, vous devez mettre en oeuvre un serveur Business Intelligence (BI) en tant que couche de mise en cache entre Query Service et les outils de BI. En règle générale, la plupart des outils de BI disposent d’une offre supplémentaire pour un serveur.
L’ajout de la couche de serveur de cache a pour but de mettre en cache les données de Query Service et d’en utiliser de même pour les tableaux de bord afin d’accélérer la réponse. Cela est possible, car les résultats des requêtes exécutées seraient mis en cache dans le serveur BI chaque jour. Le serveur de mise en cache diffuse ensuite ces résultats à tout utilisateur disposant de la même requête afin de réduire la latence. Reportez-vous à la documentation de l’utilitaire ou de l’outil tiers que vous utilisez pour clarifier cette configuration.
+++Réponse Non, la connectivité pgAdmin n’est pas prise en charge. A liste des clients tiers disponibles et instructions sur la manière de les connecter à Query Service se trouve dans la documentation .
+++
Le tableau suivant fournit les codes d’erreur PSQL et leurs causes possibles.
Code erreur | État de la connexion | Description | Cause possible |
---|---|---|---|
08P01 | S/O | Type de message non pris en charge | Type de message non pris en charge |
28P01 | Démarrage - authentification | Mot de passe non valide | Jeton d’authentification non valide |
28000 | Démarrage - authentification | Type d’autorisation non valide | Type d’autorisation non valide. Doit être AuthenticationCleartextPassword . |
42P12 | Démarrage - authentification | Aucune table trouvée | Aucune table n’a été trouvée pour utilisation |
42601 | Requête | Erreur de syntaxe | Erreur de syntaxe ou de commande non valide |
42P01 | Requête | Table introuvable | La table spécifiée dans la requête est introuvable |
42P07 | Requête | La table existe | Il existe déjà une table portant le même nom (CREATE TABLE) |
53400 | Requête | LIMIT dépasse la valeur maximale | L’utilisateur a spécifié une clause LIMIT supérieure à 100 000 |
53400 | Requête | Délai d’expiration de la déclaration | La déclaration soumise en direct a duré plus de 10 minutes au maximum |
58000 | Requête | Erreur système | Échec du système interne |
0A000 | Requête/Commande | Non pris en charge | La fonctionnalité de la requête/commande n’est pas prise en charge |
42501 | Requête DROP TABLE | Table de dépôt non créée par Query Service | La table en cours de suppression n’a pas été créée par Query Service à l’aide de l’événement CREATE TABLE statement |
42501 | Requête DROP TABLE | Tableau non créé par l’utilisateur authentifié | La table en cours de suppression n’a pas été créée par l’utilisateur actuellement connecté. |
42P01 | Requête DROP TABLE | Table introuvable | La table spécifiée dans la requête est introuvable. |
42P12 | Requête DROP TABLE | Aucune table trouvée pour dbName : veuillez consulter la section dbName |
Aucune table n’a été trouvée dans la base de données actuelle |
history_meta()
est utilisée pour accéder à un instantané d’un jeu de données. Auparavant, si vous deviez exécuter une requête sur un jeu de données vide dans Azure Data Lake Storage (ADLS), vous receviez un code d’erreur 58000 indiquant que le jeu de données n’existe pas. Un exemple de l’ancienne erreur système s’affiche ci-dessous.ErrorCode: 58000 Internal System Error [Invalid table your_table_name. historyMeta can be used on datalake tables only.]
Cette erreur s’est produite car il n’y avait aucune valeur renvoyée pour la requête. Ce comportement a maintenant été corrigé afin de renvoyer le message suivant :
Query complete in {timeframe}. 0 rows returned.
Le tableau suivant fournit des codes d’erreur HTTP et leurs causes possibles.
Code d’état HTTP | Description | Causes possibles |
---|---|---|
400 | Mauvaise requête | Requête malformée ou illégale |
401 | Échec de l’authentification | Jeton d’authentification non valide |
500 | Erreur interne du serveur | Échec du système interne |