> ## 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.

> Use el almacenamiento de objetos de SeaweedFS compatible con S3 con ClickHouse

# Uso de 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>
            No es compatible con ClickHouse Cloud
        </a>;
};

<CloudNotSupportedBadge />

<Note>
  Esta página no se aplica a [ClickHouse Cloud](https://clickhouse.com/cloud). La funcionalidad documentada aquí no está disponible en los servicios de ClickHouse Cloud.
  Consulta la guía de ClickHouse sobre [compatibilidad con Cloud](/docs/es/products/cloud/guides/cloud-compatibility) para obtener más información.
</Note>

La función de tabla `s3` y el tipo de disco `S3` de ClickHouse son compatibles con [SeaweedFS](https://github.com/seaweedfs/seaweedfs), un almacén distribuido de objetos de código abierto con un gateway compatible con S3. SeaweedFS gestiona solicitudes con rutas de estilo path de forma nativa, por lo que una implementación self-hosted funciona sin DNS con comodines. SeaweedFS también admite tablas Iceberg: sus buckets de tablas almacenan los datos en archivos Parquet, y el catálogo REST de Iceberg integrado proporciona los metadatos de las tablas. Consulte la [guía del catálogo de SeaweedFS](/docs/es/guides/use-cases/data-warehousing/seaweedfs-catalog) para consultarlas a través del mismo endpoint.

Use [SeaweedFS 4.42](https://github.com/seaweedfs/seaweedfs/releases/tag/4.42) o una versión posterior. Las versiones anteriores pueden eliminar un objeto cuyo commit de escritura se produce mientras se elimina su carpeta principal por estar vacía, lo que se manifiesta como `Object ... suddenly disappeared` justo después de una escritura correcta.

<div id="running-seaweedfs-locally">
  ## Ejecutar SeaweedFS localmente
</div>

Para realizar pruebas locales, cree un archivo `s3config.json` con las credenciales de S3:

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

A continuación, inicie toda la pila de SeaweedFS en un contenedor; el indicador `-bucket` crea el bucket al iniciarse:

```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
```

El endpoint de S3 está a la escucha en el puerto 8333; espere a que responda antes de continuar:

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

Se pueden crear más buckets en cualquier momento con `echo "s3.bucket.create -name mybucket" | docker exec -i seaweedfs weed shell`.

De forma predeterminada, una escritura se confirma cuando se entrega al sistema operativo. Para sincronizar cada escritura con el disco mediante fsync antes de confirmarla, habilite fsync en el bucket:

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

<div id="s3-backed-mergetree">
  ## MergeTree respaldado por S3
</div>

La configuración de MergeTree respaldado por S3 es compatible con cambios menores:

```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>
  El endpoint contiene el nombre del bucket (`clickhouse`) seguido de un prefijo de ruta (`tables/`) para los datos de la tabla. SeaweedFS no requiere una región, por lo que la etiqueta puede dejarse vacía. Sustituya `seaweedfs` por el host que ejecuta el gateway de S3.
</Tip>

A continuación, las tablas almacenan sus datos en SeaweedFS mediante la política de almacenamiento:

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

Para mantener una caché local de los datos de acceso frecuente, cree la tabla con `SETTINGS disk = 's3_cache'`; el disco de caché definido anteriormente se superpone al disco S3.

<div id="the-s3-table-function">
  ## La función de tabla s3
</div>

La función de tabla `s3` lee y escribe objetos en el mismo 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'
);
```

Los patrones glob permiten leer varios objetos.

<div id="backup-and-restore">
  ## Copia de seguridad y restauración
</div>

`BACKUP` y `RESTORE` aceptan un endpoint de SeaweedFS como destino 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');
```
