4.3 KiB
machine_translated |
---|
true |
StripeLog
Ce moteur appartient à la famille des moteurs en rondins. Voir les propriétés communes des moteurs de journal et leurs différences dans le Famille De Moteurs En Rondins article.
Utilisez ce moteur dans des scénarios lorsque vous devez écrire de nombreuses tables avec une petite quantité de données (moins de 1 million de lignes).
Création d'une Table
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
Voir la description détaillée de la CREATE TABLE requête.
L'écriture des Données
Le StripeLog
moteur stocke toutes les colonnes dans un fichier. Pour chaque INSERT
requête, ClickHouse ajoute le bloc de données à la fin d'un fichier de table, en écrivant des colonnes une par une.
Pour chaque table ClickHouse écrit les fichiers:
data.bin
— Data file.index.mrk
— File with marks. Marks contain offsets for each column of each data block inserted.
Le StripeLog
moteur ne prend pas en charge la ALTER UPDATE
et ALTER DELETE
opérations.
La lecture des Données
Le fichier avec des marques permet à ClickHouse de paralléliser la lecture des données. Cela signifie qu'une SELECT
la requête renvoie des lignes dans un ordre imprévisible. L'utilisation de la ORDER BY
clause pour trier les lignes.
Exemple D'utilisation
Création d'une table:
CREATE TABLE stripe_log_table
(
timestamp DateTime,
message_type String,
message String
)
ENGINE = StripeLog
Insertion de données:
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')
Nous avons utilisé deux INSERT
requêtes pour créer deux blocs de données data.bin
fichier.
ClickHouse utilise plusieurs threads lors de la sélection des données. Chaque thread lit un bloc de données séparé et renvoie les lignes résultantes indépendamment à la fin. En conséquence, l'ordre des blocs de lignes dans le résultat ne correspond pas à l'ordre des mêmes blocs dans l'entrée, dans la plupart des cas. Exemple:
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 │
└─────────────────────┴──────────────┴───────────────────────────┘
Trier les résultats (ordre croissant par défaut):
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 │
└─────────────────────┴──────────────┴────────────────────────────┘