> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Este motor permite integrar ClickHouse con RocksDB

# Motor de tabla EmbeddedRocksDB

export const CloudNotSupportedBadge = () => {
  return <div 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>
            Not supported in ClickHouse Cloud
        </div>;
};

Este motor permite la integración de ClickHouse con [RocksDB](http://rocksdb.org/).

<div id="creating-a-table">
  ## Crear una tabla
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = EmbeddedRocksDB([ttl, rocksdb_dir, read_only]) PRIMARY KEY(primary_key_name)
[ SETTINGS name=value, ... ]
```

Parámetros del motor:

* `ttl` - tiempo de vida de los valores. TTL se acepta en segundos. Si TTL es 0, se usa una instancia normal de RocksDB (sin TTL).
* `rocksdb_dir` - ruta al directorio de una instancia de RocksDB existente o ruta de destino de la instancia de RocksDB creada. Abre la tabla con el `rocksdb_dir` especificado.
* `read_only` - cuando `read_only` se establece en true, se usa el modo de solo lectura. Para el almacenamiento con TTL, no se activará la compactación (ni manual ni automática), por lo que no se eliminarán las entradas caducadas.
* `primary_key_name` – cualquier nombre de columna de la lista de columnas.
* `primary key` debe especificarse; solo admite una columna en la clave primaria. La clave primaria se serializará en binario como una `rocksdb key`.
* las columnas distintas de la clave primaria se serializarán en binario como valor `rocksdb` en el orden correspondiente.
* las consultas con filtrado de clave `equals` o `in` se optimizarán para la búsqueda de múltiples claves en `rocksdb`.

Configuración del motor:

* `optimize_for_bulk_insert` – La tabla está optimizada para inserciones masivas (el pipeline de inserción creará archivos SST y los importará a la base de datos de rocksdb en lugar de escribir en memtables); valor predeterminado: `1`.
* `bulk_insert_block_size` - Tamaño mínimo de los archivos SST (en número de filas) creados por la inserción masiva; valor predeterminado: `1048449`.

Ejemplo:

```sql theme={null}
CREATE TABLE test
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = EmbeddedRocksDB
PRIMARY KEY key
```

<div id="metrics">
  ## Métricas
</div>

También está la tabla `system.rocksdb`, que expone estadísticas de RocksDB:

```sql theme={null}
SELECT
    name,
    value
FROM system.rocksdb

┌─name──────────────────────┬─value─┐
│ no.file.opens             │     1 │
│ number.block.decompressed │     1 │
└───────────────────────────┴───────┘
```

<div id="configuration">
  ## Configuración
</div>

También puedes cambiar cualquier [opción de RocksDB](https://github.com/facebook/rocksdb/wiki/Option-String-and-Option-Map) mediante la configuración:

```xml theme={null}
<rocksdb>
    <options>
        <max_background_jobs>8</max_background_jobs>
    </options>
    <column_family_options>
        <num_levels>2</num_levels>
    </column_family_options>
    <tables>
        <table>
            <name>TABLE</name>
            <options>
                <max_background_jobs>8</max_background_jobs>
            </options>
            <column_family_options>
                <num_levels>2</num_levels>
            </column_family_options>
        </table>
    </tables>
</rocksdb>
```

De forma predeterminada, la optimización trivial de conteo aproximado está desactivada, lo que podría afectar al rendimiento de las consultas `count()`. Para habilitar esta
optimización, configure `optimize_trivial_approximate_count_query = 1`. Además, esta configuración afecta a `system.tables` para el motor EmbeddedRocksDB;
active esta opción para ver valores aproximados de `total_rows` y `total_bytes`.

<div id="supported-operations">
  ## Operaciones admitidas
</div>

<div id="inserts">
  ### Inserciones
</div>

Cuando se insertan nuevas filas en `EmbeddedRocksDB`, si la clave ya existe, se actualizará el valor; de lo contrario, se creará una nueva clave.

Ejemplo:

```sql theme={null}
INSERT INTO test VALUES ('some key', 1, 'value', 3.2);
```

<div id="deletes">
  ### Borrados
</div>

Las filas se pueden eliminar con la consulta `DELETE` o con `TRUNCATE`.

```sql theme={null}
DELETE FROM test WHERE key LIKE 'some%' AND v1 > 1;
```

```sql theme={null}
ALTER TABLE test DELETE WHERE key LIKE 'some%' AND v1 > 1;
```

```sql theme={null}
TRUNCATE TABLE test;
```

<div id="updates">
  ### Actualizaciones
</div>

Los valores se pueden actualizar mediante la consulta `ALTER TABLE`. La clave primaria no se puede actualizar.

```sql theme={null}
ALTER TABLE test UPDATE v1 = v1 * 10 + 2 WHERE key LIKE 'some%' AND v3 > 3.1;
```

<div id="joins">
  ### Joins
</div>

Se admite un JOIN `direct` especial con tablas EmbeddedRocksDB.
Este JOIN directo evita crear una tabla hash en memoria y accede a
los datos directamente desde EmbeddedRocksDB.

Con joins grandes, es posible que el uso de memoria sea mucho menor con joins directos,
ya que no se crea la tabla hash.

Para habilitar los joins directos:

```sql theme={null}
SET join_algorithm = 'direct, hash'
```

<Tip>
  Cuando `join_algorithm` está configurado como `direct, hash`, se usarán JOIN directos
  siempre que sea posible, y hash en caso contrario.
</Tip>

<div id="example">
  #### Ejemplo
</div>

<div id="create-and-populate-an-embeddedrocksdb-table">
  ##### Crear y poblar una tabla EmbeddedRocksDB
</div>

```sql theme={null}
CREATE TABLE rdb
(
    `key` UInt32,
    `value` Array(UInt32),
    `value2` String
)
ENGINE = EmbeddedRocksDB
PRIMARY KEY key
```

```sql theme={null}
INSERT INTO rdb
    SELECT
        toUInt32(sipHash64(number) % 10) AS key,
        [key, key+1] AS value,
        ('val2' || toString(key)) AS value2
    FROM numbers_mt(10);
```

<div id="create-and-populate-a-table-to-join-with-table-rdb">
  ##### Crear y poblar una tabla para hacer JOIN con la tabla `rdb`
</div>

```sql theme={null}
CREATE TABLE t2
(
    `k` UInt16
)
ENGINE = TinyLog
```

```sql theme={null}
INSERT INTO t2 SELECT number AS k
FROM numbers_mt(10)
```

<div id="set-the-join-algorithm-to-direct">
  ##### Establecer el algoritmo de join en `direct`
</div>

```sql theme={null}
SET join_algorithm = 'direct'
```

<div id="an-inner-join">
  ##### Un INNER JOIN
</div>

```sql theme={null}
SELECT *
FROM
(
    SELECT k AS key
    FROM t2
) AS t2
INNER JOIN rdb ON rdb.key = t2.key
ORDER BY key ASC
```

```response theme={null}
┌─key─┬─rdb.key─┬─value──┬─value2─┐
│   0 │       0 │ [0,1]  │ val20  │
│   2 │       2 │ [2,3]  │ val22  │
│   3 │       3 │ [3,4]  │ val23  │
│   6 │       6 │ [6,7]  │ val26  │
│   7 │       7 │ [7,8]  │ val27  │
│   8 │       8 │ [8,9]  │ val28  │
│   9 │       9 │ [9,10] │ val29  │
└─────┴─────────┴────────┴────────┘
```

<div id="more-information-on-joins">
  ### Más información sobre los JOIN
</div>

* [configuración `join_algorithm`](/es/reference/settings/session-settings#join_algorithm)
* [cláusula JOIN](/es/reference/statements/select/join)
