---
title: "Connecter Snowflake"
description: "Connecter Datarelix à Snowflake : créer un rôle en lecture seule avec accès au warehouse, trouver l’identifiant de compte, gérer stratégies réseau et PrivateLink."
canonical: https://docs.datarelix.ai/fr/guides/connections/snowflake/
---

# Connecter Snowflake

Datarelix se connecte à Snowflake via un service de requêtes en lecture seule. Toutes les requêtes sont validées et exécutées à l'intérieur de ce service — le modèle ne voit pas les identifiants et n'exécute pas de SQL brut sur votre base.

## Prérequis

- Un compte Snowflake.
- Un **rôle en lecture seule** disposant de `USAGE` sur le warehouse, la base et le schéma, plus `SELECT` sur les objets que vous voulez analyser — voir [Snowflake access control](https://docs.snowflake.com/en/user-guide/security-access-control-overview).
- Un [warehouse](https://docs.snowflake.com/en/user-guide/warehouses-overview) que le rôle peut utiliser. Un warehouse **XS** suffit généralement. Le warehouse doit pouvoir être relancé — Snowflake suspend automatiquement les warehouses inactifs ; le rôle a besoin du privilège `OPERATE` sur le warehouse pour le relancer, sinon la première requête échoue avec « Warehouse is suspended. »
- Un utilisateur Snowflake capable d'endosser ce rôle.
- Une accessibilité réseau. Si le compte a une [stratégie réseau](https://docs.snowflake.com/en/user-guide/network-policies), ajoutez les IP de sortie de Datarelix à sa liste d'autorisation, sinon les connexions sont refusées. Les comptes verrouillés sur **AWS/Azure PrivateLink** (une URL en `*.privatelink.snowflakecomputing.com`) n'acceptent les connexions que via le point de terminaison privé et ne sont pas joignables depuis le service hébergé.

## Modes d'authentification

### Username & password

Un nom d'utilisateur et un mot de passe Snowflake authentifient la connexion. Le mot de passe est stocké chiffré. Voie recommandée pour les comptes de service.

> L'authentification par paire de clés et OAuth est prévue pour une version ultérieure.

**Configuration — créer un rôle et un utilisateur en lecture seule**

Connectez-vous en tant que accountadmin ou securityadmin, puis exécutez :

```sql
-- Create the role
CREATE ROLE datarelix_reader;

-- Grant warehouse access (resume + use)
GRANT USAGE ON WAREHOUSE your_warehouse TO ROLE datarelix_reader;
GRANT OPERATE ON WAREHOUSE your_warehouse TO ROLE datarelix_reader;

-- Grant database and schema access
GRANT USAGE ON DATABASE your_database TO ROLE datarelix_reader;
GRANT USAGE ON SCHEMA your_database.your_schema TO ROLE datarelix_reader;

-- Grant SELECT on existing and future tables
GRANT SELECT ON ALL TABLES IN SCHEMA your_database.your_schema TO ROLE datarelix_reader;
GRANT SELECT ON FUTURE TABLES IN SCHEMA your_database.your_schema TO ROLE datarelix_reader;

-- Create the user and assign the role
CREATE USER datarelix_reader
  PASSWORD = 'choose-a-strong-password'
  DEFAULT_ROLE = datarelix_reader
  DEFAULT_WAREHOUSE = your_warehouse;
GRANT ROLE datarelix_reader TO USER datarelix_reader;
```

Le `GRANT SELECT ON FUTURE TABLES` garantit que les tables ajoutées après la création de la connexion restent visibles, sans nouvelle attribution manuelle.

**Où trouver vos identifiants**

| Champ | Où le trouver |
|-------|----------------|
| Account identifier | Interface Snowsight → **Admin → Accounts** → copiez la valeur de la colonne **Account** (forme `orgname-account_name` préférée), ou lisez-la dans l'URL web de Snowflake |
| Warehouse | Snowsight → **Admin → Warehouses** — copiez le nom du warehouse |
| Database | Snowsight → **Data → Databases** — copiez le nom de la base |
| Role | Le rôle créé ci-dessus (par exemple `DATARELIX_READER`) |
| Schema | Le schéma auquel vous avez accordé l'accès (par exemple `PUBLIC`) |
| Username | L'utilisateur créé ci-dessus |
| Password | Le mot de passe défini dans `CREATE USER` |

**Trouver l'identifiant de compte**

Snowflake accepte deux formats d'[identifiant de compte](https://docs.snowflake.com/en/user-guide/admin-account-identifier). La forme moderne, **recommandée**, est `orgname-account_name` (par exemple `myorg-prod1`) ; la forme **héritée** est `<locator>[.<region>][.<cloud>]` :

| Cloud / région | Exemple | Remarques |
|---|---|---|
| AWS US West (Oregon) | `xy12345` | Pas de segment de région — exception héritée. |
| AWS, toute autre région | `xy12345.us-east-2.aws` | Région + `.aws`. |
| Azure, toute région | `xy12345.east-us-2.azure` | Région + `.azure`. |
| GCP, toute région | `xy12345.us-central1.gcp` | Région + `.gcp`. |

Les deux formes fonctionnent dans le formulaire de connexion. Trouvez la vôtre sous **Admin → Accounts** dans Snowsight, ou depuis l'URL web de Snowflake (`<locator>.<region>.snowflakecomputing.com`).

**Ce qu'il faut saisir**

```ini
Account identifier:  myorg-prod1          (or legacy: xy12345.us-east-1.aws)
Warehouse:           YOUR_WAREHOUSE
Database:            YOUR_DATABASE
Role:                DATARELIX_READER
Schema:              PUBLIC
Username:            datarelix_reader
Password:            ••••••••
```

---

## Sémantique de la portée

Le champ **Schema** (schéma) définit le schéma autorisé de la connexion. Datarelix n'inspecte et n'interroge que ce schéma. S'il est laissé vide, la connexion utilise `PUBLIC` par défaut.

Pour analyser plusieurs schémas dans la même base, créez une connexion par schéma.

## Découverte

Entièrement prise en charge. Le module d'introspection lit `<database>.information_schema` pour faire remonter les tables, les colonnes, les clés primaires et les clés étrangères déclarées.

**Les clés étrangères sont purement déclaratives.** Snowflake n'applique pas les contraintes FK sur les tables standard : ce sont des métadonnées informatives. La découverte renvoie un graphe de relations vide si votre entrepôt de données a été créé sans FK déclarées ; c'est attendu, ce n'est pas un échec de la découverte.

## Le SQL Snowflake en bref

Du SQL standard, avec quelques spécificités Snowflake que Datarelix connaît :

- **Identifiants** — les identifiants non quotés passent en majuscules. Mettez des guillemets doubles autour des noms sensibles à la casse.
- **Pagination** — `LIMIT n OFFSET m`.
- **Filtres de fenêtre** — utilisez `QUALIFY`, l'équivalent de `HAVING` pour les fonctions de fenêtrage.
- **Horodatages** — `TIMESTAMP_NTZ` (sans fuseau), `TIMESTAMP_LTZ` (local), `TIMESTAMP_TZ`.
- **Données semi-structurées** — `VARIANT`, `OBJECT` et `ARRAY`, avec `LATERAL FLATTEN` pour l'aplatissement.
- **Noms en trois parties** — `DATABASE.SCHEMA.TABLE`.

## Limites

- **Lecture seule** — le validateur rejette les instructions d'écriture et les instructions DDL, à la fois sur l'arbre syntaxique et sur les mots-clés du texte.
- **Requêtes multi-instructions bloquées** — un seul `SELECT`/`WITH`/`UNION` par question. Les CTE comportant plusieurs références de tables dans une même clause `WITH` sont acceptées.
- **Schémas système bloqués** — les requêtes sur `INFORMATION_SCHEMA` ne sont autorisées que pendant la découverte ; `ACCOUNT_USAGE` est toujours bloqué.
- **Délai d'expiration des instructions** — défini par session (30 s par défaut). Ajustez-le si votre warehouse a régulièrement besoin de requêtes analytiques plus longues.
- **Limite de lignes** — plafond côté serveur de 5 000 lignes par défaut.

## Dépannage

| Symptôme | Cause probable | Solution |
|---------|--------------|-----|
| `390100: Incorrect username or password` | Identifiants incorrects | Testez d'abord depuis l'interface web Snowflake. |
| `Warehouse 'X' does not exist or not authorized` | Rôle sans `USAGE` sur le warehouse | `GRANT USAGE ON WAREHOUSE X TO ROLE Y`. |
| `Warehouse is suspended` | Rôle sans `OPERATE` | `GRANT OPERATE ON WAREHOUSE X TO ROLE Y`. |
| `Object does not exist` à la découverte | Rôle sans `USAGE` sur la base ou le schéma | `GRANT USAGE ON DATABASE`/`SCHEMA` au rôle. |
| `IP ... is not allowed to access Snowflake` | La stratégie réseau du compte bloque l'IP de sortie | Ajoutez les IP de sortie de Datarelix à la liste d'autorisation de la [stratégie réseau](https://docs.snowflake.com/en/user-guide/network-policies) du compte ou de l'utilisateur. |
| `Statement timeout reached` | La requête a dépassé le délai de la session | Affinez la question, ajoutez un `LIMIT`, ou contactez le support pour relever le délai. |
| La découverte ne renvoie aucune table | Le rôle n'a pas `SELECT` sur les objets du schéma | `GRANT SELECT ON ALL TABLES IN SCHEMA X TO ROLE Y` + `GRANT SELECT ON FUTURE TABLES IN SCHEMA X TO ROLE Y`. |
