Passer au contenu principal
Le moteur Alias crée un proxy vers une autre table. Toutes les opérations de lecture et d’écriture sont redirigées vers la table cible, tandis que l’alias lui-même ne stocke aucune donnée et conserve uniquement une référence à la table cible.

Créer une table

CREATE TABLE [db_name.]alias_name
ENGINE = Alias(target_table)
Ou en indiquant explicitement le nom de la base de données :
CREATE TABLE [db_name.]alias_name
ENGINE = Alias(target_db, target_table)
La table Alias ne prend pas en charge les définitions de colonnes explicites. Les colonnes sont automatiquement héritées de la table cible. Cela garantit que l’alias correspond toujours au schéma de la table cible.

Paramètres du moteur

  • target_db (optional) — Nom de la base de données contenant la table cible.
  • target_table — Nom de la table cible.
Lorsque target_db est omis et que target_table n’est pas entièrement qualifiée (par exemple, Alias('my_table')), la cible est associée à la même base de données que l’alias lui-même, et non à la base de données active de la session.

Opérations prises en charge

Le moteur de table Alias prend en charge toutes les opérations principales.

Opérations sur la table cible

Ces opérations sont redirigées vers la table cible :
OpérationPrise en chargeDescription
SELECTLire les données de la table cible
INSERTÉcrire des données dans la table cible
INSERT SELECTInsertion par lot dans la table cible
ALTER TABLE ADD COLUMNAjouter des colonnes à la table cible
ALTER TABLE MODIFY SETTINGModifier les paramètres de la table cible
ALTER TABLE PARTITIONOpérations sur les partitions (DETACH/ATTACH/DROP) sur la cible
ALTER TABLE UPDATEMettre à jour des lignes dans la table cible (mutation)
ALTER TABLE DELETESupprimer des lignes de la table cible (mutation)
OPTIMIZE TABLEOptimiser la table cible (fusion des parts)
TRUNCATE TABLEVider la table cible

Opérations sur l’alias lui-même

Ces opérations n’affectent que l’alias, pas la table cible :
OpérationPrise en chargeDescription
DROP TABLESupprime uniquement l’alias ; la table cible reste inchangée
RENAME TABLERenomme uniquement l’alias ; la table cible reste inchangée

Exemples d’utilisation

Création d’un alias simple

Créez un alias simple dans la même base de données :
-- Create source table
CREATE TABLE source_data (
    id UInt32,
    name String,
    value Float64
) ENGINE = MergeTree
ORDER BY id;

-- Insert some data
INSERT INTO source_data VALUES (1, 'one', 10.1), (2, 'two', 20.2);

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

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

Alias entre bases de données

Créez un alias qui pointe vers une table d’une autre base de données :
-- Create databases
CREATE DATABASE db1;
CREATE DATABASE db2;

-- Create source table in db1
CREATE TABLE db1.events (
    timestamp DateTime,
    event_type String,
    user_id UInt32
) ENGINE = MergeTree
ORDER BY timestamp;

-- Create alias in db2 pointing to db1.events
CREATE TABLE db2.events_alias ENGINE = Alias('db1', 'events');

-- Or using database.table format
CREATE TABLE db2.events_alias2 ENGINE = Alias('db1.events');

-- Both aliases work identically
INSERT INTO db2.events_alias VALUES (now(), 'click', 100);
SELECT * FROM db2.events_alias2;

Opérations d’écriture via l’alias

Toutes les opérations d’écriture sont redirigées vers la table cible :
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

Modification du schéma

Les opérations ALTER modifient le schéma de la table cible :
CREATE TABLE users (
    id UInt32,
    name String
) ENGINE = MergeTree
ORDER BY id;

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

-- Add column through alias
ALTER TABLE users_alias ADD COLUMN email String DEFAULT '';

-- Column is added to target table
DESCRIBE users;
┌─name──┬─type───┬─default_type─┬─default_expression─┐
│ id    │ UInt32 │              │                    │
│ name  │ String │              │                    │
│ email │ String │ DEFAULT      │ ''                 │
└───────┴────────┴──────────────┴────────────────────┘

Mutations de données

Les opérations UPDATE et DELETE sont prises en charge :
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 │
└────┴──────────┴───────┴────────┘

Opérations sur les partitions

Pour les tables partitionnées, les opérations sur les partitions sont redirigées :
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

Optimisation de la table

Optimisez les opérations de fusion des parts de la table cible :
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

Gestion des alias

Les alias peuvent être renommés ou supprimés indépendamment :
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
Dernière modification le 29 juin 2026