> For the complete documentation index, see [llms.txt](https://doc.commandersact.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.commandersact.com/fr/fonctionnalites/enrichments/storage-settings.md).

# Data Stores

Un Data Store contient des données que la plateforme consulte plus tard pour enrichir vos événements. Chaque enregistrement est récupéré via sa clé correspondante.

## Choisir le type

Vous choisissez le type lorsque vous créez le Data Store, et **il ne peut pas être modifié par la suite**.

|                                          | Lié à un utilisateur                                                            | Aucun utilisateur                                                                                              |
| ---------------------------------------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| Contient                                 | Données attachées à un visiteur, identifié ou non                               | Données de référence qui existent de manière autonome : catalogue produits, liste des magasins, liste des prix |
| Les données stockées sont décrites comme | Propriétés d'un événement                                                       | Champs d'une ligne                                                                                             |
| Alimenté par                             | Événements collectés par vos sources                                            | Une importation de fichier                                                                                     |
| Clé de correspondance                    | Un champ qui permet d'identifier un visiteur : `email`, `user_id`, `session_id` | Un champ unique pour chaque ligne : `product_id`, `store_code`                                                 |
| Consentement                             | S'applique                                                                      | Non applicable                                                                                                 |
| Rétention                                | Jusqu'à 730 jours                                                               | Aucun, pas d'expiration                                                                                        |
| Filtres                                  | Disponible                                                                      | Non disponible                                                                                                 |

<figure><img src="https://3282103337-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2FxHMjqfEOSaB5ik7kEXrg%2Fimage.png?alt=media&amp;token=5d6ced10-84bb-47fb-a0eb-a27124856f12" alt=""><figcaption></figcaption></figure>

Le type décrit ce que sont les données, pas la manière dont elles arrivent. Un fichier peut contenir des events — le CSV Conversions Importer fonctionne ainsi — et ceux-ci relèvent d'un Data Store lié à un utilisateur.

\
Les sources qui vous sont proposées sont filtrées pour correspondre au type. Si une source que vous attendez manque dans une liste, c'est pour cette raison.

{% hint style="warning" %}
Un Data Store contient un seul type de données, pas les deux. Pour croiser les données de navigation avec une table de référence, utilisez deux Data Stores et deux enrichissements.
{% endhint %}

## **Créer un Data Store**

Data Governance > Data Stores > Add Data Store. Nommez-le, choisissez le type, puis renseignez les champs qui apparaissent.

### Lié à un utilisateur

* **Sources et environnement** — quelles sources l'alimentent.
* **Catégorie de consentement** — le périmètre de consentement sous lequel les données sont stockées. Assurez-vous d'être conforme aux réglementations sur la confidentialité des données.
* **Événement** — de quel événement les propriétés sont extraites.
* **Propriétés** — cliquez sur Add/Edit Properties pour ouvrir le panneau latéral, ou activez le bouton du haut pour tout stocker.

{% hint style="success" %}
Les formats imbriqués sont autorisés, voir [Vérifier le format des propriétés](#check-properties-format) ci-dessous.
{% endhint %}

* **Clé de correspondance** — doit être présent et identique à la fois dans l'événement stocké et dans l'événement à enrichir.
* **Filtres (facultatif)** — stockez uniquement les événements répondant à une condition.
* **Période de rétention** — pendant combien de temps les événements stockés sont conservés, jusqu'à 730 jours.

{% hint style="success" %}
La rétention affecte la consommation de crédits. Choisissez une durée adaptée à votre cas d'usage plutôt que la durée maximale.
{% endhint %}

### **Aucun utilisateur**

* **Champs** — les colonnes stockées pour chaque ligne.
* **Clé de correspondance** — cochez le champ qui identifie une ligne. Un seul, et il est obligatoire.<br>

Consentement, event, filtres et rétention ne s'appliquent pas ici. Les enregistrements n'expirent jamais, ce qui signifie aussi qu'une entrée obsolète reste en place jusqu'à ce qu'une importation ultérieure l'écrase.\
Vous pouvez créer le Data Store vide et connecter une source plus tard, ou laisser l'assistant d'importation le créer. Voir [CSV Products Importer](/fr/fonctionnalites/sources/sources-catalog/product-catalog/products-file-importer.md).

### Modification et suppression

<figure><img src="https://3282103337-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mk6XpTQ2LaRLcr2tA-d%2Fuploads%2FThhZF3RBEIcJy62UPW3p%2Fimage.png?alt=media&amp;token=85dab52f-6af1-44eb-90e4-dbc55562c8bd" alt=""><figcaption></figcaption></figure>

#### Modification

**Lié à un utilisateur**: des propriétés peuvent être ajoutées ou supprimées à tout moment.\
**Aucun utilisateur**: des champs peuvent être ajoutés, renommés ou supprimés à tout moment, depuis le Data Store. Les enregistrements existants ne prennent en compte un nouveau champ que lorsqu'ils sont importés à nouveau.<br>

Dans les deux cas, la clé de correspondance est modifiée depuis le Data Store, et non depuis la source : les sources qui l'alimentent prennent en compte la modification.

{% hint style="danger" %}
Changer la clé de correspondance d'un Data Store qui contient déjà des enregistrements ne les réindexe pas.&#x20;

Les enregistrements écrits ensuite utilisent la nouvelle clé, en plus des anciennes, qui restent en place et ne seront plus jamais mises en correspondance ni mises à jour. Préférez créer un nouveau Data Store plutôt que de modifier la clé d'un Data Store déjà en usage — d'autant plus sans périmètre utilisateur, où les enregistrements n'expirent pas et ne peuvent pas être supprimés individuellement.
{% endhint %}

#### Suppression

La suppression d'un Data Store est possible pour les deux types, et **ne supprime pas les sources qui l'alimentent.** Pour une source d'importation, cela la laisse sans cible : reconnectez-la à un Data Store avant de la réutiliser.&#x20;

Si un enrichissement cesse de trouver des données sans autre explication, vérifiez que son Data Store existe toujours.

## **Astuces et conseils**

{% hint style="info" %}
La section suivante s'applique uniquement aux Data Stores du type : **liés à un utilisateur**.&#x20;
{% endhint %}

### Vérifiez si la propriété existe déjà

Nativement, un Storage Settings n'enrichira pas une propriété si elle existe déjà dans l'événement à enrichir.\
\
Si la propriété existe déjà, mais que vous devez vraiment modifier la valeur avec votre enrichment, n'oubliez pas de cocher l'option "override" dans votre [configuration d'enrichment](https://app.commandersact.com/en/4452/sources/privacy-banners/?p=/en/4452/containers/privacy/settings/1/demo-iab-ii).

Cette fonctionnalité override peut également s'appliquer aux valeurs de tableaux.

### Vérifier le format des propriétés

Il n'est pas possible d'enrichir une propriété avec un type différent de celui attendu par défaut dans votre enrichment.\
Exemple basique :\
Envoyer une valeur Number pour enrichir une propriété de type String\
`storage > "items.product.quantity": 2 >> enrich >> "items.product.color": N/A`\
Cela ne fonctionnera pas, vous obtiendrez un [erreur d'avertissement](#errors) au lieu d'une propriété enrichie. Vous pouvez facilement l'identifier grâce au message suivant dans "details" : `'type error, number cannot replace a string'`

### **Propriétés de consentement**

Évitez tout enrichissement de la `user.consent_categories` propriété.\
Cela concerne le choix légal de l'utilisateur concernant la collecte/le suivi des données personnelles.\
L'enrichissement de cette propriété peut créer un risque de non-conformité.

### Avertissements et erreurs

S'il y a une anomalie dans votre storage, vous pouvez voir une propriété "warnings" dans le Live Event Inspector.

Située dans l'événement qui aurait dû être enrichi, si l'enrichment ne s'applique pas comme prévu, vous verrez cette propriété "warnings", avec des détails pour une compréhension facile

```json
            warnings: [
                {
                    type: 'enrichment',
                    step: 'saveHit',
                    path: 'event.items',
                    detail: {
                        message: 'type error, object cannot replace array',
                    },
                },
            ],
```

### **Cas particuliers - objets**

Vous pouvez stocker un Object entier, (exemple : `items.product`) mais vous pouvez aussi stocker seulement une ou plusieurs clés extraites d'un Object (exemple : `items.product.price`).\
Si vous enregistrez des clés uniques, assurez-vous que l'événement de destination a déjà l'Object défini.\
Sinon, la clé unique n'enrichira rien.\
Le message warnings contiendra le détail suivant :\
`message :` '`doit fusionner les propriétés d'objet qui n'existent pas dans la cible'`

#### **Réconciliation de plusieurs Objects**

Si vous stockez une propriété qui apparaît dans plusieurs objects, soyez prudent !\
Notre mécanisme de correspondance est basé sur des ID.\
Par exemple, vous avez de nombreux `items.product` objects et vous devez stocker `items.product.brand` propriété.\
Nous utiliserons le `items.product.id` comme clé de correspondance pour remplir les différents `items.product` objets.\
S'il n'y a pas de propriété "ID" à l'intérieur de votre objet, nous le renseignerons simplement dans le même ordre qu'il a été stocké.\
Dans ce cas, les détails "warnings" suivants seront ajoutés à votre enrichment\
`message: 'No ID field found, falling back to index-based merge',`

#### Utilisation de l'option Override

Soyez prudent lorsque vous utilisez l'option Override !\
L'override d'un objet entier bloquera le « non-override » d'une seule clé\
Exemple de mauvaise pratique :

`items.product.color` << *override: false* >> `items.product.defaultColor`\
`items` << *override: true* >> `items`

Les données de la `items.product.color` valeur sont remplacées, car la deuxième ligne est prioritaire.

### Bonne pratique : utilisation des filtres

Bien sûr, les filtres définis dans vos destinations seront appliqués.\
Alors pourquoi utiliser les filtres de Storage Settings ?\
Nous fournissons les filtres à ce niveau simplement pour vous faire économiser des frais de Storage (consommation de crédits) et pour simplifier le traitement dans vos destinations.

Même qualité d'enrichment, pour des frais réduits !


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://doc.commandersact.com/fr/fonctionnalites/enrichments/storage-settings.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
