ClickHouse/docs/tr/sql-reference/statements/alter.md
Ivan Blinkov d91c97d15d
[docs] replace underscores with hyphens (#10606)
* Replace underscores with hyphens

* remove temporary code

* fix style check

* fix collapse
2020-04-30 21:19:18 +03:00

28 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true e8cd92bba3 36 ALTER

ALTER

Bu ALTER sorgu yalnızca için desteklenir *MergeTree tablo gibi MergeveDistributed. Sorgunun çeşitli varyasyonları vardır.

Sütun Manipülasyonları

Tablo yapısını değiştirme.

ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...

Sorguda, bir veya daha fazla virgülle ayrılmış eylemlerin bir listesini belirtin. Her eylem bir sütun üzerinde bir işlemdir.

Aşağıdaki eylemler desteklenir:

Bu eylemler aşağıda ayrıntılı olarak açıklanmıştır.

ADD COLUMN

ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [codec] [AFTER name_after]

Belirtilen tabloya yeni bir sütun ekler name, type, codec ve default_expr (bkz Varsayılan ifadeler).

Eğer… IF NOT EXISTS yan tümcesi dahil, sütun zaten varsa sorgu bir hata döndürmez. Belirtir specifyseniz AFTER name_after (başka bir sütunun adı), sütun tablo sütunları listesinde belirtilen sonra eklenir. Aksi takdirde, sütun tablonun sonuna eklenir. Bir tablonun başına bir sütun eklemek için bir yol olduğunu unutmayın. Bir eylem zinciri için, name_after önceki eylemlerden birine eklenen bir sütunun adı olabilir.

Bir sütun eklemek, verilerle herhangi bir işlem yapmadan tablo yapısını değiştirir. Sonra veriler diskte görünmüyor ALTER. Tablodan okurken bir sütun için veri eksikse, varsayılan değerlerle doldurulur (varsa, varsayılan ifadeyi gerçekleştirerek veya sıfır veya boş dizeler kullanarak). Sütun, veri parçalarını birleştirdikten sonra diskte görünür (bkz. MergeTree).

Bu yaklaşım bize tamamlamak için izin verir ALTER eski verilerin hacmini arttırmadan anında sorgulayın.

Örnek:

ALTER TABLE visits ADD COLUMN browser String AFTER user_id

DROP COLUMN

DROP COLUMN [IF EXISTS] name

Sütun adı ile siler name. Eğer… IF EXISTS yan tümcesi belirtilir, sütun yoksa sorgu bir hata döndürmez.

Dosya sisteminden veri siler. Bu, tüm dosyaları sildiğinden, sorgu neredeyse anında tamamlanır.

Örnek:

ALTER TABLE visits DROP COLUMN browser

CLEAR COLUMN

CLEAR COLUMN [IF EXISTS] name IN PARTITION partition_name

Belirtilen bölüm için bir sütundaki tüm verileri sıfırlar. Bölümdeki bölüm adını ayarlama hakkında daha fazla bilgi edinin Bölüm ifadesi nasıl belirlenir.

Eğer… IF EXISTS yan tümcesi belirtilir, sütun yoksa sorgu bir hata döndürmez.

Örnek:

ALTER TABLE visits CLEAR COLUMN browser IN PARTITION tuple()

COMMENT COLUMN

COMMENT COLUMN [IF EXISTS] name 'comment'

Sütuna bir yorum ekler. Eğer… IF EXISTS yan tümcesi belirtilir, sütun yoksa sorgu bir hata döndürmez.

Her sütunun bir yorumu olabilir. Sütun için bir yorum zaten varsa, yeni bir yorum önceki yorumun üzerine yazar.

Yorumlar saklanır comment_expression tarafından döndürülen sütun DESCRIBE TABLE sorgu.

Örnek:

ALTER TABLE visits COMMENT COLUMN browser 'The table shows the browser used for accessing the site.'

MODIFY COLUMN

MODIFY COLUMN [IF EXISTS] name [type] [default_expr] [TTL]

Bu sorgu değişiklikleri name sütun özellikleri:

  • Tür

  • Varsayılan ifade

  • TTL

    For examples of columns TTL modifying, see [Column TTL](../engines/table_engines/mergetree_family/mergetree.md#mergetree-column-ttl).
    

Eğer… IF EXISTS yan tümcesi belirtilir, sütun yoksa sorgu bir hata döndürmez.

Türü değiştirirken, değerler sanki toType fonksiyonlar onlara uygulandı. Yalnızca varsayılan ifade değiştirilirse, sorgu karmaşık bir şey yapmaz ve neredeyse anında tamamlanır.

Örnek:

ALTER TABLE visits MODIFY COLUMN browser Array(String)

Changing the column type is the only complex action it changes the contents of files with data. For large tables, this may take a long time.

Birkaç işlem aşaması vardır:

  • Geçici (yeni) dosyaları değiştirilmiş verilerle hazırlama.
  • Eski dosyaları yeniden adlandırma.
  • Geçici (yeni) dosyaları eski adlara yeniden adlandırma.
  • Eski dosyaları silme.

Sadece ilk aşama zaman alır. Bu aşamada bir hata varsa, veriler değişmez. Ardışık aşamalardan biri sırasında bir hata varsa, veriler el ile geri yüklenebilir. Eski dosyalar dosya sisteminden silindi, ancak yeni dosyaların verileri diske yazılmadı ve kaybolduysa istisnadır.

Bu ALTER sütunları değiştirmek için sorgu çoğaltılır. Talimatlar ZooKeeper kaydedilir, daha sonra her kopya bunları uygular. Tüm ALTER sorgular aynı sırada çalıştırılır. Sorgu, diğer yinelemeler üzerinde tamamlanması uygun eylemleri bekler. Ancak, yinelenen bir tablodaki sütunları değiştirmek için bir sorgu kesilebilir ve tüm eylemler zaman uyumsuz olarak gerçekleştirilir.

Sorgu sınırlamalarını değiştir

Bu ALTER sorgu oluşturmak ve iç içe veri yapıları, ancak tüm iç içe veri yapıları ayrı öğeleri (sütunlar) silmenizi sağlar. İç içe geçmiş bir veri yapısı eklemek için, aşağıdaki gibi bir ada sahip sütunlar ekleyebilirsiniz name.nested_name ve türü Array(T). İç içe geçmiş bir veri yapısı, noktadan önce aynı öneki olan bir ada sahip birden çok dizi sütununa eşdeğerdir.

Birincil anahtardaki veya örnekleme anahtarındaki sütunları silmek için destek yoktur. ENGINE ifade). Birincil anahtarda bulunan sütunların türünü değiştirmek, yalnızca bu değişiklik verilerin değiştirilmesine neden olmazsa mümkündür (örneğin, bir numaraya değer eklemenize veya bir türden değiştirmenize izin verilir DateTime -e doğru UInt32).

Eğer… ALTER sorgu, ihtiyacınız olan tablo değişikliklerini yapmak için yeterli değildir, yeni bir tablo oluşturabilir, verileri kullanarak kopyalayabilirsiniz. INSERT SELECT sorgu, daha sonra tabloları kullanarak geçiş RENAME sorgu ve eski tabloyu silin. Kullanabilirsiniz clickhouse-fotokopi makinesi bir alternatif olarak INSERT SELECT sorgu.

Bu ALTER sorgu tüm okur ve tablo için yazar engeller. Başka bir deyişle, Eğer uzun SELECT zamanda çalışıyor ALTER sorgu ALTER sorgu tamamlanmasını bekleyecektir. Aynı zamanda, aynı tablodaki tüm yeni sorgular bu sırada bekleyecektir ALTER çalışıyor.

Verileri kendileri saklamayan tablolar için (örneğin Merge ve Distributed), ALTER sadece tablo yapısını değiştirir ve alt tabloların yapısını değiştirmez. Örneğin, ALTER for a çalıştırırken Distributed tablo, ayrıca çalıştırmak gerekir ALTER tüm uzak sunuculardaki tablolar için.

Anahtar İfadelerle Manipülasyonlar

Aşağıdaki komut desteklenir:

MODIFY ORDER BY new_expression

Sadece tablolar için çalışır MergeTree aile (dahil çoğaltıyordu Tablolar). Komutu değiştirir sıralama anahtarı tablonun -e doğru new_expression (bir ifade veya ifadelerin bir tuple). Birincil anahtar aynı kalır.

Komut, yalnızca meta verileri değiştirdiği bir anlamda hafiftir. Veri parçası özelliği tutmak için satırlar sıralama anahtarı ifadesi tarafından sıralanır varolan sütunları içeren ifadeler ekleyemezsiniz sıralama anahtarına (yalnızca sütun tarafından eklenen ADD COLUMN aynı komut ALTER sorgu).

Veri Atlama Endeksleri İle Manipülasyonlar

Sadece tablolar için çalışır *MergeTree aile (dahil çoğaltıyordu Tablolar). Aşağıdaki işlemler mevcuttur:

  • ALTER TABLE [db].name ADD INDEX name expression TYPE type GRANULARITY value AFTER name [AFTER name2] - Tablolar meta dizin açıklama ekler.

  • ALTER TABLE [db].name DROP INDEX name - Tablolar meta dizin açıklama kaldırır ve diskten dizin dosyalarını siler.

Bu komutlar, yalnızca meta verileri değiştirdikleri veya dosyaları kaldırdıkları bir anlamda hafiftir. Ayrıca, çoğaltılırlar (ZooKeeper aracılığıyla indeks meta verilerini senkronize etme).

Kısıtlamalar İle Manipülasyonlar

Daha fazla görmek kısıtlamalar

Kısıtlamalar eklenebilir veya aşağıdaki sözdizimi kullanılarak silinebilir:

ALTER TABLE [db].name ADD CONSTRAINT constraint_name CHECK expression;
ALTER TABLE [db].name DROP CONSTRAINT constraint_name;

Sorgular eklemek veya hemen işlenir, böylece tablodan kısıtlamaları hakkında meta verileri kaldırın.

Kısıtlama kontrolü idam edilm willeyecek eklen .mişse mevcut ver .ilerde

Çoğaltılmış tablolardaki tüm değişiklikler Zookeepera yayınlanır, bu nedenle diğer kopyalara uygulanır.

Bölümler Ve parçalar Ile manipülasyonlar

Aşağıdaki işlemler ile bölümler mevcuttur:

Bölüm ayırmak {#alter_detach-bölüm}

ALTER TABLE table_name DETACH PARTITION partition_expr

Belirtilen bölüm için tüm verileri detached dizin. Sunucu, yok gibi ayrılmış veri Bölümü hakkında unutur. Sunucu, bu verileri siz yapana kadar bilmeyecektir. ATTACH sorgu.

Örnek:

ALTER TABLE visits DETACH PARTITION 201901

Bir bölümdeki bölüm ifadesini ayarlama hakkında bilgi edinin Bölüm ifadesi nasıl belirlenir.

Sorgu yürütüldükten sonra, veri ile istediğiniz her şeyi yapabilirsiniz detached directory — delete it from the file system, or just leave it.

This query is replicated it moves the data to the detached tüm kopyalarda dizin. Bu sorguyu yalnızca bir lider yinelemesinde yürütebileceğinizi unutmayın. Bir kopya bir lider olup olmadığını öğrenmek için SELECT sorgu için sistem.yinelemeler Tablo. Alternatif olarak, bir yapmak daha kolaydır DETACH tüm yinelemelerde sorgu - tüm yinelemeler, lider yinelemesi dışında bir özel durum oluşturur.

DROP PARTITION

ALTER TABLE table_name DROP PARTITION partition_expr

Belirtilen bölümü tablodan siler. Bu sorgu bölümü etkin olarak etiketler ve verileri tamamen yaklaşık 10 dakika içinde siler.

Bir bölümdeki bölüm ifadesini ayarlama hakkında bilgi edinin Bölüm ifadesi nasıl belirlenir.

The query is replicated it deletes data on all replicas.

DROP DETACHED PARTITION|PART

ALTER TABLE table_name DROP DETACHED PARTITION|PART partition_expr

Belirtilen bölümü veya belirtilen bölümün tüm bölümlerini kaldırır detached. Bir bölümdeki bölüm ifadesini ayarlama hakkında daha fazla bilgi edinin Bölüm ifadesi nasıl belirlenir.

ATTACH PARTITION|PART

ALTER TABLE table_name ATTACH PARTITION|PART partition_expr

Tablodan veri ekler detached dizin. Tüm bir bölüm veya ayrı bir bölüm için veri eklemek mümkündür. Örnekler:

ALTER TABLE visits ATTACH PARTITION 201901;
ALTER TABLE visits ATTACH PART 201901_2_2_0;

Bir bölümdeki bölüm ifadesini ayarlama hakkında daha fazla bilgi edinin Bölüm ifadesi nasıl belirlenir.

Bu sorgu çoğaltılır. Çoğaltma başlatıcısı, veri olup olmadığını denetler. detached dizin. Veri varsa, sorgu bütünlüğünü denetler. Her şey doğruysa, sorgu verileri tabloya ekler. Diğer tüm yinelemeler, çoğaltma başlatıcısından verileri karşıdan yükleyin.

Böylece veri koyabilirsiniz detached bir kopya üzerinde dizin ve ALTER ... ATTACH tüm yinelemelerde tabloya eklemek için sorgu.

ATTACH PARTITION FROM

ALTER TABLE table2 ATTACH PARTITION partition_expr FROM table1

Bu sorgu, veri bölümünü table1 -e doğru table2 exsisting için veri ekler table2. Verilerin silinmeyeceğini unutmayın table1.

Sorgunun başarıyla çalışması için aşağıdaki koşulların karşılanması gerekir:

  • Her iki tablo da aynı yapıya sahip olmalıdır.
  • Her iki tablo da aynı bölüm anahtarına sahip olmalıdır.

REPLACE PARTITION

ALTER TABLE table2 REPLACE PARTITION partition_expr FROM table1

Bu sorgu, veri bölümünü table1 -e doğru table2 ve mevcut bölümün yerini alır table2. Verilerin silinmeyeceğini unutmayın table1.

Sorgunun başarıyla çalışması için aşağıdaki koşulların karşılanması gerekir:

  • Her iki tablo da aynı yapıya sahip olmalıdır.
  • Her iki tablo da aynı bölüm anahtarına sahip olmalıdır.

MOVE PARTITION TO TABLE

ALTER TABLE table_source MOVE PARTITION partition_expr TO TABLE table_dest

Bu sorgu, veri bölümünü table_source -e doğru table_dest verileri silme ile table_source.

Sorgunun başarıyla çalışması için aşağıdaki koşulların karşılanması gerekir:

  • Her iki tablo da aynı yapıya sahip olmalıdır.
  • Her iki tablo da aynı bölüm anahtarına sahip olmalıdır.
  • Her iki tablo da aynı motor ailesi olmalıdır. (çoğaltılmış veya çoğaltılmamış)
  • Her iki tablo da aynı depolama ilkesine sahip olmalıdır.

CLEAR COLUMN IN PARTITION

ALTER TABLE table_name CLEAR COLUMN column_name IN PARTITION partition_expr

Bir bölümdeki belirtilen sütundaki tüm değerleri sıfırlar. Eğer… DEFAULT bir tablo oluştururken yan tümcesi belirlendi, bu sorgu sütun değerini belirtilen varsayılan değere ayarlar.

Örnek:

ALTER TABLE visits CLEAR COLUMN hour in PARTITION 201902

FREEZE PARTITION

ALTER TABLE table_name FREEZE [PARTITION partition_expr]

Bu sorgu, belirtilen bir bölümün yerel yedeğini oluşturur. Eğer… PARTITION yan tümcesi atlandı, sorgu aynı anda tüm bölümlerin yedeğini oluşturur.

!!! note "Not" Tüm yedekleme işlemi sunucuyu durdurmadan gerçekleştirilir.

Eski tarz tablolar için bölüm adının önekini belirtebileceğinizi unutmayın (örneğin, 2019)- daha sonra sorgu tüm ilgili bölümler için yedek oluşturur. Bir bölümdeki bölüm ifadesini ayarlama hakkında bilgi edinin Bölüm ifadesi nasıl belirlenir.

Yürütme sırasında, bir veri anlık görüntüsü için sorgu, bir tablo verilerine sabit bağlantılar oluşturur. Hardlinks dizine yerleştirilir /var/lib/clickhouse/shadow/N/..., nere:

  • /var/lib/clickhouse/ yapılandırmada belirtilen çalışma ClickHouse dizinidir.
  • N yedeklemenin artımlı sayısıdır.

!!! note "Not" Kullanıyorsanız bir tablodaki veri depolama için disk kümesi, bu shadow/N dizin tarafından eşleşen veri parçalarını depolamak, her diskte görünür PARTITION ifade.

Dizinlerin aynı yapısı, içinde olduğu gibi yedek içinde oluşturulur /var/lib/clickhouse/. Sorgu gerçekleştirir chmod tüm dosyalar için, onlara yazmayı yasaklamak.

Yedeklemeyi oluşturduktan sonra, verileri /var/lib/clickhouse/shadow/ uzak sunucuya ve sonra yerel sunucudan silin. Not ALTER t FREEZE PARTITION sorgu çoğaltılmaz. Yalnızca yerel sunucuda yerel bir yedekleme oluşturur.

Sorgu neredeyse anında yedekleme oluşturur (ancak önce geçerli sorguları ilgili tabloya çalışmayı bitirmek için bekler).

ALTER TABLE t FREEZE PARTITION tablo meta verilerini değil, yalnızca verileri kopyalar. Tablo meta verilerinin yedeğini almak için dosyayı kopyalayın /var/lib/clickhouse/metadata/database/table.sql

Bir yedekten veri geri yüklemek için aşağıdakileri yapın:

  1. Yoksa tablo oluşturun. Sorguyu görüntülemek için kullanın .sql dosyası (değiştir ATTACH içinde ile CREATE).
  2. Veri kopyalama data/database/table/ yedekleme içindeki dizin /var/lib/clickhouse/data/database/table/detached/ dizin.
  3. Koşmak ALTER TABLE t ATTACH PARTITION verileri bir tabloya eklemek için sorgular.

Yedeklemeden geri yükleme, sunucuyu durdurmayı gerektirmez.

Yedekleme ve geri yükleme verileri hakkında daha fazla bilgi için bkz: Veri Yedekleme bölme.

CLEAR INDEX IN PARTITION

ALTER TABLE table_name CLEAR INDEX index_name IN PARTITION partition_expr

Sorgu benzer çalışır CLEAR COLUMN, ancak bir sütun verileri yerine bir dizini sıfırlar.

FETCH PARTITION

ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'path-in-zookeeper'

Başka bir sunucudan bir bölüm indirir. Bu sorgu yalnızca çoğaltılmış tablolar için çalışır.

Sorgu aşağıdakileri yapar:

  1. Bölümü belirtilen parçadan indirir. İçinde path-in-zookeeper zookeeper içinde shard için bir yol belirtmeniz gerekir.
  2. Sonra sorgu indirilen verileri detached directory of the table_name Tablo. Kullan… ATTACH PARTITION|PART tabloya veri eklemek için sorgu.

Mesela:

ALTER TABLE users FETCH PARTITION 201902 FROM '/clickhouse/tables/01-01/visits';
ALTER TABLE users ATTACH PARTITION 201902;

Not thate that:

  • Bu ALTER ... FETCH PARTITION sorgu çoğaltılmaz. Bu bölüm için yerleştirir detached yalnızca yerel sunucuda dizin.
  • Bu ALTER TABLE ... ATTACH sorgu çoğaltılır. Verileri tüm yinelemelere ekler. Veriler, kopyalardan birine eklenir. detached dizin ve diğerlerine - komşu kopyalardan.

İndirmeden önce, sistem bölümün olup olmadığını ve tablo yapısının eşleşip eşleşmediğini kontrol eder. En uygun yineleme, sağlıklı yinelemeler otomatik olarak seçilir.

Sorgu çağrılsa da ALTER TABLE, tablo yapısını değiştirmez ve tabloda bulunan verileri hemen değiştirmez.

MOVE PARTITION|PART

Bölümleri veya veri parçalarını başka bir birime veya diske taşır. MergeTree- motor masaları. Görmek Veri depolama için birden fazla blok cihazı kullanma.

ALTER TABLE table_name MOVE PARTITION|PART partition_expr TO DISK|VOLUME 'disk_name'

Bu ALTER TABLE t MOVE sorgu:

  • Çoğaltılamaz, çünkü farklı çoğaltmalar farklı depolama ilkelerine sahip olabilir.
  • Belirtilen disk veya birim yapılandırılmamışsa bir hata döndürür. Depolama ilkesinde belirtilen veri taşıma koşulları uygulanamazsa, sorgu da bir hata döndürür.
  • Durumda bir hata döndürebilir, taşınacak veriler zaten bir arka plan işlemi tarafından taşındığında, eşzamanlı ALTER TABLE t MOVE sorgu veya arka plan veri birleştirme sonucu. Bir kullanıcı bu durumda herhangi bir ek eylem gerçekleştirmemelidir.

Örnek:

ALTER TABLE hits MOVE PART '20190301_14343_16206_438' TO VOLUME 'slow'
ALTER TABLE hits MOVE PARTITION '2019-09-01' TO DISK 'fast_ssd'

Bölüm İfadesi Nasıl Ayarlanır

Bölüm ifadesini şu şekilde belirtebilirsiniz ALTER ... PARTITION farklı şekillerde sorgular:

  • Bu gibi bir değer partition sütun system.parts Tablo. Mesela, ALTER TABLE visits DETACH PARTITION 201901.
  • Tablo sütunundan ifade olarak. Sabitler ve sabit ifadeler desteklenir. Mesela, ALTER TABLE visits DETACH PARTITION toYYYYMM(toDate('2019-01-25')).
  • Bölüm kimliğini kullanma. Partition ID, dosya sistemindeki ve Zookeeperdaki bölümlerin adları olarak kullanılan bölümün (mümkünse insan tarafından okunabilir) bir dize tanımlayıcısıdır. Bölüm kimliği belirtilmelidir PARTITION ID fık .ra, tek tırnak içinde. Mesela, ALTER TABLE visits DETACH PARTITION ID '201901'.
  • İn the ALTER ATTACH PART ve DROP DETACHED PART sorgu, bir parçanın adını belirtmek için, bir değer ile dize literal kullanın name sütun sistem.detached_parts Tablo. Mesela, ALTER TABLE visits ATTACH PART '201901_1_1_0'.

Bölüm belirtilirken tırnak kullanımı bölüm ifadesi türüne bağlıdır. Örneğin, için String yazın, adını tırnak içinde belirtmeniz gerekir ('). İçin Date ve Int* türleri hiçbir tırnak gereklidir.

Eski stil tablolar için, bölümü bir sayı olarak belirtebilirsiniz 201901 veya bir dize '201901'. Yeni stil tabloları için sözdizimi türleri ile daha sıkı (değerleri giriş biçimi için ayrıştırıcı benzer).

Yukarıdaki tüm kurallar için de geçerlidir OPTIMIZE sorgu. Bölümlenmemiş bir tabloyu en iyi duruma getirirken tek bölümü belirtmeniz gerekiyorsa, ifadeyi ayarlayın PARTITION tuple(). Mesela:

OPTIMIZE TABLE table_not_partitioned PARTITION tuple() FINAL;

Örnekleri ALTER ... PARTITION sorgular testlerde gösterilmiştir 00502_custom_partitioning_local ve 00502_custom_partitioning_replicated_zookeeper.

Tablo TTL Ile manipülasyonlar

Değiştirebilirsiniz tablo TTL aşağıdaki formun bir isteği ile:

ALTER TABLE table-name MODIFY TTL ttl-expression

Alter sorgularının eşzamanlılığı

Replicatable olmayan tablolar için, tüm ALTER sorgular eşzamanlı olarak gerçekleştirilir. Replicatable tablolar için, sorgu yalnızca uygun eylemler için yönergeler ekler ZooKeeper ve eylemlerin kendileri mümkün olan en kısa sürede gerçekleştirilir. Ancak, sorgu tüm yinelemeler üzerinde tamamlanması için bu eylemleri bekleyebilir.

İçin ALTER ... ATTACH|DETACH|DROP sorgular, kullanabilirsiniz replication_alter_partitions_sync bekleyen kurmak için ayarlama. Olası değerler: 0 do not wait; 1 only wait for own execution (default); 2 wait for all.

Mutasyonlar

Mutasyonlar, bir tablodaki satırların değiştirilmesine veya silinmesine izin veren bir alter query varyantıdır. Standart aksine UPDATE ve DELETE nokta veri değişikliklerine yönelik sorgular, mutasyonlar, bir tablodaki çok sayıda satırı değiştiren ağır işlemler için tasarlanmıştır. İçin desteklenen MergeTree çoğaltma desteği olan motorlar da dahil olmak üzere tablo motorları ailesi.

Varolan tablolar olduğu gibi mutasyonlar için hazırdır(dönüştürme gerekmez), ancak ilk mutasyon bir tabloya uygulandıktan sonra Meta Veri formatı önceki sunucu sürümleriyle uyumsuz hale gelir ve önceki bir sürüme geri dönmek imkansız hale gelir.

Şu anda mevcut komutlar:

ALTER TABLE [db.]table DELETE WHERE filter_expr

Bu filter_expr tip olmalıdır UInt8. Sorgu, bu ifadenin sıfır olmayan bir değer aldığı tablodaki satırları siler.

ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr

Bu filter_expr tip olmalıdır UInt8. Bu sorgu, belirtilen sütunların değerlerini, satırlardaki karşılık gelen ifadelerin değerlerine güncelleştirir. filter_expr sıfır olmayan bir değer alır. Değerleri kullanarak sütun türüne döküm CAST operatör. Birincil veya bölüm anahtarının hesaplanmasında kullanılan sütunları güncelleştirme desteklenmiyor.

ALTER TABLE [db.]table MATERIALIZE INDEX name IN PARTITION partition_name

Sorgu ikincil dizini yeniden oluşturur name bölümünde partition_name.

Bir sorgu virgülle ayrılmış birkaç komut içerebilir.

* MergeTree tabloları mutasyonları için tüm veri parçalarını yeniden yazarak yürütün. Atomiklik yoktur-parçalar, hazır oldukları anda mutasyona uğramış parçalar için ikame edilir ve bir SELECT bir mutasyon sırasında yürütülmeye başlayan sorgu, henüz mutasyona uğramamış olan parçalardan gelen verilerle birlikte mutasyona uğramış olan parçalardan gelen verileri görecektir.

Mutasyonlar tamamen yaratılış sırasına göre sıralanır ve her bir parçaya bu sırayla uygulanır. Mutasyonlar da kısmen ekler ile sıralanır-mutasyon gönderilmeden önce tabloya eklenen veriler mutasyona uğrayacak ve bundan sonra eklenen veriler mutasyona uğramayacaktır. Mutasyonların ekleri hiçbir şekilde engellemediğini unutmayın.

Mutasyon girişi eklendikten hemen sonra bir mutasyon sorgusu döner(çoğaltılmış tablolar Zookeepera, çoğaltılmamış tablolar için-dosya sistemine). Mutasyonun kendisi sistem profili ayarlarını kullanarak eşzamansız olarak yürütür. Mutasyonların ilerlemesini izlemek için kullanabilirsiniz system.mutations Tablo. Başarıyla gönderilen BIR mutasyon, ClickHouse sunucuları yeniden başlatılmış olsa bile yürütmeye devam edecektir. Gönderildikten sonra mutasyonu geri almanın bir yolu yoktur, ancak mutasyon herhangi bir nedenle sıkışmışsa, KILL MUTATION sorgu.

Bitmiş mutasyonlar için girişler hemen silinmez (korunmuş girişlerin sayısı, finished_mutations_to_keep depolama motoru parametresi). Eski mutasyon girişleri silinir.

Orijinal makale