ClickHouse/docs/tr/engines/table-engines/special/join.md
2020-07-16 11:56:45 +03:00

4.9 KiB
Raw Blame History

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ııklamasına bakın CREATE TABLE sorgu.

Motor Parametreleri

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.

Orijinal makale