> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Utilisez le stockage d’objets S3-compatible de SeaweedFS avec ClickHouse

# Utiliser SeaweedFS

export const CloudNotSupportedBadge = () => {
  return <a href="https://clickhouse.com/docs/products/cloud/guides/cloud-compatibility#list-of-unsupported-features" className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Non pris en charge par ClickHouse Cloud
        </a>;
};

<CloudNotSupportedBadge />

<Note>
  Cette page ne s'applique pas à [ClickHouse Cloud](https://clickhouse.com/cloud). La fonctionnalité décrite ici n'est pas disponible dans les services ClickHouse Cloud.
  Consultez le guide ClickHouse [Compatibilité Cloud](/docs/fr/products/cloud/guides/cloud-compatibility) pour plus d'informations.
</Note>

La fonction de table `s3` et le type de disque `S3` de ClickHouse sont compatibles avec [SeaweedFS](https://github.com/seaweedfs/seaweedfs), un stockage d’objets distribué open source doté d’une passerelle compatible S3. SeaweedFS traite nativement les requêtes de type chemin, de sorte qu’un stockage auto-hébergé fonctionne sans DNS générique. SeaweedFS prend également en charge les tables Iceberg : ses buckets de tables stockent les données sous forme de fichiers Parquet, et le catalogue REST Iceberg intégré fournit les métadonnées des tables. Consultez le [guide du catalogue SeaweedFS](/docs/fr/guides/use-cases/data-warehousing/seaweedfs-catalog) pour les interroger via le même endpoint.

Utilisez [SeaweedFS 4.42](https://github.com/seaweedfs/seaweedfs/releases/tag/4.42) ou une version ultérieure. Les versions antérieures peuvent supprimer un objet dont l’écriture est validée alors que son dossier parent est supprimé car considéré comme vide, ce qui se manifeste par `Object ... suddenly disappeared` juste après une écriture réussie.

<div id="running-seaweedfs-locally">
  ## Exécuter SeaweedFS en local
</div>

Pour effectuer des tests en local, créez un fichier `s3config.json` contenant les identifiants S3 :

```json theme={null}
{
  "identities": [
    {
      "name": "analyst",
      "credentials": [
        {
          "accessKey": "your_access_key_id",
          "secretKey": "your_secret_access_key"
        }
      ],
      "actions": ["Admin", "Read", "Write", "List", "Tagging"]
    }
  ]
}
```

Démarrez ensuite l’ensemble de la stack SeaweedFS dans un conteneur : le flag `-bucket` crée le bucket au démarrage :

```bash theme={null}
docker run -d --name seaweedfs -p 8333:8333 \
  -v "$(pwd)/s3config.json:/etc/seaweedfs/s3config.json" \
  chrislusf/seaweedfs:latest \
  mini -dir=/data -s3.config=/etc/seaweedfs/s3config.json -bucket=clickhouse
```

Le point de terminaison S3 écoute sur le port 8333 ; attendez qu’il réponde avant de continuer :

```bash theme={null}
until curl -s -o /dev/null http://localhost:8333; do sleep 1; done
```

Vous pouvez créer d’autres buckets à tout moment avec `echo "s3.bucket.create -name mybucket" | docker exec -i seaweedfs weed shell`.

Par défaut, une écriture est confirmée dès qu’elle est transmise au système d’exploitation. Pour synchroniser chaque écriture sur le disque avec fsync avant de la confirmer, activez fsync sur le bucket :

```bash theme={null}
echo "fs.configure -locationPrefix=/buckets/clickhouse/ -fsync -apply" | \
  docker exec -i seaweedfs weed shell
```

<div id="s3-backed-mergetree">
  ## MergeTree adossé à S3
</div>

La configuration de MergeTree adossée à S3 est compatible, moyennant quelques modifications mineures :

```xml theme={null}
<clickhouse>
    <storage_configuration>
        <disks>
            <s3>
                <type>s3</type>
                <endpoint>http://seaweedfs:8333/clickhouse/tables/</endpoint>
                <access_key_id>your_access_key_id</access_key_id>
                <secret_access_key>your_secret_access_key</secret_access_key>
                <region></region>
                <metadata_path>/var/lib/clickhouse/disks/s3/</metadata_path>
            </s3>
            <s3_cache>
                <type>cache</type>
                <disk>s3</disk>
                <path>/var/lib/clickhouse/disks/s3_cache/</path>
                <max_size>10Gi</max_size>
            </s3_cache>
        </disks>
        <policies>
            <s3_main>
                <volumes>
                    <main>
                        <disk>s3</disk>
                    </main>
                </volumes>
            </s3_main>
        </policies>
    </storage_configuration>
</clickhouse>
```

<Tip>
  L’endpoint contient le nom du bucket (`clickhouse`), suivi d’un préfixe de chemin (`tables/`), pour les données de la table. SeaweedFS ne nécessite pas de région ; le tag peut donc rester vide. Remplacez `seaweedfs` par l’hôte qui exécute la gateway S3.
</Tip>

Les tables stockent ensuite leurs données sur SeaweedFS à l’aide de la storage policy :

```sql theme={null}
CREATE TABLE trips (id UInt64, rider String, fare Float64)
ENGINE = MergeTree
ORDER BY id
SETTINGS storage_policy = 's3_main';
```

Pour conserver localement en cache les données fréquemment lues, créez plutôt la table avec `SETTINGS disk = 's3_cache'` : le disque de cache défini ci-dessus repose sur le disque S3.

<div id="the-s3-table-function">
  ## La fonction de table s3
</div>

La fonction de table `s3` lit et écrit des objets via le même endpoint :

```sql theme={null}
INSERT INTO FUNCTION s3(
    'http://seaweedfs:8333/clickhouse/sample/trips.parquet',
    'your_access_key_id',
    'your_secret_access_key',
    'Parquet'
)
SELECT number AS id, concat('rider_', toString(number % 10)) AS rider, number * 1.5 AS fare
FROM numbers(1000);

SELECT count()
FROM s3(
    'http://seaweedfs:8333/clickhouse/sample/*.parquet',
    'your_access_key_id',
    'your_secret_access_key',
    'Parquet'
);
```

Les motifs glob permettent de lire plusieurs objets.

<div id="backup-and-restore">
  ## Sauvegarde et restauration
</div>

`BACKUP` et `RESTORE` acceptent un endpoint SeaweedFS comme destination S3 :

```sql theme={null}
BACKUP TABLE trips
TO S3('http://seaweedfs:8333/clickhouse/backups/trips1', 'your_access_key_id', 'your_secret_access_key');

--- DROP TABLE trips;

RESTORE TABLE trips
FROM S3('http://seaweedfs:8333/clickhouse/backups/trips1', 'your_access_key_id', 'your_secret_access_key');
```
