Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Motor de tabela Alias

O motor Alias cria um proxy para outra tabela. Todas as operações de leitura e gravação são encaminhadas para a tabela de destino, enquanto o próprio alias não armazena dados e apenas mantém uma referência à tabela de destino.

Criando uma tabela

CREATE TABLE [db_name.]alias_name
ENGINE = Alias(target_table)

Ou com o nome do banco de dados explícito:

CREATE TABLE [db_name.]alias_name
ENGINE = Alias(target_db, target_table)

Parâmetros do motor

  • target_db (optional) — Nome do banco de dados que contém a tabela de destino.
  • target_table — Nome da tabela de destino.

Operações suportadas

O motor de tabela Alias oferece suporte às principais operações.

Operações na tabela de destino

Estas operações são encaminhadas por proxy para a tabela de destino:

Operação Suporte Descrição
SELECT Ler dados da tabela de destino
INSERT Gravar dados na tabela de destino
INSERT SELECT Inserção em lote na tabela de destino
ALTER TABLE ADD COLUMN Adicionar colunas à tabela de destino
ALTER TABLE MODIFY SETTING Modificar as configurações da tabela de destino
ALTER TABLE PARTITION Operações de partição (DETACH/ATTACH/DROP) no destino
ALTER TABLE UPDATE Atualizar linhas na tabela de destino (mutação)
ALTER TABLE DELETE Excluir linhas da tabela de destino (mutação)
OPTIMIZE TABLE Otimizar a tabela de destino (mesclagem de partes)
TRUNCATE TABLE Truncar a tabela de destino

Operações sobre o próprio alias

Estas operações afetam apenas o alias, não a tabela de destino:

Operação Suporte Descrição
DROP TABLE Remove apenas o alias; a tabela de destino permanece inalterada
RENAME TABLE Renomeia apenas o alias; a tabela de destino permanece inalterada

Exemplos de uso

Criação de alias simples

Crie um alias simples no mesmo banco de dados:

-- Criar tabela de origem
CREATE TABLE source_data (
    id UInt32,
    name String,
    value Float64
) ENGINE = MergeTree
ORDER BY id;

-- Inserir alguns dados
INSERT INTO source_data VALUES (1, 'one', 10.1), (2, 'two', 20.2);

-- Criar alias
CREATE TABLE data_alias ENGINE = Alias('source_data');

-- Consultar via alias
SELECT * FROM data_alias;
┌─id─┬─name─┬─value─┐
│  1 │ one  │  10.1 │
│  2 │ two  │  20.2 │
└────┴──────┴───────┘

Alias entre bancos de dados

Crie um alias que aponte para uma tabela em outro banco de dados:

-- Criar bancos de dados
CREATE DATABASE db1;
CREATE DATABASE db2;

-- Criar tabela de origem em db1
CREATE TABLE db1.events (
    timestamp DateTime,
    event_type String,
    user_id UInt32
) ENGINE = MergeTree
ORDER BY timestamp;

-- Criar alias em db2 apontando para db1.events
CREATE TABLE db2.events_alias ENGINE = Alias('db1', 'events');

-- Ou usando o formato database.table
CREATE TABLE db2.events_alias2 ENGINE = Alias('db1.events');

-- Ambos os aliases funcionam de forma idêntica
INSERT INTO db2.events_alias VALUES (now(), 'click', 100);
SELECT * FROM db2.events_alias2;

Operações de gravação via alias

Todas as operações de gravação são encaminhadas para a tabela de destino:

CREATE TABLE metrics (
    ts DateTime,
    metric_name String,
    value Float64
) ENGINE = MergeTree
ORDER BY ts;

CREATE TABLE metrics_alias ENGINE = Alias('metrics');

-- Insert through alias
INSERT INTO metrics_alias VALUES
    (now(), 'cpu_usage', 45.2),
    (now(), 'memory_usage', 78.5);

-- Insert with SELECT
INSERT INTO metrics_alias
SELECT now(), 'disk_usage', number * 10
FROM system.numbers
LIMIT 5;

-- Verify data is in the target table
SELECT count() FROM metrics;  -- Returns 7
SELECT count() FROM metrics_alias;  -- Returns 7

Modificação do esquema

As operações ALTER modificam o esquema da tabela de destino:

CREATE TABLE users (
    id UInt32,
    name String
) ENGINE = MergeTree
ORDER BY id;

CREATE TABLE users_alias ENGINE = Alias('users');

-- Adicionar coluna através do alias
ALTER TABLE users_alias ADD COLUMN email String DEFAULT '';

-- Coluna é adicionada à tabela de destino
DESCRIBE users;
┌─name──┬─type───┬─default_type─┬─default_expression─┐
│ id    │ UInt32 │              │                    │
│ name  │ String │              │                    │
│ email │ String │ DEFAULT      │ ''                 │
└───────┴────────┴──────────────┴────────────────────┘

Mutações de dados

As operações UPDATE e DELETE são suportadas:

CREATE TABLE products (
    id UInt32,
    name String,
    price Float64,
    status String DEFAULT 'active'
) ENGINE = MergeTree
ORDER BY id;

CREATE TABLE products_alias ENGINE = Alias('products');

INSERT INTO products_alias VALUES
    (1, 'item_one', 100.0, 'active'),
    (2, 'item_two', 200.0, 'active'),
    (3, 'item_three', 300.0, 'inactive');

-- Update through alias
ALTER TABLE products_alias UPDATE price = price * 1.1 WHERE status = 'active';

-- Delete through alias
ALTER TABLE products_alias DELETE WHERE status = 'inactive';

-- Changes are applied to target table
SELECT * FROM products ORDER BY id;
┌─id─┬─name─────┬─price─┬─status─┐
│  1 │ item_one │ 110.0 │ active │
│  2 │ item_two │ 220.0 │ active │
└────┴──────────┴───────┴────────┘

Operações de partição

Para tabelas particionadas, as operações de partição são encaminhadas:

CREATE TABLE logs (
    date Date,
    level String,
    message String
) ENGINE = MergeTree
PARTITION BY toYYYYMM(date)
ORDER BY date;

CREATE TABLE logs_alias ENGINE = Alias('logs');

INSERT INTO logs_alias VALUES
    ('2024-01-15', 'INFO', 'message1'),
    ('2024-02-15', 'ERROR', 'message2'),
    ('2024-03-15', 'INFO', 'message3');

-- Detach partition through alias
ALTER TABLE logs_alias DETACH PARTITION '202402';

SELECT count() FROM logs_alias;  -- Returns 2 (partition 202402 detached)

-- Attach partition back
ALTER TABLE logs_alias ATTACH PARTITION '202402';

SELECT count() FROM logs_alias;  -- Returns 3

Otimização da tabela

As operações OPTIMIZE mesclam partes na tabela de destino:

CREATE TABLE events (
    id UInt32,
    data String
) ENGINE = MergeTree
ORDER BY id;

CREATE TABLE events_alias ENGINE = Alias('events');

-- Multiple inserts create multiple parts
INSERT INTO events_alias VALUES (1, 'data1');
INSERT INTO events_alias VALUES (2, 'data2');
INSERT INTO events_alias VALUES (3, 'data3');

-- Check parts count
SELECT count() FROM system.parts
WHERE database = currentDatabase()
AND table = 'events'
AND active;

-- Optimize through alias
OPTIMIZE TABLE events_alias FINAL;

-- Parts are merged in target table
SELECT count() FROM system.parts
WHERE database = currentDatabase()
AND table = 'events'
AND active;  -- Returns 1

Gerenciamento de aliases

Os aliases podem ser renomeados ou excluídos independentemente:

CREATE TABLE important_data (
    id UInt32,
    value String
) ENGINE = MergeTree
ORDER BY id;

INSERT INTO important_data VALUES (1, 'critical'), (2, 'important');

CREATE TABLE old_alias ENGINE = Alias('important_data');

-- Rename alias (target table unchanged)
RENAME TABLE old_alias TO new_alias;

-- Create another alias to same table
CREATE TABLE another_alias ENGINE = Alias('important_data');

-- Drop one alias (target table and other aliases unchanged)
DROP TABLE new_alias;

SELECT * FROM another_alias;  -- Still works
SELECT count() FROM important_data;  -- Data intact, returns 2
Navigation