Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Motor de tabela StripeLog

Sem suporte no ClickHouse Cloud

Este motor pertence à família de motores de log. Veja as propriedades comuns dos motores de log e suas diferenças no artigo Família de motores Log.

Use este motor em cenários nos quais você precisa gravar muitas tabelas com uma pequena quantidade de dados (menos de 1 milhão de linhas). Por exemplo, esta tabela pode ser usada para armazenar lotes de dados recebidos para transformação quando o processamento atômico deles for necessário. 100 mil instâncias desse tipo de tabela são viáveis em um servidor ClickHouse. Este motor de tabela deve ser preferido em vez de Log quando for necessário um grande número de tabelas. Isso ocorre em detrimento da eficiência de leitura.

Criar uma tabela

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 a descrição detalhada da consulta CREATE TABLE.

Escrevendo os dados

O motor StripeLog armazena todas as colunas em um único arquivo. Para cada consulta INSERT, o ClickHouse acrescenta o bloco de dados ao final do arquivo da tabela, gravando as colunas uma a uma.

Para cada tabela, o ClickHouse grava os arquivos:

  • data.bin — Arquivo de dados.
  • index.mrk — Arquivo com marcas. As marcas contêm os offsets de cada coluna de cada bloco de dados inserido.

O motor StripeLog não oferece suporte às operações ALTER UPDATE e ALTER DELETE.

Lendo os dados

O arquivo de marcas permite que o ClickHouse paralelize a leitura dos dados. Isso significa que uma consulta SELECT retorna linhas em ordem imprevisível. Use a cláusula ORDER BY para ordenar as linhas.

Exemplo de uso

Criação de uma tabela:

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

Inserção de dados:

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 duas consultas INSERT para criar dois blocos de dados no arquivo data.bin.

O ClickHouse usa várias threads ao selecionar dados. Cada thread lê um bloco de dados separado e retorna as linhas resultantes de forma independente, à medida que conclui a leitura. Como resultado, na maioria dos casos, a ordem dos blocos de linhas na saída não corresponde à ordem desses mesmos blocos na entrada. Por exemplo:

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 │
└─────────────────────┴──────────────┴───────────────────────────┘

Ordenando os resultados (em ordem crescente por padrão):

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