* split up select.md * array-join.md basic refactoring * distinct.md basic refactoring * format.md basic refactoring * from.md basic refactoring * group-by.md basic refactoring * having.md basic refactoring * additional index.md refactoring * into-outfile.md basic refactoring * join.md basic refactoring * limit.md basic refactoring * limit-by.md basic refactoring * order-by.md basic refactoring * prewhere.md basic refactoring * adjust operators/index.md links * adjust sample.md links * adjust more links * adjust operatots links * fix some links * adjust aggregate function article titles * basic refactor of remaining select clauses * absolute paths in make_links.sh * run make_links.sh * remove old select.md locations * translate docs/es * translate docs/fr * translate docs/fa * remove old operators.md location * change operators.md links * adjust links in docs/es * adjust links in docs/es * minor texts adjustments * wip * update machine translations to use new links * fix changelog * es build fixes * get rid of some select.md links * temporary adjust ru links * temporary adjust more ru links * improve curly brace handling * adjust ru as well * fa build fix * ru link fixes * zh link fixes * temporary disable part of anchor checks
4.9 KiB
machine_translated | machine_translated_rev | toc_priority | toc_title |
---|---|---|---|
true | 72537a2d52 |
40 | Katmak |
Katmak
Kullanılmak üzere hazırlanmış veri yapısı JOIN harekat.
Tablo oluşturma
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
Ayrıntılı açıklamasına bakın CREATE TABLE sorgu.
Motor Parametreleri
join_strictness
– Katılık katılın.join_type
– Birleştirme türü.k1[, k2, ...]
– Key columns from theUSING
fık thera:JOIN
işlemi yapılmamaktadır.
Girmek join_strictness
ve join_type
tırnak işaretleri olmadan parametreler, örneğin, Join(ANY, LEFT, col1)
. Onlar eşleşmelidir JOIN
tablo için kullanılacak işlem. Parametreler eşleşmezse, ClickHouse bir istisna atmaz ve yanlış veri döndürebilir.
Tablo Kullanımı
Örnek
Sol taraftaki tablo oluşturma:
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog
INSERT INTO id_val VALUES (1,11)(2,12)(3,13)
Sağ tarafı oluşturma Join
Tablo:
CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id)
INSERT INTO id_val_join VALUES (1,21)(1,22)(3,23)
Tabloları birleştirme:
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id) SETTINGS join_use_nulls = 1
┌─id─┬─val─┬─id_val_join.val─┐
│ 1 │ 11 │ 21 │
│ 2 │ 12 │ ᴺᵁᴸᴸ │
│ 3 │ 13 │ 23 │
└────┴─────┴─────────────────┘
Alternatif olarak, veri alabilirsiniz Join
tablo, birleştirme anahtarı değerini belirterek:
SELECT joinGet('id_val_join', 'val', toUInt32(1))
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│ 21 │
└────────────────────────────────────────────┘
Veri seçme ve ekleme
Kullanabilirsiniz INSERT
veri eklemek için sorgular Join
- motor masaları. Tablo ile oluşturulmuş ise ANY
katılık, yinelenen anahtarlar için veriler göz ardı edilir. İle... ALL
katılık, tüm satırlar eklenir.
Gerçekleştir aemezsiniz SELECT
doğrudan tablodan sorgulayın. Bunun yerine, aşağıdaki yöntemlerden birini kullanın:
- Tabloyu sağ tarafa yerleştirin.
JOIN
yan. - Call the joinGet tablodan bir sözlükten aynı şekilde veri ayıklamanızı sağlayan işlev.
Sınırlamalar ve Ayarlar
Bir tablo oluştururken aşağıdaki ayarlar uygulanır:
Bu Join
- motor tabloları kullanılamaz GLOBAL JOIN
harekat.
Bu Join
- motor kullanımına izin verir join_use_nulls ayarı CREATE TABLE
deyim. Ve SELECT sorgu kullanımına izin verir join_use_nulls
çok. Eğer farklı varsa join_use_nulls
ayarlar, tablo birleştirme bir hata alabilirsiniz. Bu katılmak türüne bağlıdır. Kullandığınızda joinGet fonksiyonu, aynı kullanmak zorunda join_use_nulls
ayarı CRATE TABLE
ve SELECT
deyimler.
Veri Depolama
Join
tablo verileri her zaman RAM'de bulunur. Bir tabloya satır eklerken, sunucu yeniden başlatıldığında geri yüklenebilir, böylece ClickHouse disk üzerindeki dizine veri bloklarını yazar.
Sunucu yanlış yeniden başlatılırsa, diskteki veri bloğu kaybolabilir veya zarar görebilir. Bu durumda, dosyayı hasarlı verilerle el ile silmeniz gerekebilir.