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.
Non. La désactivation de la fonction de saisie semi-automatique n’est actuellement pas prise en charge par l’éditeur.
C’est peut être dû à la fonction de saisie automatique. La fonction traite certaines commandes de métadonnées qui peuvent parfois ralentir l’éditeur lors de la modification des requêtes.
Oui, vous pouvez visualiser tous les services API d’Adobe et interagir avec eux à l’aide de Postman (une application tierce gratuite). Regardez le Postman guide de configuration pour obtenir des instructions détaillées sur la configuration d’un projet dans l’Adobe Developer Console et l’acquisition de toutes les informations d’identification nécessaires à l’utilisation avec Postman. Consultez la documentation officielle pour obtenir des conseils sur le démarrage, l’exécution et le partage de collections Postman .
Oui, Query Service applique en interne une limite de 50 000 lignes, sauf si une limite explicite est spécifiée en externe. Pour plus d’informations, consultez les conseils relatifs à l’exécution de requêtes interactives.
Dans les requêtes par lots, la mise à jour d’une ligne dans le jeu de données n’est pas prise en charge.
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 dans une session interactive. Si la requête est exécutée en tant que CTAS par lot, le délai d’expiration de 10 minutes ne s’applique pas. Pour plus d’informations, consultez les conseils relatifs à l’exécution de requêtes interactives.
Pour contourner la limite du nombre de lignes de sortie, appliquez « LIMIT 0 » dans la requête. Par exemple :
SELECT * FROM customers LIMIT 0;
Nous recommandons l’une ou plusieurs des solutions suivantes en cas d’expiration des requêtes.
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.
Certains mots-clés réservés ne peuvent pas être utilisés comme nom de colonne, tels que ORDER
, GROUP BY
, WHERE
, DISTINCT
. Si vous souhaitez utiliser ces mots-clés, vous devez ajouter une séquence d’échappement à ces colonnes.
Les étapes suivantes décrivent comment afficher une vue tabulaire d’un jeu de données via l’interface utilisateur, y compris tous les champs et colonnes imbriqués dans un formulaire aplati.
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.
Pour améliorer les performances des requêtes sur les jeux de données contenant des tableaux, vous devez fractionner le tableau grâce à une requête CTAS au moment de l’exécution, puis l’explorer pour en savoir plus sur les opportunités d’amélioration de son temps de traitement.
Si la requête a pris beaucoup de temps sur un très petit jeu de données, contactez le service clientèle.
Une requête peut être bloquée pendant le traitement pour plusieurs raisons. Pour déterminer la cause exacte, il faut effectuer une analyse approfondie au cas par cas. Contactez le service clientèle d’Adobe pour lancer ce processus.
Une liste complète des numéros de téléphone du service 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 section Aide et assistance. Sélectionnez Nous contacter pour ouvrir l’assistant virtuel de l’assistance clientèle Adobe ou sélectionnez Assistance aux entreprises pour obtenir une aide destinées aux grandes organisations.
La fonction de bloc anonyme vous permet d’enchaîner une ou plusieurs instructions SQL exécutées de manière séquentielle. Les blocs anonymes permettent également de gérer les exceptions.
Pour en savoir plus, consultez la documentation sur les blocs anonymes.
Il existe deux façons de mettre en œuvre l’attribution personnalisée :
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 fréquemment une requête. Pour plus de détails, consultez la documentation sur les instructions préparées.
Pour récupérer les journaux d’erreur d’une requête spécifique, vous devez d’abord utiliser l’API Query Service pour récupérer les détails du journal de la requête. La réponse HTTP contient les identifiants de requête requis pour rechercher une erreur de requête.
Utilisez la commande GET pour récupérer plusieurs requêtes. Découvrez comment effectuer un appel à l’API dans la documentation sur les exemples d’appels d’API.
À partir de la réponse, identifiez la requête que vous souhaitez analyser et effectuez une autre requête GET à l’aide de sa valeur id
. Vous trouverez des instructions complètes dans la documentation sur la récupération d’une requête à l’aide de l’ID.
Une réponse réussie renvoie un statut HTTP 200 et contient le tableau errors
. Par souci de concision, la réponse a été raccourcie.
{
"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",
}
La documentation de référence sur l’API Query Service fournit plus d’informations sur tous les points d’entrée disponibles.
Le message « Erreur de validation du schéma » signifie que le système ne peut pas localiser un champ dans le schéma. Nous vous recommandons de lire le document des bonnes pratiques relatives à l’organisation des ressources de données dans Query Service ainsi que la documentation sur la requête Create Table As Select (CTAS).
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 ;
Vous pouvez utiliser la clause SNAPSHOT
pour lire de manière incrémentielle les données d’une table en fonction d’un identifiant d’instantané. Ceci est idéal pour une utilisation avec le modèle de conception de chargement incrémentiel qui traite uniquement les informations du jeu de données qui ont été créées ou modifiées depuis la dernière exécution du chargement. Cela permet d’augmenter l’efficacité du traitement et peut être utilisé avec le traitement des données en flux continu et par lots.
Les nombres affichés dans le tableau de bord du profil sont précis à partir du dernier instantané. Les nombres générés dans le tableau d’exportation du profil dépendent entièrement de la requête d’exportation. L’interrogation du nombre de profils admissibles pour une audience particulière constitue donc une cause courante de cette incohérence.
La requête inclut des données historiques, tandis que l’interface utilisateur affiche uniquement les données de profil actuelles.
La cause la plus probable est que la portée de votre requête est trop limitée. Vous devez supprimer systématiquement une section de la clause WHERE
jusqu’à ce que vous commenciez à voir des données.
Vous pouvez également confirmer que votre jeu de données contient des données à l’aide d’une requête courte telle que :
SELECT count(1) FROM myTableName
Cette fonctionnalité est actuellement en développement. Des informations détaillées seront disponibles dans les notes de mise à jour et par le biais des boîtes de dialogue de l’interface utilisateur de Platform une fois que la fonctionnalité sera prête à être publiée.
Query Service fournit plusieurs fonctions d’assistant 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.
Toutes les fonctions Spark SQL open source n’ont pas encore été testées sur les données du lac de données. Une fois testées et confirmées, elles seront ajoutées à la liste des fonctions prises en charge. Reportez-vous à la liste des fonctions Spark SQL prises en charge pour rechercher une fonction spécifique.
Pour des raisons de sécurité des données, la définition personnalisée des champs définis par l’utilisateur n’est pas autorisée.
Commencez par consulter les journaux pour connaître les détails de l’erreur. La section Questions fréquentes sur la recherche d’erreurs dans les journaux fournit des informations supplémentaires sur la manière de procéder.
Vous pouvez également consulter la documentation pour obtenir des conseils sur la manière d’effectuer des requêtes planifiées dans l’interface utilisateur et par le biais de l’API.
N’oubliez pas que lorsque vous utilisez Query Editor, vous pouvez uniquement ajouter un planning à une requête qui a déjà été créée, enregistrée et exécutée. Ceci ne s’applique pas à l’API Query Service.
« Limite de session atteinte » signifie que le nombre maximal de sessions Query Service autorisées pour votre organisation a été atteint. Contactez l’administrateur ou l’administratrice Adobe Experience Platform de votre organisation.
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 le résultat « Aucun jeu de données valide ».
Vous pouvez exécuter une requête qui renvoie zéro ligne pour obtenir uniquement les métadonnées en réponse. Cet exemple de requête renvoie uniquement les métadonnées de la table spécifiée.
SELECT * FROM <table> WHERE 1=0
Vous pouvez créer des tables temporaires pour itérer rapidement une requête et l’expérimenter avant de la matérialiser pour l’utiliser. Vous pouvez également utiliser des tables temporaires pour vérifier si une requête est fonctionnelle.
Vous pouvez, par exemple, créer une table temporaire :
CREATE temp TABLE temp_dataset AS
SELECT *
FROM actual_dataset
WHERE 1 = 0;
Vous pouvez ensuite utiliser la table 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;
Adobe Experience Platform conserve les données au format d’heure et date UTC (temps universel coordonné). Exemple de format UTC : 2021-12-22T19:52:05Z
.
Query Service prend en charge les fonctions SQL intégrées pour convertir une date et une heure données au format UTC et inversement à partir de ce format. Les deux méthodes to_utc_timestamp()
et from_utc_timestamp()
prennent deux paramètres : la date et l’heure, ainsi que le fuseau horaire.
Paramètre | Description |
---|---|
Date et heure | La date et l’heure peuvent être écrites au format UTC ou au format {year-month-day} simple. 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 le format {continent/city}) . Il doit s’agir de l’un des codes de fuseau horaire reconnus, comme indiqué dans la base de données TZ du domaine public. |
La méthode to_utc_timestamp()
interprète les paramètres donnés et les convertit à l’heure et à la date 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 une date uniquement, la méthode utilise une valeur par défaut de minuit le matin. L’heure, la date et le fuseau horaire sont convertis au format UTC de l’heure de cette région en date et heure UTC de votre région locale.
SELECT to_utc_timestamp('2021-08-31', 'Asia/Seoul');
La requête renvoie une date et une heure à l’heure locale de l’utilisateur ou utilisatrice. 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 la date et l’heure données ont été 2021-07-14 12:40:00.0
pour le fuseau horaire Asia/Seoul
, la date et l’heure UTC renvoyées seraient 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
La méthode from_utc_timestamp()
interprète les paramètres donnés à partir de la date et de l’heure de votre fuseau horaire local, et fournit la date et l’heure équivalentes de la région souhaitée au format UTC. Dans l’exemple ci-dessous, l’heure est 14h40 dans le fuseau horaire local de l’utilisateur ou utilisatrice. Le fuseau horaire de Séoul passé en tant que variable est neuf heures en avance sur le fuseau horaire local.
SELECT from_utc_timestamp('2021-08-31 14:40:00.0', 'Asia/Seoul');
La requête renvoie une date et une heure au format UTC pour le fuseau horaire transmis en tant que paramètre. Le résultat est neuf heures en avance sur le fuseau horaire qui a exécuté la requête.
8/31/2021, 11:40 PM
Lors de l’interrogation de données de série temporelle, vous devez utiliser le filtre Date et heure chaque fois que cela est possible pour une analyse plus précise.
La chaîne de date doit être au format yyyy-mm-ddTHH24:MM:SS
.
Vous trouverez ci-dessous un exemple d’utilisation du filtre Date et heure :
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 dates et heures dans les requêtes SQL ?Lors de l’utilisation de l’opérateur CAST
pour convertir une date et une heure, vous devez inclure la date et l’heure.
Par exemple, l’absence du composant Heure, comme illustré ci-dessous, entraînera une erreur :
SELECT * FROM ABC
WHERE timestamp = CAST('07-29-2021' AS timestamp)
L’utilisation correcte de l’opérateur CAST
est illustrée ci-dessous :
SELECT * FROM ABC
WHERE timestamp = CAST('07-29-2021 00:00:00' AS timestamp)
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 entrepôt orienté colonnes plutôt qu’un système d’entrepôt traditionnel basé sur les lignes.
NOT IN
dans ma requête SQL ?L’opérateur 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 si 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 vous avez les tables suivantes 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 l’opérateur 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 l’opérateur 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
test_table_001
.Non, il s’agit d’une limitation intentionnelle dans Experience Platform qui s’applique à tous les services Adobe, y compris Query Service. Un nom comportant deux traits de soulignement est acceptable en tant que nom de schéma et de jeu de données, mais le nom de la table du jeu de données ne peut contenir qu’un seul trait de soulignement.
Il n’existe aucune limite de simultanéité des requêtes, car les requêtes par lots s’exécutent en tant que tâches d’arrière-plan. Cependant, une limite de délai d’expiration de requête est définie sur 24 heures.
Il existe des fonctionnalités de surveillance et d’alerte permettant de vérifier les statuts et les activités des requêtes. Voir les documents concernant l’intégration du journal d’audit de Query Service et les journaux de requête pour plus d’informations.
Actuellement, nous ne prenons pas en charge les restaurations ou les mises à jour de cette manière.
Le système ne possède pas d’index, car il ne s’agit pas d’une base de données, mais d’autres optimisations sont en place, liées à l’entrepôt de données. Les options suivantes sont disponibles pour régler vos requêtes :
Query Service est une solution « tout ou rien ». Un accès partiel ne peut pas être fourni.
Oui, vous pouvez restreindre l’interrogation des jeux de données avec un accès en lecture seule.
Il existe trois approches pour restreindre l’accès. En voici la liste :
Oui, les modes SSL sont pris en charge. Voir la documentation sur les modes SSL pour une présentation des différents modes SSL disponibles et du niveau de protection qu’ils offrent.
Oui. Les données en transit sont toujours conformes au protocole HTTPS. La version actuellement prise en charge est TLS1.2.
Oui, une connexion établie sur le port 80 utilise toujours SSL. Vous pouvez également utiliser le port 5432.
Oui, le contrôle d’accès basé sur les attributs est appliqué s’il est configuré. Pour plus d’informations, consultez la présentation du contrôle d’accès basé sur les attributs.
Non, Query Service ne prend pas en charge la commande « INSERT OVERWRITE INTO ».
Cette section fournit des informations sur l’exportation des données et des limites.
Oui. Les données peuvent être extraites de Query Service et il est également possible de stocker les résultats au format CSV via une commande SQL.
Il existe deux manières d’enregistrer les résultats d’une requête quand on utilise un client PSQL. Vous pouvez utiliser la commande COPY TO
ou créez une instruction en respectant le format suivant :
SELECT column1, column2
FROM <table_name>
\g <table_name>.out
Les instructions sur l’utilisation de la commande COPY TO
se trouvent dans la documentation de référence de syntaxe SQL.
Non. Actuellement, il n’existe aucune fonctionnalité permettant l’extraction des données ingérées.
Une cause courante de ce problème est l’interrogation de données de série temporelle sans filtre temporel. Par exemple :
SELECT * FROM prod_table LIMIT 1;
Doit être écrit comme suit :
SELECT * FROM prod_table
WHERE
timestamp >= to_timestamp('2022-07-22')
and timestamp < to_timestamp('2022-07-23');
Cette section contient des informations sur l’utilisation d’outils tiers tels que PSQL et Power BI.
Oui, vous pouvez connecter plusieurs clients de bureau tiers à Query Service. Consultez la documentation sur les détails complets sur les clients disponibles et comment les connecter à Query Service.
Oui, les clients de bureau tiers peuvent être connectés à Query Service par le biais d’une configuration unique avec des informations d’identification non expirantes. Les informations d’identification sans expiration peuvent être générées par un utilisateur ou une utilisatrice autorisé(e) et reçues dans un fichier JSON automatiquement téléchargé sur son ordinateur local. Suivez la procédure de création et de téléchargement d’informations d’identification non expirantes dans la documentation.
La valeur des informations d’identification non expirantes sont les arguments concaténés des paramètres technicalAccountID
et credential
extraits du fichier de configuration JSON. La valeur du mot de passe se présente comme suit : {{technicalAccountId}:{credential}}
.
Pour plus d’informations sur la connexion à des clients externes à l’aide d’informations d’identification, consultez la documentation.
Tout éditeur SQL tiers compatible avec le client PSQL ou Postgres peut être connecté à Query Service Editor. Consultez la documentation sur la connexion des clients à Query Service pour obtenir une liste des instructions disponibles.
Oui, vous pouvez connecter Power BI à Query Service. Consultez la documentation pour obtenir des instructions sur la connexion de l’application de bureau Power BI à Query Service.
Lorsque le système est connecté à Query Service, il est connecté à un moteur de traitement interactif ou par lots. Cela peut entraîner des temps de chargement plus longs pour refléter les données traitées.
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. La plupart des outils de BI offrent une option de serveur dans leur assortiment.
L’ajout de la couche de serveur de mise en cache a pour but de mettre en cache les données de Query Service et d’utiliser les mêmes données pour les tableaux de bord, à des fins de temps de réponse réduits. Pour ce faire, les résultats des requêtes exécutées sont mis en cache sur le serveur BI quotidiennement. Le serveur de mise en cache fournit ensuite ces résultats à tout(e) utilisateur ou utilisatrice soumettant la même requête afin de réduire la latence. Pour plus d’informations sur cette mise en œuvre, consultez la documentation de l’utilitaire ou de l’outil tiers que vous utilisez.
Non, la connectivité pgAdmin n’est pas prise en charge. Consultez la liste des clients tiers disponibles et les instructions pour les connecter à Query Service dans la documentation.
Le tableau suivant fournit les codes d’erreur PSQL et leurs causes possibles.
Code d’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 - authentication | Mot de passe non valide | Jeton d’authentification non valide |
28000 | Démarrage - authentication | Type d’autorisation non valide | Type d’autorisation non valide. Doit être AuthenticationCleartextPassword . |
42P12 | Démarrage - authentication | 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 | Tableau introuvable | La table spécifiée dans la requête est introuvable |
42P07 | Requête | Le tableau existe | Une table portant le même nom existe déjà (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 | Déposer une table non créée par Query Service | La table en train d’être déposée n’a pas été créée par Query Service à l’aide de l’instruction CREATE TABLE . |
42501 | Requête DROP TABLE | Table non créée par l’utilisateur ou l’utilisatrice authentifié(e) | La table en train d’être déposée n’a pas été créée par l’utilisateur ou l’utilisatrice actuellement connecté(e). |
42P01 | Requête DROP TABLE | Tableau introuvable | La table spécifiée dans la requête est introuvable. |
42P12 | Requête DROP TABLE | Aucune table trouvée pour dbName : vérifiez le nom dbName . |
Aucune table n’a été trouvée dans la base de données actuelle. |
La méthode history_meta()
sert à 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. Consultez ci-dessous un exemple de l’ancienne erreur système.
ErrorCode: 58000 Internal System Error [Invalid table your_table_name. historyMeta can be used on datalake tables only.]
Cette erreur se produisait car aucune valeur n’était renvoyée pour la requête. Ce comportement est désormais corrigé et renvoie 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 |