Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Motor de tabla StripeLog

No es compatible con ClickHouse Cloud

Este motor pertenece a la familia de motores log. Consulte las propiedades comunes de los motores log y sus diferencias en el artículo Familia de motores Log.

Use este motor en escenarios en los que necesite escribir muchas tablas con una pequeña cantidad de datos (menos de 1 millón de filas). Por ejemplo, esta tabla puede usarse para almacenar lotes de datos entrantes para su transformación cuando se requiere un procesamiento atómico. 100k instancias de este tipo de tabla son viables en un servidor ClickHouse. Debe preferirse este motor de tabla en lugar de Log cuando se requiera un gran número de tablas. Esto se hace a costa de la eficiencia de lectura.

Crear una tabla

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = StripeLog

Consulte la descripción detallada de la consulta CREATE TABLE.

Escritura de los datos

El motor StripeLog almacena todas las columnas en un único archivo. Para cada consulta INSERT, ClickHouse agrega el bloque de datos al final del archivo de la tabla y escribe las columnas una por una.

Para cada tabla, ClickHouse escribe los siguientes archivos:

  • data.bin — Archivo de datos.
  • index.mrk — Archivo con marcas. Las marcas contienen desplazamientos para cada columna de cada bloque de datos insertado.

El motor StripeLog no admite las operaciones ALTER UPDATE ni ALTER DELETE.

Lectura de datos

El archivo de marcas permite a ClickHouse paralelizar la lectura de datos. Esto significa que una consulta SELECT devuelve filas en un orden impredecible. Use la cláusula ORDER BY para ordenar las filas.

Ejemplo de uso

Creación de una tabla:

CREATE TABLE stripe_log_table
(
    timestamp DateTime,
    message_type String,
    message String
)
ENGINE = StripeLog

Inserción de datos:

INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')

Usamos dos consultas INSERT para crear dos bloques de datos dentro del archivo data.bin.

ClickHouse utiliza varios hilos al seleccionar datos. Cada hilo lee un bloque de datos distinto y devuelve las filas resultantes por separado a medida que finaliza. Como resultado, en la mayoría de los casos, el orden de los bloques de filas en la salida no coincide con el orden de esos mismos bloques en la entrada. Por ejemplo:

SELECT * FROM stripe_log_table
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:27:32 │ REGULAR      │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING      │ The first warning message  │
└─────────────────────┴──────────────┴────────────────────────────┘
┌───────────timestamp─┬─message_type─┬─message───────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR      │ The first regular message │
└─────────────────────┴──────────────┴───────────────────────────┘

Ordenar los resultados (en orden ascendente de forma predeterminada):

SELECT * FROM stripe_log_table ORDER BY timestamp
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR      │ The first regular message  │
│ 2019-01-18 14:27:32 │ REGULAR      │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING      │ The first warning message  │
└─────────────────────┴──────────────┴────────────────────────────┘
Navigation